Est-il possible de faire du développement Web (sérieux) en Lisp? [fermé]

100

Il est évidemment possible d'écrire presque n'importe quel type d'application dans presque n'importe quel langage de programmation, en particulier dans un langage aussi puissant que Lisp (que ce soit Scheme ou Common Lisp). Mais est-il pratique de l'utiliser pour le développement Web? Dans l'affirmative, quel devrait être un bon point de départ? Où trouver les ressources adéquates (outils, bibliothèques, documentation, bonnes pratiques, exemples, etc.) pour un projet de cette nature?

Léonard
la source
2
Cela dépend de ce que vous entendez par «pratique». Possible, oui. Pratique, probablement pas pour la plupart. Avez-vous l'intention d'héberger votre site? Allez-vous utiliser votre propre box dédiée où vous aurez le contrôle root? Quels efforts êtes-vous prêt à y consacrer?
core
Leonardo, je suis en train de préparer un livre sur ce sujet et j'aimerais avoir les commentaires des développeurs Web intéressés par Lisp. Si vous le souhaitez, pouvez-vous s'il vous plaît me faire savoir comment vous êtes venu à l'idée d'utiliser Lisp, et ce que vous aimeriez voir dans un tel livre? [email protected]
vsedach
@chris - J'ai récemment mis en place un hébergement Scheme pour certains de mes projets parallèles; c'était plus facile que je ne le pensais - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison
2
Allez lire les essais de Paul Graham. Je doute qu'il ait manqué quelque chose dans une discussion sur l'utilisation de LISP pour les applications Web, en plus c'est un grand écrivain. paulgraham.com/avg.html sa page d'accueil est: paulgraham.com/index.html
Kelly
Chers collègues: il y a de plus en plus de réponses à jour sur la liste impressionnante de CL .
Ehvince

Réponses:

82

Oui, le développement web est aujourd'hui l'une des forces de Common Lisp.

  • En tant que serveur Web, utilisez Hunchentoot , anciennement appelé tbnl, par le Dr Edmund Weitz.

    Vous pouvez l'exécuter en tant que back-end d'Apache en utilisant mod_proxy en tant que proxy inverse ou en tant que serveur autonome.

  • Diverses solutions de génération HTML sont disponibles, des modèles de style PHP aux hacks de macro Lisp en passant par XSLT. Faites votre choix.

    HTML-TEMPLATE en est un exemple.

  • Closure XML est disponible pour l'analyse XML, la sérialisation, XPath 1.0, XSLT 1.0. Il existe également un code HTML de fermeture pour l'analyse des soupes de balises HTML.

    (Divulgation complète: je suis le mainteneur de Closure XML et Closure HTML.)

  • Si vous le souhaitez, Parenscript peut rendre votre expérience JavaScript plus légère, mais vous pouvez également écrire vous-même du JavaScript ancien, bien sûr.

    Une autre solution intéressante d'amélioration de JavaScript dans jwacs , qui est écrite en Common Lisp et transforme JavaScript pour ajouter un support de continuation.

  • Les projets de service Web peuvent nécessiter un client HTTP en plus d'un serveur.

    Drakma est la bibliothèque à utiliser pour cela aujourd'hui.

    PURI est utile pour la manipulation d'URI.

    Et il y a plus! Un point de départ est cliki, par exemple cliki.net/web .

Sur le web, personne ne sait que votre serveur est écrit en Common Lisp :-)

David Lichteblau
la source
1
et ce n'est que pour le lisp commun et un seul ensemble d'outils ...
Attila Lendvai
1
@MattBall woof. japper. hurler.
non synchronisé le
Sur Internet, personne ne peut entendre votre serveur lisp crier.
kd4ttc
31

Le développement Web en Common Lisp est à la fois efficace et amusant.

Quelques exemples:

CL-WHO vous permet d'écrire du HTML sans jamais oublier une balise de fermeture.

Weblocks vous permet de définir des formulaires de manière déclarative avec une validation intégrée:

(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))

Il prend également en charge AJAX de manière entièrement automatique, revenant aux liens normaux si le navigateur ne le prend pas en charge.

cl-prevalence est une alternative incroyablement simple à SQL.

Un grand nombre de personnes utilisent ces technologies ces derniers temps pour des applications critiques - avec succès.

Les projets open source CL les plus importants bénéficient en fait d'un excellent support communautaire.

Leslie P. Polzer
la source
19

Il existe quelques frameworks Web pour le développement Web. Jettes un coup d'oeil à:

Si vous voulez des outils lisp bien pris en charge, vous devrez les payer. Il n'y a tout simplement pas une très grande communauté autour des outils open source, donc ils n'ont pas le même niveau de documentation / adoption que, par exemple, Django sur Python.

Voici quelques produits commerciaux Lisp:

Il convient également de noter que Reddit a été initialement construit en Lisp, mais les auteurs ont ensuite migré vers Python, citant un manque de bibliothèques bien utilisées et documentées. ( lien )

d4nt
la source
Il dit que les bibliothèques étaient le "plus gros problème", mais juste avant cela, il a dit que "reddit ne fonctionnerait pas sur mon Mac"; à l'époque, il n'y avait qu'un seul CL threadé pour Mac, qui ne pouvait pas exécuter leur code de socket de bas niveau. Cela ressemble au moins autant à un dealbreaker.
Ken
3
Je suis un grand fan de Lisp, il remplace Python pour moi. Mais je travaille en C ++. Je peux trouver d'autres programmeurs Python qui comprendront les prototypes Python, mais tant que la renaissance actuelle de Lisp n'aura pas plus de succès, je ne pourrai pas l'utiliser au travail sans des questions interminables "pourquoi n'avez-vous pas utilisé Python ou Ruby?"
Aaron
11

Je ne peux pas parler d'autres frameworks, mais j'ai eu beaucoup de chance en utilisant Hunchentoot pour un serveur Web (cela fonctionne bien tout seul, ou vous pouvez le mettre derrière Apache ). Ce qui le fait vraiment briller (ce sera probablement un choc pour certains), ce sont les bibliothèques!

  • Utilisez CL-WHO pour écrire du HTML sans effort dans une syntaxe de style lisp
  • Parenscript vous permet d'écrire du code qui se compile en javascript
  • Pour la connectivité de la base de données, utilisez Postmodern pour parler à PostgreSQL

Ce que j'aime vraiment dans l'utilisation de CL pour le Web, c'est que vous pouvez tout modifier pendant son exécution. Vous avez toujours un REPL opérationnel et en cours d'exécution sur le code de votre serveur, vous pouvez ensuite vous connecter à ce REPL et modifier ou inspecter le fonctionnement du code, le tout sans rien arrêter. J'ai redéfini les fonctions pendant que le site est en cours d'exécution, la prochaine fois que la fonction est appelée, elle récupère simplement le nouveau code et fonctionne.

Chris
la source
Êtes-vous au courant de quelque chose qui rendra LISP interfacable avec MongoDB?
MadPhysicist
9

Pour aider davantage à dissiper le mythe selon lequel il n'y a pas de frameworks Web Lisp, voici ceux qui n'ont pas encore été mentionnés:

De toute évidence, beaucoup de gens semblent penser que Lisp est assez bon pour écrire de nombreux frameworks Web.

Je n'utilise ni n'approuve aucun framework Web. Je préfère créer des applications Web en combinant des outils orthogonaux (David Lichteblau a mentionné quelques bons) en utilisant des modèles de conception d'une manière qui est réellement appropriée à l'application que vous construisez, et c'est l'approche que je recommande. Common Lisp fournit à la fois une richesse de ces outils et une capacité inégalée à les combiner.

Adam Petersen a publié un excellent tutoriel d'introduction sur la façon de commencer à créer des applications Web Lisp dans ce style l'année dernière:

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

vsedach
la source
8

Je pense qu'on peut dire oui sans trop de bruit.

  1. l'un des premiers serveurs HTTP était cl-http

  2. Les gens du programme autour de DrScheme y ont passé un temps considérable:

  3. www.franz.com fonctionne sur son propre serveur Web (AllegroServer) et son propre cadre Web (webactions)

  4. En cas de doute, consultez les packages lisp courants d'Edi Weitz. Ils fonctionnent généralement.

Alors oui, on peut faire de la programmation web "sérieuse" avec Common Lisp. Je suis pour ma part indécis pour l'instant de suivre une certaine route Common Lisp ou Ruby on Rails. Je préfère les deux à tout .NET ....

Friedrich
la source
4

La société Viaweb de Paul Graham a écrit un produit en Common Lisp qui est ensuite devenu Yahoo Shops. Apparemment, Yahoo l'a réécrit par la suite en C ++. Il existe de nombreuses ressources Web pour la programmation Lisp.

ConcernedOfTunbridgeWells
la source
1
Si c'est vrai pour Yahoo, certains pourraient y voir un échec de CL en tant que langage Web. Mais je verrais cela comme un succès de CL en tant que langage de prototypage Web.
gcbenison
3
Je ne considérerais pas la réécriture comme un échec, comme Paul Graham l'a dit lui-même dans les notes sur Beating the Averages: «En janvier 2003, Yahoo a publié une nouvelle version de l'éditeur écrite en C ++ et Perl. Il est difficile de dire si le programme est non plus écrit en Lisp, cependant, parce que pour traduire ce programme en C ++, ils ont littéralement dû écrire un interpréteur Lisp: les fichiers source de tous les modèles de génération de pages sont toujours, pour autant que je sache, du code Lisp. "
protiste
viaweb n'a pas été prototypé en lisp commun pour réécrire dans un autre langage, c ++. il est destiné par les producteurs de celui-ci à être écrit et exécuté en lisp pour diverses raisons évidentes énoncées par lui, puissance des langages, rapide, oui prototypage, et production rapide, il connaissait très bien lisp etc. ils le font tourner avec la version qu'ils ont écrit en lisp, certaines parties étaient en fait en lisp. après l'avoir acquis, ils l'ont réécrit selon la rumeur, je ne suis pas sûr. c'est le choix de l'acquéreur, il pourrait même passer en vbasic, ou pascal fortran.
sçuçu
2

Vous pouvez trouver des informations sur les outils pour les applications Web Lisp dans cette question .

Cela pourrait également valoir la peine d'écouter Stack Overflow Podcast 27 où les gars de Reddit parlent un peu de leur expérience de l'exécution d'un site Web sur Lisp (et de leur passage à Python).

Dave Webb
la source
2

Les opinions varient. La sagesse commune est la suivante: mieux vaut utiliser un autre langage, ou plutôt une pile Web différente, comme LAMP, .NET, Ruby on Rails, Java. Le projet Web réussi bien connu dans lisp était ViaWeb de Paul Graham . Reddit a été initialement implémenté dans lisp, mais est ensuite passé à python . Si vous décidez d'utiliser lisp, essayez le livre de Seibel: Practical Common Lisp .

Yuval F
la source
1
Avez-vous une chance d'ajouter un peu plus de FUD à votre message?
jrockway
@Yuval a raison. C'est la sagesse commune. Reddit a changé. Je pense que le message demande s'il y a une vérité derrière cette sagesse commune.
Steve Rowe
1
@jrockway et Steve Rowe - La sagesse commune existe pour une raison. Je ne pense pas que ce soit FUD. Je n'ai pas entendu parler d'un site Web réussi écrit en LISP depuis ViaWeb. Veuillez me corriger si je me trompe. Je pense que le langage de programmation devrait être utilisé en fonction de ses mérites, plutôt que de son idéologie.
Yuval F
0

Jetez un œil à Allegro Common Lisp. Il a quelques bibliothèques, y compris un serveur Web, spécifiquement pour le développement Web.


la source