Utilizzeresti un dialetto LISP per un programma di produzione?
Assolutamente
Che tipo di programma e perché?
Lisp è un linguaggio dinamico generico. Oggi presenta le stesse difficoltà di base di altri linguaggi dinamici di uso generale che non sono pubblicati da Microsoft: thread nativi, integrazione della GUI, funzionamento deterministico del GC e ingombri di memoria ridotti.
I thread nativi sono raggiunti da LispWorks e SBCL, credo. Forse altri? Non ho studiato a fondo.
LispWorks e Franz Common Lisp - prodotti commerciali - si integrano nella GUI con successo. Non avendo i $$ per comprarli, non so quanto funzioni bene. Sospetto che funzionino abbastanza bene ...
Un'operazione GC deterministico può essere fatto (si fa in Java per un certo livello di successo), ma io non so se i sistemi esistenti Lisp (quelli mantenuti) hanno alcun codice per farlo.
L'ingombro di memoria ridotto credo sia ottenuto da alcuni Lisps.
Il mio punto di base è che Common Lisp è tecnicamente pronto per realizzare sistemi di produzione. E lo fa .
La stragrande maggioranza degli sviluppatori viene sconvolta da (scegli una) lingue dinamiche, macro, parentesi, mancanza dell'IDE preferito, brutta esperienza al college, non molti lavori in esso, e quindi non lo usano.
Personalmente salterei a costruire un sistema di produzione a tutti gli effetti in Common Lisp da zero in un ambiente di squadra.
modifica: non ho davvero risposto al motivo per cui Lisp al contrario di altre lingue.
Nella mia esperienza con Lisp - non significativa, ma considerevolmente più di "ciao mondo" - ho trovato la lingua estremamente utilizzabile dopo i primi dolori del "nuovo linguaggio di Argh". La maggior parte della lingua si adatta in modo molto regolare e abbastanza ovvio che non trovo altre lingue in cui operare. Parte di questo è la fusione di espressioni e dichiarazioni. Parte di questo è il tipo di dati dell'elenco principale. Parte di questo è il sistema di tipi. Parte di questo è il sistema macro. Non fraintendetemi, tuttavia, ci sono punti dolenti. Ma non mi prendono a calci in faccia tanto quanto i punti dolenti di altre lingue.
Un esempio semplicistico è la routine di lunghezza dell'elenco di Python. L'approccio Python è chiamare len(mysequence)
. Ma, se ci pensiamo, una lunghezza è una proprietà di una sequenza. Quindi, mysequence.len()
è un'idea più appropriata. Lisp essenzialmente rimuove quella distinzione sintattica. (length thing)
è sia la sintassi della chiamata di funzione sia la sintassi del metodo. Certo, alcune persone lo trovano frustrante e vogliono la differenza sintattica. Preferirei avere la regolarità.
edit2: ho convertito la parte della mia tesi di laurea MS che gira sul desktop in Common Lisp ed è stato un piacere lavorare finora.