È fattibile sviluppare (serio) web in Lisp? [chiuso]


100

Ovviamente è possibile scrivere quasi ogni tipo di applicazione in quasi tutti i linguaggi di programmazione, specialmente in uno così potente come Lisp (sia esso Scheme o Common Lisp). Ma è pratico usarlo per lo sviluppo web? In caso affermativo, quale dovrebbe essere un buon punto di partenza? Dove si possono trovare le risorse adeguate (strumenti, biblioteche, documentazione, buone pratiche, esempi, ecc.) Per un progetto di questa natura?


2
Dipende da cosa intendi per "pratico". Possibile, sì. Pratico, probabilmente non per la maggior parte. Hai intenzione di ospitare il tuo sito? Hai intenzione di utilizzare la tua casella dedicata in cui avrai il controllo di root? Quanto impegno sei disposto a dedicarci?
nucleo

Leonardo, sto mettendo insieme un libro su questo argomento ora e vorrei ricevere feedback dagli sviluppatori web interessati al Lisp. Se vuoi, puoi farmi sapere come ti è venuta l'idea di usare Lisp e cosa vorresti vedere in un libro del genere? vsedach@gmail.com
vsedach,

@chris - Recentemente ho creato Scheme hosting per alcuni dei miei progetti collaterali; è stato più facile di quanto pensassi - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

2
Vai a leggere i saggi di Paul Graham. Dubito che ci sia qualcosa che gli è sfuggito in una discussione sull'uso di LISP per le applicazioni web, inoltre è un grande scrittore. paulgraham.com/avg.html la sua home page è: paulgraham.com/index.html
Kelly S. French

Colleghi googler: ci sono risposte sempre più aggiornate nell'incredibile elenco di CL .
Ehvince

Risposte:


82

Sì, lo sviluppo web è oggi uno dei punti di forza di Common Lisp.

  • Come server web, usa Hunchentoot , precedentemente noto come tbnl, del Dr. Edmund Weitz.

    Puoi eseguirlo come back-end per Apache utilizzando mod_proxy come proxy inverso o come server autonomo.

  • Sono disponibili varie soluzioni per la generazione di HTML, dai modelli in stile PHP agli hack di macro Lisp fino a XSLT. Fai la tua scelta.

    HTML-TEMPLATE è un esempio.

  • L'XML di chiusura è disponibile per l'analisi XML, la serializzazione, XPath 1.0, XSLT 1.0. C'è anche l'HTML di chiusura per l'analisi della zuppa di tag HTML.

    (Divulgazione completa: sono il manutentore di Closure XML e Closure HTML.)

  • Se lo desideri, Parenscript può rendere la tua esperienza JavaScript più chiara, ma puoi anche scrivere tu stesso il vecchio JavaScript, ovviamente.

    Un'altra fantastica soluzione per migliorare JavaScript in jwacs , che è scritta in Common Lisp e trasforma JavaScript per aggiungere il supporto di continuazione.

  • I progetti di servizi Web potrebbero richiedere un client HTTP oltre a un server.

    Drakma è la libreria da utilizzare per questo oggi.

    PURI è utile per la manipolazione degli URI.

    E c'è di più! Un punto di partenza è cliki, ad esempio cliki.net/web .

Sul web nessuno sa che il tuo server è scritto in Common Lisp :-)


1
e questo è solo per lisp comuni e solo un set di strumenti ...
Attila Lendvai


1
@MattBall woof. yap. ululato.
non sincronizzato

Su Internet nessuno può sentire il tuo server lisp urlare.
kd4ttc

31

Lo sviluppo web in Common Lisp è sia efficace che divertente.

Qualche esempio:

CL-WHO ti consente di scrivere HTML senza dimenticare mai più un tag di chiusura.

Weblocks ti consente di definire i moduli in modo dichiarativo con la convalida incorporata:

(defview signup (:type form :caption "Sign up")
  (username :satisfies #'valid-username)
  (password :present-as dual-password :parse-as dual-password)
  (receive-newsletter-p :present-as checkbox :parse-as predicate))

Supporta anche AJAX in modo completamente automatico, tornando ai collegamenti normali se il browser non lo supporta.

cl-prevalence è un'alternativa incredibilmente semplice a SQL.

Molte persone stanno usando queste tecnologie ultimamente per applicazioni mission-critical, con successo.

I più importanti progetti open source di CL hanno infatti un eccellente supporto da parte della comunità.


19

Esistono alcuni framework web per lo sviluppo web. Dai un'occhiata a:

Se desideri strumenti lisp ben supportati, dovrai pagarli. Semplicemente non c'è una grande comunità attorno agli strumenti open source, quindi non hanno lo stesso livello di documentazione / adozione di, diciamo, Django su Python.

Ecco alcuni prodotti lisp commerciali:

Vale anche la pena notare che Reddit è stato inizialmente costruito in Lisp, ma gli autori sono successivamente migrati a Python, citando la mancanza di librerie ben utilizzate e documentate. ( collegamento )


Dice che le biblioteche erano il "problema più grande", ma subito prima ha detto che "reddit non funzionerebbe sul mio Mac"; a quel tempo, c'era solo un CL con thread per Mac, che non poteva eseguire il loro codice socket di basso livello. Sembra almeno altrettanto un rompicapo.
Ken,

3
Sono un grande fan di Lisp, sta sostituendo Python per me. Ma lavoro in C ++. Posso trovare altri programmatori Python che capiranno i prototipi Python, ma fino a quando l'attuale revival del Lisp ha più successo, non posso usarlo al lavoro senza infinite domande "perché non hai usato Python o Ruby?"
Aaron

11

Non posso parlare con altri framework, ma ho avuto molta fortuna nell'usare Hunchentoot per un server web (funziona bene da solo, oppure puoi metterlo dietro Apache ). Ciò che lo fa davvero risplendere (questo probabilmente sarà uno shock per alcuni) sono le biblioteche!

  • Usa CL-WHO per scrivere HTML senza sforzo con una sintassi in stile lisp
  • Parenscript ti permette di scrivere codice che si compila in javascript
  • Per la connettività del database usa Postmodern per parlare con PostgreSQL

Quello che mi piace davvero dell'utilizzo di CL per il Web è che puoi modificare tutto mentre è in esecuzione. Hai sempre un REPL attivo e in esecuzione sul codice del tuo server, puoi quindi connetterti a quel REPL e modificare o controllare come funziona il codice, il tutto senza dover interrompere nulla. Ho ridefinito le funzioni mentre il sito è in esecuzione, la prossima volta che viene chiamata la funzione, prende semplicemente il nuovo codice e funziona.


Sei a conoscenza di qualcosa che renderà LISP interfacciabile con MongoDB?
MadPhysicist

9

Per aiutare ulteriormente a dissipare il mito secondo cui non esistono framework web Lisp, eccone quelli che non sono stati ancora menzionati:

Ovviamente molte persone sembrano pensare che Lisp sia abbastanza buono per scrivere molti framework web.

Non utilizzo né appoggio alcun framework web. Preferisco costruire applicazioni web combinando insieme strumenti ortogonali (David Lichteblau ne ha menzionati alcuni buoni) utilizzando modelli di progettazione in un modo che sia effettivamente appropriato per l'applicazione che stai costruendo, e questo è l'approccio che raccomando. Common Lisp fornisce sia una vasta gamma di tali strumenti, sia un'impareggiabile capacità di combinarli.

Adam Petersen ha pubblicato un eccellente tutorial introduttivo su come iniziare a creare applicazioni web Lisp in questo stile l'anno scorso:

http://www.adampetersen.se/articles/lispweb.htm


8

Penso che si possa dire di sì senza troppi problemi.

  1. uno dei primi server HTTP era cl-http

  2. Lo schema che le persone intorno a DrScheme ci hanno dedicato molto tempo:

  3. www.franz.com gira sul proprio Webserver (AllegroServer) e webframework (webactions)

  4. In caso di dubbi, controllare i comuni pacchetti lisp di Edi Weitz. Di solito funzionano.

Quindi sì, si può fare una programmazione web "seria" con Common Lisp. Da parte mia sono attualmente indeciso a seguire qualche percorso Common Lisp o Ruby on Rails. Preferisco entrambi rispetto a qualsiasi cosa .NET ...


4

La società di Paul Graham, Viaweb, ha scritto un prodotto in Common Lisp che successivamente è diventato Yahoo Shops. Apparentemente Yahoo successivamente lo ha riscritto in C ++. Ci sono molte risorse web per la programmazione Lisp.


1
Se questo è vero per Yahoo, alcuni potrebbero vederlo come un fallimento di CL come linguaggio web. Ma lo vedrei come un successo di CL come linguaggio di prototipazione web.
gcbenison

3
Difficilmente considererei la riscrittura un fallimento, come ha detto lo stesso Paul Graham nelle note su Beating the Averages: "Nel gennaio 2003, Yahoo ha rilasciato una nuova versione dell'editor scritta in C ++ e Perl. È difficile dire se il programma non sia più scritto in Lisp, però, perché per tradurre questo programma in C ++ hanno dovuto letteralmente scrivere un interprete Lisp: i file sorgente di tutti i modelli che generano pagine sono ancora, per quanto ne so, codice Lisp. "
protista

viaweb non è stato prototipato in lisp comune per riscriverlo in un altro linguaggio, c ++. è inteso dai produttori di esso per essere scritto e gestito in lisp a causa di vari ovvi motivi da lui dichiarati, potenza dei linguaggi, rapidità, sì prototipazione e produzione rapida, conosceva molto bene lisp ecc. lo eseguono con la versione che loro hanno scritto in lisp, parti di esso erano effettivamente in lisp. dopo averlo acquisito l'hanno riscritto, non ne sono sicuro. è la scelta dell'acquirente, potrebbe anche essere scritto in vbasic o pascal fortran.
sçuçu

2

Puoi trovare alcune informazioni sugli strumenti per le applicazioni web Lisp in questa domanda .

Potrebbe anche valere la pena ascoltare Stack Overflow Podcast 27 in cui i ragazzi di Reddit parlano un po 'della loro esperienza di esecuzione di un sito Web su Lisp (e del loro passaggio a Python).


2

Le opinioni variano. La saggezza comune è: è meglio usare un linguaggio diverso, o meglio uno stack web diverso, come LAMP, .NET, Ruby on Rails, Java. Il noto progetto web di successo in lisp è stato ViaWeb di Paul Graham . Reddit è stato inizialmente implementato in lisp, ma poi è passato a python . Se decidi di usare lisp, prova il libro di Seibel: Practical Common Lisp .


1
C'è qualche possibilità che tu possa aggiungere un po 'più di FUD al tuo post?
Jrockway

@ Yuval ha ragione. Questa è saggezza comune. Reddit ha cambiato. Penso che il post chieda se c'è qualche verità dietro quella saggezza comune.
Steve Rowe

1
@jrockway e Steve Rowe - La saggezza comune esiste per un motivo. Non credo che questo sia FUD. Non ho più sentito parlare di un sito web di successo scritto in LISP da ViaWeb. Per favore correggimi se sbaglio. Credo che il linguaggio di programmazione dovrebbe essere usato in base ai loro meriti, piuttosto che all'ideologia.
Yuval F


0

Dai un'occhiata ad Allegro Common Lisp. Ha alcune librerie, incluso un server web, specifico per lo sviluppo web.

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.