Greenspun's tenth rule
expressãoprogramaçã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.