A zecea regulă a lui Greenspan

A zecea regulă a lui Greenspun este un  aforism de programare care spune: [1] [2]

Orice program C sau Fortran suficient de complex conține o implementare nou scrisă, nespecificată, greșită și lentă a jumătate din limbajul Common Lisp .

Text original  (engleză)[ arataascunde] Orice program C sau Fortran suficient de complicat conține o implementare lentă ad-hoc, specificată informal, plină de erori, a jumătate din Common Lisp.

Origine

Regula a fost formulată în jurul anului 1993 de Philip Greenspan . Deși este cunoscut drept „al zecelea”, nu există reguli care îl precedă. Greenspan însuși a explicat numele după cum urmează: [3]

Încercam doar să dau regulii un nume captivant.

Text original  (engleză)[ arataascunde] Încercam doar să dau regulii un nume memorabil.

Înțeles

Ideea regulii este că programatorii, limitați la limbaje de nivel scăzut precum C , depășesc limitările limbajului introducând în textul programelor analogi ale proprietăților inerente limbajelor mai expresive precum Lisp .

Clarificarea lui Morris

Ulterior, hackerul Robert Morris a elaborat: [4]

… inclusiv Common Lisp în sine .

Text original  (engleză)[ arataascunde] ...inclusiv Common Lisp.

Clarificarea poate fi văzută ca un comentariu asupra dificultății de a crea o implementare eficientă a limbajului Common Lisp , sau pur și simplu ca o descriere jucăușă a modului în care funcționează funcția de eval a lui Lisp .

Supliment despre Prolog

Orice program Lisp suficient de complex va conține probabil o implementare lentă a jumătate din limbajul Prolog .

Text original  (engleză)[ arataascunde] Orice program LISP suficient de complicat va conține o implementare lentă a jumătate din Prolog.

Această formulare [5] reflectă faptul că programele Prolog conțin insule în stil Lisp , în timp ce programele Lisp conțin  insule în stil Prolog .

Suplimentul Erlang

Odată cu răspândirea programării distribuite și popularizarea ideilor implementate în limbajul Erlang , Robert Virding a propus această opțiune: [6]

Orice program distribuit suficient de complex conține o implementare nou scrisă, nespecificată, greșită și lentă a jumătate din limbajul Erlang.

Text original  (engleză)[ arataascunde] Orice program concurent suficient de complicat într-o altă limbă conține o implementare lentă ad-hoc, specificată informal, plină de erori, a jumătate din Erlang.

Această corecție mai este numită și consecința Armstrong.

Generalizare

Regula este adesea variată prin înlocuirea cuvintelor „Common Lisp” cu limbajul funcțional preferat al vorbitorului (de exemplu Scheme sau Haskell ). Se poate rezuma ca:

Orice platformă suficient de complexă conține o implementare nou scrisă, nespecificată, greșită și lentă a unei jumătăți de limbaj funcțional.

Text original  (engleză)[ arataascunde] Orice platformă suficient de complicată conține o implementare ad-hoc, specificată informal, plină de erori și lentă a jumătate dintr-un limbaj de programare funcțional.

Note

  1. Revenge of the Nerds Arhivat 7 iunie 2019 la Wayback Machine , de Paul Graham .  (Engleză)
  2. Philip Greenspun's Research Arhivat 24 ianuarie 2009 la Wayback Machine  
  3. ↑ A 10-a regulă de programare Arhivată la 29 ianuarie 2008 la Wayback Machine  
  4. Paul Graham citează Arhivat 12 august 2005 la Wayback Machine  
  5. comp.lang.prolog: de ce să nu folosiți LISP-imp al Prolog spre deosebire de Prolog în sine?  (Engleză)
  6. [erlang-questions] Erlang concurrency Arhivat 25 iulie 2008 la Wayback Machine