Perché Lisp è utile? [chiuso]

62

Lisp ovviamente è un vantaggio per AI roba, ma non mi sembra che Lisp sia più veloce di Java, C #, o anche C. Non sono un maestro di Lisp, ma lo trovo incredibilmente difficile capire il vantaggio che si otterrebbe nello scrivere software aziendale in Lisp.

Tuttavia è considerato come la lingua di un hacker.

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

    
posta Peter Mortensen 24.11.2013 - 12:52
fonte

17 risposte

75

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

  1. Codice omoiconico. Ciò consente il codice di modifica automatica strutturato.
  2. Macro sensibili alla sintassi. Permettono la riscrittura del codice boilerplate.
  3. Il pragmatismo. Common Lisp è progettato per ottenere risultati da professionisti che lavorano. La maggior parte delle lingue funzionali non è, di regola.
  4. Flessibilità. Può fare molte cose diverse, tutte a velocità ragionevole.
  5. Wartiness. Il mondo reale è disordinato . La codificazione pragmatica finisce per dover usare o inventare costrutti disordinati. Common Lisp ha abbastanza wartiness da poter fare cose.

Probabilmente gli unici veri motivi per scegliere contro Common Lisp è che le librerie standard sono datate.

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

    
risposta data 06.05.2015 - 20:21
fonte
21

Mi piace il Lisp per il suo

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

La programmazione sta combattendo la complessità. Le astrazioni sono l'unico strumento efficace per combattere sempre più complessità (con la nostra dimensione del cranio molto limitata e costante). Gestire le astrazioni con Lisp è come avere un genio con n + 1 desideri.

    
risposta data 31.01.2011 - 07:13
fonte
21

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

Quindi se qualcuno dovesse porre ulteriori domande, la risposta corretta è "sì" se si tratta di una / o domanda o "Non sei pronto."

    
risposta data 07.05.2015 - 19:57
fonte
17

Penso che il vantaggio di Lisp nel campo intelligenza artificiale (AI) che tutti citano sia in qualche modo un incidente storico. .. Lisp ha iniziato per / in AI, 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 piacciono di Lisp è che per me combina Python e C in uno. Posso iniziare a programmare senza dichiarazioni e prototipi immediatamente e molto rapidamente (il runtime e il REPL sono molto importante per questo). Dopo aver eseguito qualcosa, aggiungo dichiarazioni di tipo e "ottimizzo" il mio codice, a poco a poco. È stupefacente premere un tasto SLIME e osservare il linguaggio macchina generato per la funzione a cui sono interessato. Python, non ci sono dichiarazioni di tipo, quindi non posso ottenere più velocità, ma in C, ottenere rapidamente tutto è molto più doloroso. Lisp è molto utile in questo caso.

Detto questo, mi piace principalmente il Lisp a causa dei macro . Quando capisci finalmente cosa possono ottenere i macro, penso che tu possa sopportare facilmente le parentesi. Inoltre, editor come Emacs gestiscono le parentesi da sé in modo da non doverlo fare. Ammetto, tuttavia, che all'inizio non ho trovato le parentesi così male, e so che alcune persone non riescono a sopportarle. Ma poiché l'intero scopo delle macro è generare codice in fase di compilazione, il codice in Lisp utilizza una struttura dati standard e le parentesi sono semplicemente una rappresentazione del codice come elenchi, necessario per rendere le macro semplici da scrivere.

Non conosco nessun altro linguaggio in cui puoi scrivere piccoli sottolinguaggi per descrivere meglio il tuo problema con la facilità di Lisp. Questo è il vantaggio di cui parla Paul Graham in battere le medie . È estrema modularità e concisione. In Java devo scrivere molto testo non elaborato per esprimere una singola idea. In Lisp potrei scrivere alcune macro che generano quel codice automaticamente, e poi usarle. 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 linguaggio migliore solo per questa ragione. Cerco sempre le macro nelle lingue tradizionali per vedere se corrispondono alla potenza delle macro Lisp, ma fino ad oggi non ne ho trovate nessuna. Forth è un secondo vicino.

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

  1. Il software aziendale ha bisogno di librerie e di 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 incompleti che alcune persone usano. Dovrei contribuire a risolvere questo problema, immagino ...

  2. Il software aziendale è generalmente costituito da grandi gruppi di persone e penso che la comunicazione possa essere ostacolata dalle macro, poiché in pratica cambiano il linguaggio. Molti programmatori sono più a loro agio nel rilevare determinati pattern nel codice, anche se il testo del programma è più lungo e ripetitivo. Suppongo che all'ITA abbiano delle regole per quanto riguarda i macro o che abbiano un'enorme libreria di macro che semplifica la collaborazione (o, più semplicemente, tutti i programmatori sono esperti Lisp).

risposta data 07.05.2015 - 20:11
fonte
12

Non mi piace Lisp.

(Mi piacciono molti dei concetti che usa, come rendono disponibili tecniche potenti in modo nativo e così via.

Ma non sono mai stato convinto di usarlo effettivamente, ((anche se diverse persone ho provato ) perché i benefici del linguaggio possono essere raggiunti con altri linguaggi di programmazione (alcuni direttamente, altri indirettamente), quindi non c'è abbastanza beneficio per farmi passare il tempo ad imparare e sopportando l'orribile sintassi.)))

Ma sì, per ragioni che a qualcuno piace, controlla queste domande sull'overflow dello stack:

Probabilmente ce ne sono ancora di più nelle domande correlate per questi.

    
risposta data 23.05.2017 - 14:40
fonte
9

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

Che 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 a scrivere un programma funzionante o a correggere un bug nel sistema software di grandi dimensioni? Quasi certamente.

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

    
risposta data 07.05.2015 - 19:56
fonte
7

Mi piace Lisp perché è un mezzo eccellente per esprimere i miei pensieri. Il predicato per la mia lingua preferita è "Se potessi scegliere qualsiasi cosa per esprimere idee, quale sarebbe?". Attualmente è Lisp * ( Schema specifico), al punto che mi ritrovo a scrivere note di programmazione dentro. Come IRL , note su carta e penna. Anche quando penso ai programmi devo implementarli in PHP o Ruby o Python.

Questo non è un trucco che ho insegnato a me stesso, o qualcosa che faccio per credibilità da nerd (nessuno riesce a vedere l'interno del mio taccuino in ogni caso); è solo che il Lisp è molto più naturale per me in cui pensare oltre a qualsiasi altra alternativa e qualsiasi linguaggio che risuoni con te e che profondamente è quello che fai tesoro.

* Anche se una nota a piè di pagina, Haskell sta riducendo il divario abbastanza rapidamente mentre imparo di più esso.

    
risposta data 07.05.2015 - 20:06
fonte
6

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

"We were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp."

-- Guy Steele, Java spec co-author

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

    
risposta data 13.01.2011 - 23:52
fonte
6

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

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

Lisp ha fondamentalmente tutti i vantaggi dei linguaggi dinamici, e penso che per la maggior parte delle applicazioni web di oggi, Python e Ruby sono piuttosto fantastici, e hanno il vantaggio di framework e documentazione e comunità vivaci.

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

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

    
risposta data 06.05.2015 - 21:57
fonte
6

Ho avuto una reazione istintiva a Schema in passato, ma ora sono pronto per dare a Lisp ( Clojure , in realtà) un colpo.

Vedete, nel corso degli anni ho acquisito bit di linguaggi come Java, C #, C ++, Python e le cose non sono più impegnative.

Clojure ha molte promesse, sembra essere molto pulito e può risolvere molti problemi del mondo reale. Un caso strong 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 era l'unica lingua che molti dei laureati del MIT avevano appreso. Per essere onesti, tuttavia, è possibile eseguire l'hot-swap degli algoritmi Lisp su un sistema di produzione in esecuzione, il che è un vantaggio enorme.

    
risposta data 07.05.2015 - 19:57
fonte
6

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

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

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

    
risposta data 07.05.2015 - 20:15
fonte
5

"Più veloce" non è una cosa semplice da misurare, dipende in realtà dall'aspetto del benchmarking. A seconda dell'attività e dell'implementazione di Lisp, le velocità possono avvicinarsi a C. Guarda il Great Benchmarking Shoot-Out per immergerti per 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 è la ragione principale per scegliere un linguaggio di programmazione: se lo fosse, programmeremmo tutti in linguaggio assembly ancora, giusto? Per me, la gioia quotidiana di Lisp è che il codice è compilato, ma non devo rimuovere l'applicazione, ricompilare tutto e quindi iniziare a girare da zero. Invece, posso cambiare una singola funzione e quel cambiamento avrà effetto ovunque, e posso immediatamente vedere l'effetto nella mia applicazione. Inoltre, l'approccio molto veloce "scrivi, prova, scrivi di più, verifica di più" rende molto più facile testare immediatamente in primo piano durante la scrittura del codice (e poi puoi trasformare quelle sonde interattive in test unitari più avanti).

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

    
risposta data 07.05.2015 - 19:52
fonte
5

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

Il motivo numero uno: Lisp mi fa pensare in modo diverso, il che mi rende un coder Ruby migliore.

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

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

C'è una struttura web molto bella e leggera per newLisp chiamata dragonfly . Questo mi permette di usare un nuovo codice Lisp al posto di PHP per alcune attività. Non mi piace molto PHP, e newLisp sembra più divertente per questo compito specifico di Ruby.

Motivo numero tre: Lisp è sintatticamente e concettualmente coerente.

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

    
risposta data 07.05.2015 - 20:12
fonte
4

Puoi dire "Lealtà alla marca"?

Ho iniziato in Fortran. L'ho adorato.

Sono passato a Lisp. All'inizio lo odiavo. Poi ho imparato ad amarlo, e odio Fortran.

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

Suppongo di essere volubile?

    
risposta data 04.10.2010 - 17:57
fonte
4

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

Penso che le cover di The Eternal Flame esso.

    
risposta data 07.05.2015 - 20:17
fonte
2

Un grande progetto è la community. Lisp ha avuto un sorteggio per gli sviluppatori più ambiziosi e brillanti da quando è stata inventata la lingua. Ovunque i ricercatori stiano cercando di risolvere problemi che non sono mai stati risolti, probabilmente troverai Lisp, come in intelligenza artificiale (AI) ricerca, computer vision, pianificazione, rappresentazione di knowlege e ottimizzazione euristica complessa. Il linguaggio si presta a risolvere i problemi sia dal basso verso l'alto che allo stesso tempo, il che sembra aiutare a far fronte alle sfide più difficili.

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

Il sistema OOP, CLOS , è in una classe a parte in termini di flessibilità. È molto difficile tornare al rudimentale C ++ / Java / C # OOP dopo aver assaggiato. GoF 5 modelli di progettazione non sono necessari in quanto possono essere espressi semplicemente e direttamente.

La lingua non ha avuto un singolo proprietario aziendale e nessuna singola implementazione definitiva, sebbene abbia uno standard ANSI con molti implementazioni conformi. Importanti nuove implementazioni arrivano ogni decennio e quelle vecchie sono ancora piuttosto attive. Gli esperti possono pianificare di utilizzare le loro conoscenze specialistiche per un lungo periodo a venire. Ciò causa alcuni attriti anarchici e frammentazione della comunità, ma significa anche che il tappeto non può essere tirato fuori e che la lingua non può diventare moribonda per ragioni aziendali o di progetto. Ci sono sempre più implementazioni commerciali e open source su cui si sta lavorando. I più incentrati sulla performance sono regolarmente confrontati con un fattore 2x delle implementazioni linguistiche imperative molto più veloci e pesantemente finanziate.

Il tallone d'Achille della prima commercializzazione di Lisp era l'impronta della memoria per soddisfare sia le caratteristiche di sicurezza del linguaggio e gli ambienti di sviluppo software avanzati che includevano, con caratteristiche incredibili come la documentazione online completa inclusa la grafica. Una Symbolics Lisp Machine di 64 MB non era redditizia rispetto a una workstation Sun da 8 MB. Oggi, i prezzi della RAM sono crollati e c'è un enorme interesse nei linguaggi Lisp, soprattutto considerando che i linguaggi tradizionali di Java, C # e PHP oggi sono avanzati solo in minima parte rispetto a quelli di 30 anni fa.

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

    
risposta data 07.05.2015 - 20:32
fonte
1

In realtà non faccio Lisp. Ma il posto in cui lavoro è elementi finiti con milioni di righe principalmente di Fortran. Il ragazzo qui che ho più rispetto per l'informatica (codici computational fluid mechanics ) pensa che la combinazione ideale sia il Lisp all'esterno ( principalmente perché si evitano problemi disordinati con la gestione della memoria) e Fortran per gli algoritmi di basso livello (Fortran è la soluzione migliore per sfruttare le funzionalità vettoriali di SSE / AVX e pensiamo che sia improbabile che questo contatto venga chiuso).

    
risposta data 07.05.2015 - 20:21
fonte

Leggi altre domande sui tag