Greenspans tiende regel

Greenspuns tiende regel er en  programmeringsaforisme , der siger: [1] [2]

Ethvert tilstrækkeligt komplekst C- eller Fortran -program indeholder en nyskrevet, uspecificeret, buggy og langsom implementering af halvdelen af ​​Common Lisp-sproget .

Originaltekst  (engelsk)[ Visskjule] Ethvert tilstrækkeligt kompliceret C- eller Fortran-program indeholder en ad hoc, uformelt specificeret, fejlbehæftet, langsom implementering af halvdelen af ​​Common Lisp.

Oprindelse

Reglen blev formuleret omkring 1993 af Philip Greenspan . Selvom det er kendt som den "tiende", er der ingen regler, der går forud for det. Greenspan selv forklarede navnet som følger: [3]

Jeg prøvede bare at give reglen et iørefaldende navn.

Originaltekst  (engelsk)[ Visskjule] Jeg prøvede bare at give reglen et mindeværdigt navn.

Betydning

Pointen med reglen er, at programmører, begrænset til sprog på lavt niveau som C , overvinder sprogets begrænsninger ved at indføre analoger af egenskaber, der er iboende i mere udtryksfulde sprog som Lisp , i teksten til programmer .

Morris' afklaring

Efterfølgende uddybede hackeren Robert Morris : [4]

... inklusive Common Lisp selv .

Originaltekst  (engelsk)[ Visskjule] ...herunder almindelig Lisp.

Præciseringen kan ses som en kommentar til vanskeligheden ved at skabe en effektiv implementering af Common Lisp-sproget , eller blot som en legende beskrivelse af , hvordan Lisps evalfunktion fungerer .

Tillæg om Prolog

Ethvert tilstrækkeligt komplekst Lisp -program vil sandsynligvis indeholde en langsom implementering af halvdelen af ​​Prolog -sproget .

Originaltekst  (engelsk)[ Visskjule] Ethvert tilstrækkeligt kompliceret LISP-program vil indeholde en langsom implementering af halvdelen af ​​Prolog.

Denne formulering [5] afspejler det faktum, at Prolog -programmer indeholder øer i Lisp-stil , mens Lisp-programmer indeholder  øer i Prolog -stil .

Erlang Supplement

Med udbredelsen af ​​distribueret programmering og populariseringen af ​​ideer implementeret i Erlang -sproget foreslog Robert Virding denne mulighed: [6]

Ethvert tilstrækkeligt komplekst distribueret program indeholder en nyskrevet, uspecificeret, buggy og langsom implementering af halvdelen af ​​Erlang-sproget.

Originaltekst  (engelsk)[ Visskjule] Ethvert tilstrækkeligt kompliceret samtidig program på et andet sprog indeholder en ad hoc uformelt specificeret fejlbehæftet langsom implementering af halvdelen af ​​Erlang.

Denne korrektion kaldes også Armstrong-konsekvensen.

Generalisering

Reglen varieres ofte ved at erstatte ordene "Common Lisp" med talerens foretrukne funktionelle sprog (f.eks . Scheme eller Haskell ). Det kan opsummeres, at:

Enhver tilstrækkelig kompleks platform indeholder en nyskrevet, uspecificeret, buggy og langsom implementering af et halvt funktionelt sprog.

Originaltekst  (engelsk)[ Visskjule] Enhver tilstrækkeligt kompliceret platform indeholder en ad hoc, uformelt specificeret, fejlbehæftet, langsom implementering af halvdelen af ​​et funktionelt programmeringssprog.

Noter

  1. Revenge of the Nerds Arkiveret 7. juni 2019 på Wayback Machine af Paul Graham .  (Engelsk)
  2. Philip Greenspuns forskning arkiveret 24. januar 2009 på Wayback Machine  
  3. 10. programmeringsregel Arkiveret 29. januar 2008 på Wayback Machine  
  4. Paul Graham citerer Arkiveret 12. august 2005 på Wayback Machine  
  5. comp.lang.prolog: hvorfor ikke bruge LISP-imp af Prolog i modsætning til selve Prolog?  (Engelsk)
  6. [erlang-spørgsmål] Erlang samtidighed Arkiveret 25. juli 2008 på Wayback Machine