La décima regla de programación de Greenspun es un aforismo en la programación de computadoras y especialmente en los círculos de lenguajes de programación que dice: [1] [2]
Cualquier programa C o Fortran suficientemente complicado contiene una implementación ad hoc , especificada informalmente, lenta y plagada de errores de la mitad de Common Lisp .
La regla expresa la opinión de que la flexibilidad y extensibilidad argumentadas diseñadas en el lenguaje de programación Lisp incluye todas las funciones que teóricamente se necesitan para escribir cualquier programa de computadora complejo, y que las características requeridas para desarrollar y administrar tal complejidad en otros lenguajes de programación son equivalentes a algunas subconjunto de los métodos utilizados en Lisp.
Otros lenguajes de programación, aunque afirman ser más simples, requieren que los programadores reinventen de manera desordenada una cantidad significativa de funcionalidad necesaria que está presente en Lisp como una base estándar y probada en el tiempo.
También puede interpretarse como una crítica satírica de sistemas que incluyen subsistemas complejos y altamente configurables. [3] En lugar de incluir un intérprete personalizado para algún lenguaje de dominio específico , la regla de Greenspun sugiere usar un lenguaje ampliamente aceptado y con todas las funciones como Lisp.
Paul Graham también destaca la naturaleza satírica del concepto, aunque basado en cuestiones reales:
Parece una broma, pero sucede con tanta frecuencia y en diversos grados en grandes proyectos de programación que existe un nombre para el fenómeno: Décima Regla de Greenspun. [4]
La regla fue escrita alrededor de 1993 por Philip Greenspun . Aunque se la conoce como su décima regla, es un nombre inapropiado. En realidad no hay ninguna norma anterior, sólo la décima. La razón de esto según Greenspun:
Lo siento, Han-Wen, pero no existen 9 leyes anteriores. Sólo estaba intentando darle a la regla un nombre memorable. [5]
El hacker Robert Morris declaró más tarde un corolario que aclara el conjunto de programas "suficientemente complicados" a los que se aplica la regla:
…incluido Common Lisp. [6]
Este corolario se refiere en broma al hecho de que muchas implementaciones de Common Lisp (especialmente aquellas disponibles a principios de los años 1990) dependen de un núcleo de bajo nivel de C compilado , que evita el problema del bootstrapping pero puede ser en sí algo variable en calidad, al menos en comparación. a un Common Lisp limpiamente autohospedado . [7]