Greenspun's tenth rule

expressão

programação

'Qualquer programa em C ou Fortran suficientemente complicado contém uma implementação ad hoc, informalmente especificada, cheia de bugs e lenta de metade do Common Lisp.'

A tirada de Philip Greenspun (não existem regras de um a nove) observa que programas grandes inevitavelmente desenvolvem os recursos dinâmicos que faltam à sua linguagem: interpretadores de configuração, sistemas de objetos, coleta de lixo, tudo reinventado mal. É o argumento clássico por escolher ferramentas expressivas em vez de reconstruí-las por acidente. O corolário é muito citado: isso inclui as próprias implementações de Common Lisp.

Todo programa em C ou Fortran suficientemente complicado contém uma implementação ad hoc, informalmente especificada, cheia de defeitos e lenta de metade do Common Lisp. A regra de Philip Greenspun é uma piada com uma alegação séria: programas grandes convergem para o mesmo conjunto de capacidades, independentemente da linguagem em que começaram.

A observação se sustenta. Bases grandes em C desenvolvem tabelas de despacho dinâmico, contagem de referências, uma linguagem de configuração que adquire condicionais, e por fim algo que avalia expressões em tempo de execução. Cada acréscimo é resposta local razoável a uma necessidade real, e o agregado é um interpretador que ninguém projetou, especificou nem testou como tal.

A leitura útil não é que todos deveriam usar Lisp. É que essas capacidades são o que sistemas complexos exigem, então a escolha é obtê-las de uma implementação bem testada ou acumulá-las por acidente. A versão acidental é a descrita na regra: ad hoc porque ninguém a projetou, informalmente especificada porque nunca foi escrita, e cheia de defeitos porque nunca foi aquilo que alguém estava construindo.

Todos os verbetes do glossário