Greenspans tionde regel

Greenspuns tionde regel är en  programmeringsaforism som säger : [1] [2]

Alla tillräckligt komplexa C- eller Fortran- program innehåller en nyskriven, ospecificerad, buggig och långsam implementering av hälften av Common Lisp-språket .

Originaltext  (engelska)[ visaDölj] Alla tillräckligt komplicerade C- eller Fortran-program innehåller en ad hoc, informellt specificerad, buggaren, långsam implementering av hälften av Common Lisp.

Ursprung

Regeln formulerades omkring 1993 av Philip Greenspan . Även om det är känt som den "tionde" finns det inga regler som föregår det. Greenspan själv förklarade namnet på följande sätt: [3]

Jag försökte bara ge regeln ett catchy namn.

Originaltext  (engelska)[ visaDölj] Jag försökte bara ge regeln ett minnesvärt namn.

Betydelse

Poängen med regeln är att programmerare, begränsade till lågnivåspråk som C , övervinner språkets begränsningar genom att i programtexten introducera analoger av egenskaper som är inneboende i mer uttrycksfulla språk som Lisp .

Morris förtydligande

Därefter utvecklade hackaren Robert Morris : [4]

… inklusive Common Lisp själv .

Originaltext  (engelska)[ visaDölj] … inklusive Common Lisp.

Förtydligandet kan ses som en kommentar till svårigheten att skapa en effektiv implementering av Common Lisp-språket , eller helt enkelt som en lekfull beskrivning av hur Lisps evalfunktion fungerar .

Tillägg om Prolog

Alla tillräckligt komplexa Lisp- program kommer förmodligen att innehålla en långsam implementering av hälften av Prolog- språket .

Originaltext  (engelska)[ visaDölj] Alla tillräckligt komplicerade LISP-program kommer att innehålla en långsam implementering av hälften av Prolog.

Denna formulering [5] återspeglar det faktum att Prolog -program innehåller öar i Lisp-stil , medan Lisp-program innehåller  öar i Prolog -stil .

Erlang Supplement

Med spridningen av distribuerad programmering och populariseringen av idéer implementerade på Erlang- språket föreslog Robert Virding detta alternativ: [6]

Alla tillräckligt komplexa distribuerade program innehåller en nyskriven, ospecificerad, buggig och långsam implementering av hälften av Erlang-språket.

Originaltext  (engelska)[ visaDölj] Alla tillräckligt komplicerade samtidiga program på ett annat språk innehåller en ad hoc informellt specificerad bugg-driven långsam implementering av hälften av Erlang.

Denna korrigering kallas även Armstrong-konsekvensen.

Generalisering

Regeln varieras ofta genom att orden "Common Lisp" ersätts med talarens favoritspråk (t.ex. Scheme eller Haskell ). Det kan sammanfattas att:

Varje tillräckligt komplex plattform innehåller en nyskriven, ospecificerad, buggig och långsam implementering av ett halvt funktionellt språk.

Originaltext  (engelska)[ visaDölj] Alla tillräckligt komplicerade plattformar innehåller en ad hoc, informellt specificerad, buggfylld, långsam implementering av hälften av ett funktionellt programmeringsspråk.

Anteckningar

  1. Revenge of the Nerds Arkiverad 7 juni 2019 på Wayback Machine , av Paul Graham .  (Engelsk)
  2. Philip Greenspuns forskning arkiverad 24 januari 2009 på Wayback Machine  
  3. 10:e programmeringsregeln Arkiverad 29 januari 2008 på Wayback Machine  
  4. Paul Graham citerar Arkiverad 12 augusti 2005 på Wayback Machine  
  5. comp.lang.prolog: varför inte använda LISP-imp av Prolog i motsats till själva Prolog?  (Engelsk)
  6. [erlang-frågor] Erlang samtidighet Arkiverad 25 juli 2008 på Wayback Machine