Cosa c'è di così bello in Lisp? [chiuso]


103

Non conosco abbastanza Lisp per dire se è buono o cattivo. Sembra che tutti coloro che hanno usato Lisp lo adorino, eppure le lingue più popolari in questi giorni discendono dal C.

Allora, cos'è Lisp che è così eccezionale e perché non viene utilizzato di più? C'è qualcosa di semplicemente brutto in Lisp (oltre alla quantità incessante di parentesi)?


5
"La maggior parte delle lingue popolari in questi giorni discendono dal C" solo superficialmente. Se guardi le caratteristiche invece del solo uso delle parentesi graffe, scoprirai che i linguaggi moderni non sono così lontani dal Lisp e si avvicinano sempre. Un programma in C # o Python o Ruby, diciamo, assomiglierà molto di più a Lisp di quanto a C.
Ken

11
Un buon esempio di un linguaggio che assomiglia a C ma si comporta più come Lisp è JavaScript. Gran parte del suo design è simile a Scheme.
JAL

Buon punto, Ken: un numero crescente di funzionalità che erano uniche per Lisp (funzioni di prima classe, funzioni come dati, persino macro) stanno arrivando in altri linguaggi. E il feedback non è unidirezionale: Lisp sta sviluppando nuove tecniche e idiomi in riconoscimento di altri linguaggi (ad esempio CLOS in risposta al successo del paradigma orientato agli oggetti).
itowlson

6
Lisp ha preso idee da ogni parte, ma CLOS in risposta a cosa? CLOS (1986-1987) era in gran parte una standardizzazione dei primi sistemi di oggetti per Lisp, ad esempio Lisp Machine Lisp (1980) includeva Flavours. Non credo che "il successo del paradigma OO" fosse ancora evidente nel 1980: "C with Classes" aveva solo un anno (e mancavano ancora 3 anni per essere ribattezzato "C ++"), e non lo so che Simula-67 è stato sempre molto popolare. Lisp ha un sacco di altre funzionalità avanzate che oggi i linguaggi popolari non hanno; OO sembra aver avuto successo, ma Lisp non l'ha ottenuto perché (o quando) era popolare.
Ken

Non credo che tutti quelli che hanno usato Lisp lo adorino. La mia esperienza è diversa. Prova a chiedere agli studenti di informatica che hanno iniziato con Scheme. Probabilmente circa il 10% lo adorerà, il 30% lo rispetterà e il 60% lo odierà. Inoltre, non credo che le lingue più popolari discendano da C.
Rainer Joswig

Risposte:


59

Lisp è il Chuck Norris dei linguaggi di programmazione.

Lisp è il bar su cui si misurano le altre lingue.

Conoscere Lisp dimostra l'illuminazione degli sviluppatori.

Ho sentito parlare di 3 punti deboli (e dei loro contro-argomenti):

  1. Digitazione dinamica.

    C'è un argomento per i linguaggi tipizzati staticamente là fuori che ruota intorno al fornire al compilatore informazioni sufficienti per rilevare una certa classe di errori in modo che non si verifichino in fase di esecuzione. Ma devi ancora testare.

    Questo articolo sostiene la digitazione dinamica insieme a ulteriori test: Strong Typing vs. Strong Testing .

  2. Difficile da raccogliere.

    In realtà ci sono due parti in questo: apprendimento e strumenti.

    Lisp richiede un po 'di impegno per "ottenere" davvero, ma ne vale la pena, perché imparare il Lisp ti renderà davvero un programmatore migliore in altre lingue. Ad esempio, una volta che hai veramente "ottenuto" chiusure, capirai le classi interne di Java. E una volta che "ottieni" funzioni di prima classe, sarai depresso ogni volta che usi una lingua senza di esse.

    Ho letto The Little Schemer e sto leggendo Practical Common Lisp , che sono entrambi eccellenti.

    Poi ci sono gli strumenti. Sono su un Mac, quindi mi sono concentrato su Aquamacs Emacs (rende Emacs vivibile per un principiante) e Steel Bank Common Lisp (SBCL).

  3. Mancanza di biblioteche.

    Non posso ancora dirlo con certezza, ma ne dubito. Per la creazione di siti web sembra che Hunchentoot ed Elephant forniscano un buon set di strumenti. Ma davvero non vedo Lispers lamentarsi della mancanza di librerie (forse perché Lisp è così potente che semplicemente non sono necessari?).


4
Per affrontare (3) - Hai guardato Clojure?
viksit

5
"Ma davvero non vedo Lispers lamentarsi della mancanza di librerie (forse perché Lisp è così potente che semplicemente non sono necessari?)." Correggerei l'ultima affermazione in "(forse perché Lisp è così potente che non sono necessari PER LORO?)" Questo fa un'enorme differenza.
Agnius Vasiliauskas

49
Non dice niente sul perché lisp sia fantastico, voto negativo da parte mia.
Kilon

30
Downvoted perché "X è fantastico! X è fantastico! X è come Y, che è fantastico anche perché dico che è fantastico!" non è una risposta a "Perché X è considerato eccezionale?". Anche il riferimento politico è inappropriato e inutile (la maggior parte delle persone non pensa nemmeno che il libertarismo sia una buona idea). I tre punti sono utili, ma vorrei che non fossero "Ha una debolezza A ... Ma in realtà non è nemmeno una debolezza!".
Superbest

1
Lisp è il Chuck Norris dei linguaggi di programmazione. quindi questo è ciò che lo rende così buono. Fatto. Downvoted.
NiCk Newman

71

"Lisp è un linguaggio di programmazione programmabile."
- John Foderaro, CACM, settembre 1991

Ecco la mia opinione:

In superficie, Lisp è un bel linguaggio di programmazione funzionale semplice. Non c'è quasi sintassi e tutti i pezzi si adattano in modo logico.

Se scavi un po 'più a fondo, leggi SICP e scrivi un valutatore metacircolare, scopri due cose: uno, l'intero interprete (date solo poche primitive) è appena una pagina di codice e due, la relazione tra codice e dati consente eleganti tecniche di programmazione.

Una volta che hai completamente assorbito questo, sembra che altre lingue siano scolpite nella pietra quando ti permettono solo di dire poche cose. Lisp può creare qualsiasi astrazione se puoi definirne la sintassi e la semantica.


1
In teoria potresti incorporare qualsiasi linguaggio in Lisp come Rust, Ruby, C, Java, Python, Erlang. Quindi la versione s-expression di Python (Hy) e quella di Rust si chiama (Risp) [anche se non so quanto siano stabili]. Se scrivi codice in Hy invece di Python hai la capacità di macro e modifiche strutturali come parinfer / paredit ( shaunlebron.github.io/parinfer ). Le macro consentono di incorporare i propri DSL in Lisp e possono anche essere utilizzate per trasformare il codice lento in codice veloce tramite le macro del compilatore. Puoi anche trasformare il codice Python (Hy) in Rust (Risp), trasformando l'albero sexp.
aoeu256

Ho anche sentito questo dire più volte. Ti eleggeresti un po 'di più @ aoeu256?
Studente

66

Lisp è buono perché ha una sintassi molto minimale, semplice e regolare.

Lisp è pessimo perché ha una sintassi molto minimale, semplice e regolare.


4
Cosa c'è di male in una sintassi minimale, semplice e regolare?
oskarkv

27
@oskarkv - una sintassi minimale totalmente regolare significa che non c'è pregiudizio verso un uso particolare. Questo suona bene, finché non si incontra il principio di Pareto: è più efficiente essere prevenuti verso i casi più comuni e smettere di fingere che tutti i casi siano ugualmente probabili. Se il 20% dei tuoi clienti è a New York e l'80% a Los Angeles, ha senso sedersi sul recinto, da qualche parte al confine tra Kansas e Oklahoma, in modo da rimanere "imparziali" in termini geografici? O ha più senso andare dove si trova la maggior parte dei clienti? Preferiamo lingue che distorcono le loro caratteristiche verso probabili problemi.
Daniel Earwicker

4
La sintassi Lisp è davvero buona. Ho imparato Haskell dopo Clojure, ma a quel punto anche la sintassi di Haskell sembrava un ostacolo. L'uniformità della tassa solare di Lisp è ottima. Quindi, non so esattamente di quale pregiudizio stai parlando. Bias verso l'inflessibilità? Suona male.
oskarkv

3
Suona male quando lo metti così. Non l'ho messa così! Che ne dici di pregiudizi verso gli eventi più comuni, le situazioni più probabili? Questi sono (ovviamente) termini relativi, quindi dipende da cosa stai facendo. Se davvero ti mancano le informazioni su ciò che farai, non ha senso cercare di prepararti. Ma probabilmente non è vero: hai delle informazioni e quindi puoi prepararti ("pregiudizi") alle situazioni più probabili per le quali devi essere pronto.
Daniel Earwicker

22

"Qualsiasi programma C o Fortran sufficientemente complicato contiene un'implementazione lenta ad hoc, specificata in modo informale, piena di bug e di metà di Common Lisp."

Decima regola di Greenspun




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.