web-dev-qa-db-fra.com

Est-il possible de faire du développement web (sérieux) en Lisp?

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? Si oui, quel devrait être un bon point de départ? Où trouver les ressources appropriées (outils, bibliothèques, documentation, bonnes pratiques, exemples, etc.) pour un projet de cette nature?

96
Leonardo

Oui, le développement web est aujourd'hui l'un des points forts de Common LISP.

  • En tant que serveur Web, utilisez Hunchentoot , anciennement connu sous le nom de tbnl, par le Dr Edmund Weitz.

    Vous pouvez l'exécuter en tant que back-end pour 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 est un exemple.

  • Closure XML est disponible pour l'analyse XML, la sérialisation, XPath 1.0, XSLT 1.0. Il existe également Closure HTML pour l'analyse de la soupe 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 claire, mais vous pouvez aussi écrire vous-même du JavaScript ancien, bien sûr.

    Une autre solution d'amélioration de JavaScript intéressante 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 le cliki, par exemple cliki.net/web .

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

81
David Lichteblau

Le développement Web dans 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 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.

Beaucoup de gens utilisent ces technologies récemment pour des applications stratégiques - avec succès.

En fait, la plupart des projets open source CL ont un excellent soutien communautaire.

30
Leslie P. Polzer

Il existe des cadres 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, ils n'ont donc pas le même niveau de documentation/adoption que, par exemple, Django sur Python.

Voici quelques produits LISP commerciaux:

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

19
d4nt

Pour aider à dissiper davantage le mythe selon lequel il n'y a pas de framework 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 beaucoup de frameworks web.

Je n'utilise ni n'approuve aucun cadre Web. Je préfère créer des applications Web en combinant ensemble des outils orthogonaux (David Lichteblau en a mentionné de 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. LISP commun offre à la fois une richesse de ces outils et une capacité inégalée de les combiner.

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

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

9
vsedach

Je ne peux pas parler avec 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 mettez-le derrière Apache =). Ce qui fait vraiment briller (cela va sûrement choquer 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é à 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 qu'il fonctionne. Vous avez toujours un REPL en place et exécutez votre code serveur, vous pouvez ensuite vous connecter à ce REPL et changer ou inspecter le fonctionnement du code, le tout sans avoir pour arrêter quoi que ce soit. 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 prend simplement le nouveau code et fonctionne.

9
Chris

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

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

  2. Les gens autour du schéma DrScheme y ont passé un temps remarquable:

  3. www.franz.com fonctionne sur leur propre serveur Web (AllegroServer) et webframework (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. Pour ma part, je ne suis actuellement pas décidé à suivre une route LISP commune ou Ruby on Rails. Je préfère les deux à tout .NET ....

8
Friedrich

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

4

On dirait beaucoup d'Orbitz était ou est écrit en LISP .

2
mqp

Vous pouvez trouver des informations sur l'outillage des applications Web LISP dans cette question .

Il pourrait également être utile d'écouter Stack Overflow Podcast 27 où les gars de Reddit parlent un peu de leur expérience de la gestion d'un site Web sur LISP (et de leur passage à Python).

2
Dave Webb

Les opinions varient. La sagesse courante est la suivante: il vaut mieux utiliser un langage différent, ou plutôt une pile Web différente, telle que LAMP, .NET, Ruby on Rails, Java. Le célèbre projet Web réussi dans LISP était ViaWeb . Reddit de Paul Graham a été initialement implémenté dans LISP, mais ensuite passé en python . Si vous décidez d'utiliser LISP, essayez le livre de Seibel: LISP commun pratique .

2
Yuval F

Jetez un œil au LISP Allegro Common. Il possède certaines bibliothèques, dont un serveur Web, spécialement pour le développement Web.

0
Ian Jack