Greenspanovo desáté pravidlo

Greenspunovo desáté pravidlo je  programovací aforismus , který říká : [1] [2]

Jakýkoli dostatečně složitý program v C nebo Fortranu obsahuje nově napsanou, nespecifikovanou, chybovou a pomalou implementaci poloviny jazyka Common Lisp .

Původní text  (anglicky)[ zobrazitskrýt] Jakýkoli dostatečně komplikovaný program v jazyce C nebo Fortran obsahuje ad hoc, neformálně specifikovanou, pomalou implementaci poloviny Common Lisp s chybami.

Původ

Pravidlo bylo formulováno kolem roku 1993 Philipem Greenspanem . Přestože je známá jako „desátá“, neexistují žádná pravidla, která by jí předcházela. Greenspan sám vysvětlil název takto: [3]

Jen jsem se snažil dát pravidlu chytlavý název.

Původní text  (anglicky)[ zobrazitskrýt] Jen jsem se snažil dát pravidlu zapamatovatelné jméno.

Význam

Smyslem pravidla je, že programátoři, omezení na nízkoúrovňové jazyky, jako je C , překonávají omezení jazyka tím, že do textu programů zavádějí analogy vlastností, které jsou vlastní expresivnějším jazykům, jako je Lisp .

Morrisovo objasnění

Následně hacker Robert Morris rozvedl: [4]

…včetně samotného Common Lisp .

Původní text  (anglicky)[ zobrazitskrýt] …včetně Common Lisp.

Objasnění lze chápat jako komentář k obtížnosti vytvoření efektivní implementace jazyka Common Lisp nebo jednoduše jako hravý popis toho, jak funguje funkce Lisp eval .

Dodatek o Prologu

Jakýkoli dostatečně složitý program Lisp bude pravděpodobně obsahovat pomalou implementaci poloviny jazyka Prolog .

Původní text  (anglicky)[ zobrazitskrýt] Každý dostatečně komplikovaný LISP program bude obsahovat pomalou implementaci poloviny Prologu.

Tato formulace [5] odráží skutečnost, že programy Prolog obsahují ostrovy ve stylu Lisp , zatímco programy Lisp obsahují  ostrovy ve stylu Prolog .

Dodatek Erlang

S rozšířením distribuovaného programování a popularizací myšlenek implementovaných v jazyce Erlang navrhl Robert Virding tuto možnost: [6]

Jakýkoli dostatečně komplexní distribuovaný program obsahuje nově napsanou, blíže nespecifikovanou, chybovou a pomalou implementaci poloviny jazyka Erlang.

Původní text  (anglicky)[ zobrazitskrýt] Jakýkoli dostatečně komplikovaný souběžný program v jiném jazyce obsahuje ad hoc neformálně specifikovanou pomalou implementaci poloviny Erlangu s chybami.

Tato oprava se také nazývá Armstrongův důsledek.

Generalizace

Pravidlo se často mění nahrazením slov „Common Lisp“ oblíbeným funkčním jazykem mluvčího (např . Scheme nebo Haskell ). Dá se shrnout, že:

Jakákoli dostatečně komplexní platforma obsahuje nově napsanou, nespecifikovanou, chybovou a pomalou implementaci poloviny funkčního jazyka.

Původní text  (anglicky)[ zobrazitskrýt] Každá dostatečně komplikovaná platforma obsahuje ad hoc, neformálně specifikovanou, pomalou implementaci poloviny funkcionálního programovacího jazyka s chybami.

Poznámky

  1. Revenge of the Nerds Archived 7. června 2019 na Wayback Machine , Paul Graham .  (Angličtina)
  2. Výzkum Philipa Greenspuna archivován 24. ledna 2009 na Wayback Machine  
  3. 10. pravidlo programování Archivováno 29. ledna 2008 na Wayback Machine  
  4. Paul Graham citáty Archivováno 12. srpna 2005 na Wayback Machine  
  5. comp.lang.prolog: proč nepoužít LISP-imp Prologu na rozdíl od samotného Prologu?  (Angličtina)
  6. [erlang-questions] Erlang concurrency Archivováno 25. července 2008 na Wayback Machine