Perché è utile Lisp? [chiuso]


64

Lisp ovviamente è un vantaggio per l' intelligenza artificiale , ma non mi sembra che Lisp sia più veloce di Java, C # o persino C. Non sono un maestro di Lisp, ma trovo incredibilmente difficile capire il vantaggio si potrebbe scrivere software aziendale in Lisp.

Tuttavia è considerato come un linguaggio da hacker.

Perché Paul Graham sostiene Lisp? Perché ITA Software ha scelto Lisp rispetto ad altre lingue di alto livello? Che valore ha su queste lingue?


20
La linea "Non penso che Lisp sia più veloce di Java, C # o in effetti più veloce di C" è alquanto confusa. C è generalmente considerato lo standard per "codice veloce perché stai programmando vicino al metal" - è il punto di riferimento da battere praticamente per tutto. Ora, Java e altri linguaggi GC possono batterlo in alcuni contesti, ad esempio la velocità di allocazione / pulizia della memoria. Ma questa frase sembra comunque un po 'arretrata.
Michael H.

2
Lisp è un linguaggio di livello superiore rispetto a quelli che hai citato, quindi è generalmente più lento.
segfault

5
@ Bo Tian: "linguaggio di livello superiore" ha bisogno di una definizione inequivocabile. Anche se ne avesse uno, questo suona come un non-sequitur. (grazie @Mark)
Mike Dunlavey,

5
@BoTian "livello superiore" non equivale a "più lento" per impostazione predefinita.

24
Lisp esiste per mostrare quanto sia stato sbagliato ogni altro designer di lingue.

Risposte:


78

Ci sono alcuni motivi per cui sto lavorando per diventare competente con Common Lisp.

  1. Codice omoiconico. Ciò consente un codice strutturato di auto-modifica.
  2. Macro consapevoli della sintassi. Consentono la riscrittura del codice del boilerplate.
  3. Pragmatismo. Common Lisp è progettato per eseguire attività lavorative da professionisti. La maggior parte dei linguaggi funzionali non lo sono, di regola.
  4. Flessibilità. Può fare molte cose diverse, tutte a velocità ragionevoli.
  5. Wartiness. Il mondo reale è disordinato . La codifica pragmatica finisce per dover usare o inventare costrutti disordinati. Il Lisp comune ha sufficiente verrucosità da poter fare cose.

Probabilmente le uniche vere ragioni per scegliere contro Common Lisp è che le librerie standard sono datate.

Esco da un arto e dirò che, nel caso generale, la sintassi non dovrebbe essere un problema per un professionista del software.


8
La sintassi può essere un problema se influisce in modo significativo sulla leggibilità o sulla scrivibilità. Non credo sia il caso di Lisp. Un buon editor o IDE può fare in modo che l'evidenziazione della sintassi e la corrispondenza dei paren siano abbastanza buone da non essere un grosso problema.
Matt Olenik,

4
Inoltre, ho usato Lisp solo un po '(Common Lisp), e la sensazione generale che ho avuto è che il n. 2 è stato il più grande vantaggio per Lisp. Forse sto pensando nel paradigma sbagliato, ma non credo di aver mai avuto una situazione in cui il codice di auto-modifica fosse necessario. Se hai un motivo specifico per usarlo, allora sì, ma per il resto le macro sembrano la vera caratteristica killer. Modifica: ho appena realizzato che in realtà sono la stessa caratteristica.
Matt Olenik,

3
@Matt: Sì. FWIW, di recente mi sono imbattuto in Nemerle, un linguaggio sperimentale CLR C # -ish con macro. nemerle.org . Vale la pena frugare a un certo punto, penso solo per l'esperienza.
Paul Nathan,

2
"Pragmatismo. CL è progettato per svolgere attività lavorative da parte di professionisti. La maggior parte dei linguaggi funzionali non è, di regola.": Non sono d'accordo con questa affermazione. Sono molto interessato a Lisp e sto cercando di dedicare del tempo per impararlo. Ma trovo che anche altri linguaggi FP siano molto efficaci per "fare le cose", almeno questa è stata la mia esperienza con Scala e Haskell fino ad ora.
Giorgio,

1
"CL è progettato per svolgere attività lavorative da parte di professionisti. La maggior parte dei linguaggi funzionali non lo sono, di regola". Soprattutto nella seconda parte della frase. Puoi fare qualche esempio?
Giorgio,

23

Mi piace Lisp per questo

  • modo unificato, semplice ed elegante di rappresentare sia il codice che i dati.
  • punto di vista unico, che mi dà gli 80 punti bonus QI cruciali per risolvere problemi difficili (con la punta del cappello ad Alan Kay)
  • ambiente di sviluppo estremamente agile, interattivo e conversazionale
  • potere senza precedenti di creare e manipolare le astrazioni

La programmazione sta combattendo la complessità. Le astrazioni sono l'unico strumento efficace per combattere la complessità sempre crescente (con le nostre dimensioni del cranio molto limitate e costanti). Gestire le astrazioni con Lisp è come avere un genio con n + 1 desideri.


5
+1 per "La programmazione sta combattendo la complessità. Le astrazioni sono l'unico strumento efficace per combattere la complessità sempre crescente (con la nostra dimensione del cranio molto limitata e costante)." (Vorrei poter dare un +10.)
Giorgio,

Che cos'è "un ambiente di sviluppo estremamente agile, interattivo e conversazionale"?
Qed

6
Non dovrebbero essere i (+ 1 n)desideri, o ancor più una migliore praticità saggia (incf n)?
Reb.Cabin

21

Credo che la risposta Lisp corretta sia più gnomica. Qualcosa del tipo: "Se devi chiedere, non sei pronto."

Quindi se qualcuno pone ulteriori domande, la risposta corretta è "sì" se è una / o domanda o "Non sei pronto".


5
Paul Graham cita Louis Armstrong: "Se devi chiedere cos'è il jazz, non lo saprai mai."
Jason Baker,

25
+1. Anche se a volte frasi come "Se devi chiedere, non sei pronto", mi fanno pensare che chi lo dice semplicemente non può spiegare
superM

5
@superM I linguaggi funzionali simili a Lisp e Lisp hanno la proprietà che una volta appresi, non è più possibile spiegarli!
esoterik,

18

Penso che il vantaggio di Lisp nel campo dell'intelligenza artificiale (AI) che tutti menzionano sia in qualche modo un incidente storico ... Lisp ha iniziato per / nell'intelligenza artificiale, ma è un linguaggio generico.

Credo che la velocità di esecuzione non sia l'unico aspetto importante di una lingua (l'ho fatto una volta, però). Tuttavia, uno degli aspetti che mi piace di Lisp è che per me combina Python e C in uno. Posso iniziare a programmare senza dichiarazioni e prototipo immediatamente e molto rapidamente (il runtime e il REPL sono molto importanti per questo). Dopo aver eseguito qualcosa, aggiungo dichiarazioni di tipo e "ottimizzo" il mio codice, a poco a poco. È una meraviglia premere un tasto in SLIME e guardare il linguaggio macchina generato per la funzione che mi interessa. In Python non ci sono dichiarazioni di tipo, quindi non posso ottenere più velocità, ma in C, fare qualcosa velocemente è molto più doloroso. Lisp è molto utile in questo caso.

Detto questo, mi piace Lisp principalmente a causa delle macro . Quando finalmente capisci cosa possono ottenere le macro, penso che puoi sopportare facilmente le parentesi. Inoltre, editor come Emacs gestiscono le parentesi da soli, quindi non è necessario. Ammetto, tuttavia, che all'inizio non ho trovato le parentesi così brutte e so che alcune persone non le sopportano. Ma poiché lo scopo delle macro è generare codice al momento della compilazione, il codice in Lisp utilizza una struttura di dati standard e le parentesi sono semplicemente una rappresentazione del codice come elenchi, che è necessario per rendere le macro semplici da scrivere.

Non conosco nessun'altra lingua in cui puoi scrivere piccole lingue per descrivere meglio il tuo problema con la facilità di Lisp. Questo è il vantaggio di cui parla Paul Graham in Beating the Averages . È estrema modularità e concisione. In Java devo scrivere molto testo non elaborato per esprimere un'unica idea. In Lisp ho potuto scrivere alcune macro che generano quel codice automaticamente, e successivamente basta usare quelle. Ad ogni modo, devi capire alcuni esempi di questo e poi giudicare da solo. Quando l'ho "visto", sono rimasto senza parole, e continuo a pensare che Lisp sia il miglior linguaggio solo per questo motivo. Cerco sempre macro nei linguaggi tradizionali per vedere se corrispondono alla potenza delle macro Lisp, ma ad oggi non ne ho trovate. Forth è un secondo vicino.

Concluderò con un paio di critiche, in relazione al software aziendale:

  1. Il software aziendale ha bisogno di librerie e buone, e Lisp non è bravo in questo. Di solito non ho bisogno di loro, ma quando lo faccio, devo scegliere da una piccola selezione di software incompleto che alcune persone usano. Dovrei contribuire a risolvere questo problema, immagino ...

  2. Il software aziendale è in genere creato da grandi gruppi di persone e penso che la comunicazione possa essere impedita con le macro, poiché sostanzialmente cambiano la lingua. Molti programmatori sono più a loro agio nel rilevare determinati schemi nel codice, anche se il testo del programma è più lungo e ripetitivo. Suppongo che in ITA abbiano alcune regole per quanto riguarda le macro o abbiano un'enorme libreria di macro che semplifica la collaborazione (o, più semplicemente, tutti i programmatori sono esperti di Lisp).


7
Prova il clojure, è un tocco sulla JVM. Quindi, usando la JVM puoi usare tutte le cose di Java.
Zaccaria K,

@zachary: ci sono almeno 2 implementazioni Common Lisp sulla JVM. ABCL è relativamente maturo.
Larry Coleman,

Clojure è compatibile al 100% con Java (almeno non ho mai trovato nulla in Java che Clojure non possa migliorare e in modo tale che i Javaisti non possano lamentarsi). Clojure è fortemente influenzato dal meglio del Common Lisp e dal meglio del FP. Con quello e SBCL e CLisp ed Emacs, ogni Lisper dovrebbe sentirsi come un re al giorno d'oggi.
Reb.Cabin

13

Non mi piace Lisp.

(Mi piacciono molti dei concetti che utilizza, il modo in cui rende disponibili potenti tecniche nativamente e così via.

Ma non sono mai stato convinto di usarlo effettivamente ((anche se molte persone hanno provato ) perché i benefici del linguaggio possono essere raggiunti con altri linguaggi di programmazione (alcuni direttamente, altri indirettamente), quindi non ci sono abbastanza benefici per farmi passare il tempo a impararlo e a sopportare l'orribile sintassi.)))

Ma sì, per motivi che piacciono ad alcune persone, controlla queste domande Stack Overflow:

Probabilmente ce ne sono alcune nelle domande correlate anche per quelle.


26
"Sopportare l'orribile sintassi". Forse è troppo lungo da quando ero un principiante di Lisp, ma la semplicità e la regolarità della sintassi di Lisp è una caratteristica enorme, poiché è ciò che mi rende possibile estendere Lisp in sé. Posso aggiungere iteratori personalizzati, posso aggiungere nuovi costrutti di ambito "with-xxx" che si ripuliscono automaticamente dopo se stessi in modo che lo sviluppatore non debba, ecc. La sintassi è una funzionalità, non un bug.
Michael H.

5
La capacità di estendere una lingua con se stessa non richiede una sintassi limitata a mezza dozzina di caratteri. Inoltre: "La sintassi è una funzione, non un bug" ? - Lo so. Non l'ho chiamato un bug.
Peter Boughton,

8
Ok, come si ottengono i vantaggi del sistema macro? Quante lingue ti consentono di costruirne un'estensione orientata agli oggetti in un capitolo abbastanza breve (Paul Graham, "On Lisp").
David Thornley,

6
La sintassi non è più orribile di altre lingue. Ho scoperto che le parentesi "scompaiono" visivamente dopo un po '. Con un buon rientro, il codice è facilmente leggibile.
Barry Brown,

8
Ma avere la possibilità di spostarsi facilmente tra S-exps sembra enorme ... Quindi, in tema di parentesi, mi piace la seguente citazione: Parentesi? Quali parentesi? Non ho notato alcuna parentesi dal mio primo mese di programmazione Lisp. Mi piace chiedere alle persone che si lamentano delle parentesi a Lisp se sono disturbate da tutti gli spazi tra le parole di un giornale "- Ken Tilton
Cedric Martin,

9

Interpreterò "Lisp" come " Common Lisp "; Non ho dubbi che altre risposte diranno " Schema ". (Suggerimento: Lisp è una famiglia di lingue.)

Cosa significa "più veloce"? In termini di tempo impiegato per eseguire un benchmark, no, non è più veloce di C ( ma può essere ).

"Veloce" in termini di quanto tempo impiega Joe Random Hacker per scrivere un programma funzionante o correggere un bug in un sistema software di grandi dimensioni? Quasi certamente.

Per quanto riguarda questo hacker, lo uso perché voglio scrivere codice, non boilerplate. Voglio scrivere qualcosa una volta e non ripetermi continuamente. E voglio interagire con il programma mentre lo scrivo.


Non sarebbe fantastico se potessi scrivere una piccola funzione nel tuo editor che farebbe immediatamente qualcosa per il resto del tuo codice? O puoi già farlo?
Segna C

4
@Mark: penso che stai descrivendo Emacs.
Ferruccio,

@Ferruccio Pensavo che dovessi prima eseguire il tuo codice.
Segna C

2
@Mark C: Beh, devi evidenziare la regione e poi M-x eval-region(o eval-buffer), ma questo è tutto.
Frank Shearar,

1
@MarkC: Inoltre, se siete in scratch di buffer, si può solo scrivere la vostra funzione e premere il tasto C-j(che è moralmente equivalente ad entrare) e avranno effetto immediato.
Tikhon Jelvis,

7

Mi piace Lisp perché è un mezzo eccellente per esprimere i miei pensieri. Il predicato della mia lingua preferita è "Se potessi scegliere qualcosa per esprimere idee, quale sarebbe?". Attualmente è Lisp * ( schema per essere specifico), al punto che mi ritrovo a scrivere delle note di programmazione in esso. Come IRL , note di carta e penna. Anche quando sto pensando a programmi che devo implementare in PHP o Ruby o Python.

Questo non è un trucco che ho insegnato a me stesso, o qualcosa che faccio per la credibilità dei nerd (nessuno riesce comunque a vedere l'interno del mio notebook); è solo che Lisp è molto più naturale per me in cui pensare rispetto a qualsiasi altra alternativa, e qualsiasi linguaggio che risuoni con te che sia profondamente uno di cui fai tesoro.

* Proprio come una nota a piè di pagina, Haskell sta colmando il divario abbastanza rapidamente mentre ne apprendo di più.


6

Il problema è il potere. Potenza = Lavoro (funzionalità del programma) / Tempo

"Non eravamo pronti a conquistare i programmatori Lisp; stavamo inseguendo i programmatori C ++. Siamo riusciti a trascinarne molti a metà strada verso Lisp."

- Guy Steele, coautore delle specifiche Java

Traccia una sorta di curva tra C ++ e Java. Continua, e ad un certo punto lungo la linea troverai Lisp.


2
Il problema qui è che perdi molte funzionalità C ++ andando su Java, ma riprendilo (spesso in forma migliorata) quando vai su Lisp.
David Thornley,

@DavidT La domanda SO su quella citazione esatta ha un collegamento alla fonte (cerca "cita"). La citazione non dovrebbe essere presa così sul serio.
Marco C

@ David: come le macro. Non è solo che li hanno lasciati fuori andando a Java (e quindi in C #) ma hanno reso la loro mancanza una "virtù". Le macro sono davvero utili se sto costruendo un DSL in cima alla lingua di base.
Mike Dunlavey,

@Mike Dunlavey: non mi piacciono molto le macro in C ++ (diamine, non mi piacciono in C, ma non ho molta scelta). Mi piacciono molto le macro in Common Lisp. Sai, penso che il mio problema con quel commento sia che mi piacciono sia il C ++ che il Common Lisp molto più di quanto mi piaccia Java.
David Thornley,

@ David: Sono con te al 100% sulle macro in Lisp. In C / C ++ sono brutti e incline ad abusi, ma per il tipo di ( frangia è vero ) cose che faccio, sono quindi molto meglio di niente. Certo, quando lo faccio in C ++ può benissimo essere considerato un abuso, ma in Lisp è considerato calorosamente intelligente. Vai a capire.
Mike Dunlavey,

6

Paul Graham risponde a questa domanda lui stesso in What Made Lisp Different .

Tieni presente che l'ha usato per la sua startup a metà degli anni '90, quindi Python e Ruby non erano davvero maturi a quel punto (o forse non erano nemmeno nati).

In sostanza, Lisp ha tutti i vantaggi dei linguaggi dinamici e penso che per la maggior parte delle applicazioni web odierne, Python e Ruby siano piuttosto fantastici e hanno il vantaggio di framework, documentazione e community vibranti.

La caratteristica killer è probabilmente che l'intero programma è fatto di espressioni. Ciò significa che è possibile passare da blocchi di codice a funzioni (o macro ...), perché un blocco di codice non è altro che un'espressione.

Python non ha esattamente questa funzione; dovresti definire le funzioni e passarle in giro. Ruby sembra avere dei blocchi, forse è un po 'limitato rispetto a quello che Lisp può fare (non ne sono sicuro).


L'articolo di Paul Graham è interessante perché, a parte un paio di voci, la maggior parte delle lingue in questi giorni sembra avere le caratteristiche che elenca. Quindi forse Lisp era più irresistibile a quei tempi; al giorno d'oggi è più prezioso il linguaggio che ha introdotto quelle funzionalità?
Andres F.

AST come sintassi del linguaggio è ancora dominio di Lisp. Non sono a conoscenza del linguaggio non lisp in cui le macro hanno l'intera lingua disponibile, durante il tempo di compilazione (Sì, il compilatore in pratica passa la chiamata macro alla definizione macro che è il programma Lisp da solo. Volete fare http e db in macro al momento della compilazione ?)
przemo_li il

6

Ho avuto una reazione istintiva a Scheme in passato, ma ora sono pronto a dare una possibilità a Lisp ( Clojure , in realtà).

Vedete, nel corso degli anni ho imparato alcune lingue come Java, C #, C ++, Python e le cose non sono più difficili.

Clojure ha molte promesse, sembra essere molto pulito e può risolvere molti problemi del mondo reale. Un caso forte per un linguaggio pulito come Clojure è l'avvento dei computer multi-core.

Yay LISP!

EDIT: ITA Software è stato fondato dai laureati del MIT e Scheme / Lisp è stata l'unica lingua che molti dei laureati del MIT hanno appreso. Per essere onesti, si possono scambiare a caldo algoritmi Lisp su un sistema di produzione in esecuzione, il che è un grande vantaggio.


8
Ri: Le cose non sono più difficili --- prova Haskell e facci sapere cosa ne pensi. Inoltre, puoi sempre provare ad imparare un po 'di INTERCAL per cambiare!
Segna C

3
@Mark C, scusa ma non mi tocco INTERCAL. La sfida non è l'unico criterio; deve essere in grado di risolvere rapidamente anche problemi reali. Almeno Haskell è usato e amato da molti.
Giobbe

Era per scherzo, ovviamente.
Marco C

1
L'aggiornamento del codice in esecuzione (con attenzione!) Su un server di produzione è una delle gioie di Lisp, sì. Python, almeno quando ci giocavo, non ha fatto bene; dovresti ricompilare manualmente tutte le funzioni / i metodi che fanno riferimento alle tue modifiche, mentre tutte le implementazioni di Common Lisp lo gestiscono per te. Uso lo stesso potere per lo sviluppo: scrivere, testare qualcosa, modificare, testare - nessun ciclo di compilazione, e puoi fare i tuoi test interattivi e trasformarli in test unitari se lo desideri.
Michael H.

@Job ho dimenticato ... PLEASE?
Segna C

6

La cosa che mi piace di Lisp è che trascende i paradigmi. Alcune persone diranno che Lisp è funzionale, altri diranno che è dichiarativo, e altri diranno che è multiparadigma. Penso che a tutti questi manchi il punto. Quando usi Lisp, il paradigma non è più un vincolo.

Vuoi oggetti? Puoi averli. Vuoi una programmazione funzionale? Puoi averlo. Vuoi una programmazione logica in stile Prolog ? Scrivi alcune macro. Desideri una programmazione dichiarativa in stile SQL? Fallo. Vuoi usare un paradigma che non è stato ancora inventato? Sono fiducioso che si possa fare in Lisp.

A parte le lingue simili a Forth , devo ancora vedere un'altra lingua offrire questo livello di flessibilità.


+1 Programmazione multi-paradigma, decenni prima di F #, ottimo punto.
Orbling

Vorrei poter votare questo dieci volte. Non c'è cucchiaio ... non c'è paradigma ... Descrive con grande precisione il mio feeling con Common Lisp :)
MadPhysicist,

5

"Più veloce" non è una cosa semplice da misurare, dipende davvero da quale aspetto stai confrontando. A seconda dell'attività e dell'implementazione di Lisp, la velocità può avvicinarsi a C. Guarda il Great Benchmarking Shoot-Out per approfondire i dettagli. L'implementazione SBCL di Lisp è alla pari con Java 6 Server ed è significativamente più veloce di Ruby o Python.

Ma la pura velocità non è il motivo principale per scegliere un linguaggio di programmazione - se lo fosse, tutti programmeremmo ancora in linguaggio assembly , giusto? Per me, la gioia quotidiana di Lisp è che il codice viene compilato, ma non devo smontare l'applicazione, ricompilare tutto e quindi iniziare a correre da zero. Invece, posso cambiare una singola funzione e tale modifica avrà effetto ovunque, e vedrò immediatamente l'effetto nella mia applicazione. Inoltre, quell'approccio molto veloce di "scrittura, test, scrittura di più, test di più" rende molto più semplice testare immediatamente durante la scrittura del codice (e quindi è possibile trasformare quelle sonde interattive in unit test in seguito).

Immagina di scrivere e-mail dove dopo ogni riga, devi premere un pulsante per compilare l'output della tua e-mail sullo schermo prima di continuare a pensare. Questo è ciò che è per me scrivere in Java o in un'altra lingua simile. A volte c'è un motivo per farlo, e Java mi piace, ma Lisp è solo più reattivo ed è più facile svolgere il lavoro.


Se stavo iniziando fresco oggi, probabilmente sceglierei Ruby - ha ereditato gran parte della natura di Lisp, ma ha librerie più moderne e un singolo dittatore benevolo che lo fa avanzare. Ma questa non era la domanda che l'OP ha posto.
Michael H.

In realtà ho scelto ruby ​​per iniziare, e ora sto cercando di imparare newLisp.
Philosodad,

5

Sto imparando Lisp ( newLisp ) per un paio di ragioni.

Motivo numero uno: Lisp mi fa pensare diversamente, il che mi rende un programmatore di Ruby migliore.

Sembra molto imbarazzante fare le cose in certi modi in Lisp, ad esempio l'iterazione annidata per passare attraverso più liste. Quindi mi costringe a usare altre cose, come map. La mia lingua preferita, Ruby, ha lo stesso metodo cartografico, ma non lo uso sempre, perché non mi è familiare: ho imparato a fare le cose usando una tecnica scadente e quando la lingua supporta quella tecnica, continuo a usarla.

Motivo numero due: Lisp è pratico e ha buone librerie moderne.

C'è un framework web molto bello e leggero per newLisp chiamato libellula . Questo mi consente di utilizzare il codice newLisp anziché PHP per alcune attività. PHP non mi piace molto e newLisp sembra più divertente per questo compito specifico rispetto a Ruby.

Motivo numero tre: Lisp è sintatticamente e concettualmente coerente.

Per me, questa è la grande differenza tra Ruby e Python, la coerenza.


+1: "Lisp è sintatticamente e concettualmente coerente." Questa è una caratteristica molto importante di una lingua. Alcune lingue mal progettate mancano di coerenza, sono come una grande raccolta di idiomi messi insieme in un certo ordine (ho in mente una lingua, ma non la chiamerò :-)). Sotto questo aspetto, Lisp è molto coerente. Non appena avrò del tempo, proverò sicuramente ad impararlo.
Giorgio,

4

Puoi dire "Brand Loyalty"?

Ho iniziato a Fortran. Lo amavo.

Sono passato a Lisp. All'inizio l'ho odiato. Poi ho imparato ad amarlo e odio Fortran.

Più tardi Pascal, C, C ++, vari assemblatori, C #. (In realtà non amo C #.)

Immagino di essere volubile?


4

Quando è stato creato Lisp, sono partiti dalla matematica, non dall'informatica (che in realtà non esisteva ancora). E il team di Lisp ha ottenuto alcune cose DAVVERO giuste. Lisp ebbe la raccolta dei rifiuti nel 1960 o giù di lì! Hanno fatto davvero un ottimo lavoro.

Penso che la canzone The Eternal Flame lo copra.


Sì, a quanto pare Lisp è stato il primo linguaggio GCed.
Marco C,

2

Un grande pareggio è la comunità. Lisp ha attirato l'attenzione degli sviluppatori più ambiziosi e brillanti da quando il linguaggio è stato inventato. Ovunque i ricercatori stiano cercando di risolvere problemi che non sono mai stati risolti, è probabile che tu possa trovare Lisp, come nella ricerca dell'intelligenza artificiale (AI), nella visione al computer, nella pianificazione, nella rappresentazione della conoscenza e nella complessa ottimizzazione euristica. Il linguaggio si presta a risolvere i problemi sia dal basso verso l'alto che dall'alto verso il basso allo stesso tempo, il che sembra aiutare ad affrontare le sfide più pelose.

La sintassi estensibile tramite macro significa che raramente è necessario estendere la definizione della lingua. Gran parte di ciò che richiederebbe un'estensione della lingua in una lingua più limitata è solo una macro di distanza con Lisp. Quindi i programmatori Lisp sono liberi di usare i concetti linguistici appena inventati senza un nuovo standard linguistico e senza necessariamente una vera penalità di velocità. A livello base, risme del codice del boilerplate sono rese superflue da piccole estensioni. Intere nuove idee nel flusso di controllo, come l'unificazione in stile Prolog, vengono implementate in modo efficiente e compatto come estensioni.

Il sistema OOP, CLOS , è unico nel suo genere in termini di flessibilità. È molto difficile tornare al rudimentale C ++ / Java / C # OOP dopo averne avuto un assaggio. I  modelli di progettazione GoF 5 diventano superflui in quanto possono essere espressi in modo semplice e diretto.

Il linguaggio non ha un singolo proprietario aziendale e nessuna singola implementazione definitiva, sebbene abbia uno standard ANSI con molte implementazioni conformi. Nuove importanti implementazioni arrivano ogni decennio e quelle vecchie sono ancora abbastanza attive. Gli esperti possono pianificare di utilizzare le loro conoscenze specializzate per molto tempo a venire. Ciò provoca un certo attrito anarchico e frammentazione della comunità, ma significa anche che il tappeto non può essere estratto e il linguaggio non può diventare moribondo per motivi politici aziendali o di progetto. Ci sono sempre più implementazioni commerciali e open source su cui si sta lavorando. Quelli più incentrati sulle prestazioni fanno regolarmente riferimento a un fattore 2 rispetto alle implementazioni del linguaggio imperativo molto più veloci e fortemente finanziate.

Il tallone d'Achille della prima commercializzazione di Lisp era impronta di memoria per adattarsi sia alle caratteristiche di sicurezza del tipo della lingua sia agli ambienti di sviluppo software avanzati che includevano, con caratteristiche incredibili come la documentazione online completa, compresa la grafica. Una macchina Lisp Symbolics da 64 MB non era economicamente vantaggiosa rispetto a una workstation Sun da 8 MB. Oggi, i prezzi della RAM sono crollati e c'è un grande interesse per le lingue Lisp, specialmente considerando che le lingue Java, C # e PHP tradizionali oggi sono avanzate solo minimamente rispetto a quelle di 30 anni fa.

Ci sono linguaggi moderni ora in competizione con Lisp per la condivisione mentale con sviluppatori intelligenti: Python, Lua , Erlang , Haskell e OCaml . Ma nessuno offre lo stesso mix di maturità, adattabilità, molteplici implementazioni conformi agli standard e velocità.


1

In realtà non faccio Lisp. Ma il posto in cui lavoro fa elementi finiti con milioni di linee principalmente di Fortran. Il ragazzo qui che io rispetto di più delle cose informatiche (codifica la meccanica dei fluidi computazionali ) pensa che la combinazione ideale sia Lisp all'esterno (principalmente perché eviti problemi disordinati con la gestione della memoria) e Fortran per gli algoritmi di basso livello (Fortran è il migliore per sfruttare le capacità vettoriali di SSE / AVX e riteniamo che questo lead non si chiuda).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.