Comment puis-je faire de la programmation Web avec Lisp ou Scheme?

J’écris généralement des applications web en PHP, Ruby ou Perl. Je commence l’étude de Scheme et je veux essayer un projet web avec cette langue. Mais je ne peux pas trouver le meilleur environnement pour cela.

Je recherche les fonctionnalités suivantes:

  • Un moyen simple d’obtenir les parameters de la requête (quelque chose comme: get-get #key, get-post #key, get-cookie #key).
  • Mysql access.
  • Générateurs de formulaires HTML, traitement, validateurs, etc.
  • Des aides pour filtrer les données d’entrée des utilisateurs (quelque chose comme des entités HTML, des variables d’échappement pour les requêtes de mise en place, etc.).
  • SOIE.
  • Et compatible GNU / Linux.

Donc, merci d’avance pour toutes les réponses.

La raquette a tout ce dont vous avez besoin. Voir le didacticiel du serveur Web Racket, puis la documentation . Le serveur Web existe depuis un certain temps et dispose de nombreuses fonctionnalités. La seule chose qui ne soit pas incluse est probablement une interface mysql, mais qui existe sous forme de paquet sur PLaneT (outil de dissortingbution de paquets Racket).

UPDATE: Racket est maintenant fourni avec la prise en charge de la firebase database, fonctionne avec plusieurs bases de données, y compris mysql.

Vous voudrez peut-être jeter un oeil à Clojure :

Clojure est un langage de programmation dynamic qui cible la machine virtuelle Java. […] Clojure fournit un access facile aux frameworks Java, avec des indications de type et des inférences de type facultatives, pour garantir que les appels à Java puissent éviter la reflection.

Clojure est un dialecte de Lisp et partage avec Lisp la philosophie code-as-data et un puissant macro-système.

L’interopérabilité avec Java est simple dans Clojure, vous pouvez donc réutiliser les bibliothèques Java existantes selon vos besoins. Je suis sûr qu’il y en a beaucoup qui sont utiles pour le développement web.

clojure-consortingb a une API SQL, et il y a aussi ClojureQL , qui devrait couvrir vos besoins d’access à la firebase database.

Il existe un framework web pour Clojure appelé Compojure en cours de développement. Il y en a peut-être d’autres aussi.

La source de Clojure est disponible sur github sous EPL . Le faire fonctionner sous Linux est facile. Je viens de cloner les git repos et de lancer ant .

Vous pouvez faire du développement web avec un schéma de gestion . Sa bibliothèque standard inclut le module (sxml simple) qui est très utile pour la génération, la manipulation et l’parsing HTML. La bibliothèque guile-www ajoute le support pour http, cgi, etc. La bibliothèque guile-dbi donne access à MySQL et à d’autres bases de données. Avec ces blocs de construction, vous pouvez tout mettre en œuvre, des simples scripts CGI aux applications Web avec leur propre serveur HTTP.

Essayez Weblocks, un framework web Common Lisp:

http://weblocks.viridian-project.de/

J’ai écrit un tutoriel / ebook assez complet sur le sujet: http://lispwebtales.ppenev.com/

Résumé rapide:

  • Il utilise Common Lisp
  • Il utilise le framework Restas
  • Il contient des exemples de développement Web de base, notamment l’access à la firebase database, l’authentification, la génération de HTML et la création de modèles.
  • Puisque la documentation de Restas est à peu près obsolète, mon tutoriel est le plus proche des documents à jour.
  • Affiche quelques-unes des fonctionnalités les plus avancées, comme les règles, qui vous permettent d’écrire des interfaces enfichables. Vous pouvez, par exemple, écrire une couche de stockage de données et écrire facilement des back-end pour différents mécanismes de stockage. écrire des composants réutilisables, comme des frameworks d’authentification et des choses comme ça.
  • Il couvre des choses comme l’installation de lisp, la configuration du système de construction ASDF et du gestionnaire de paquets quicklisp, etc.
  • C’est gratuit en ligne, et dès que je le finis, il sera également gratuit sur leanpub. La source est sur https://github.com/pvlpenev/lispwebtales sous une licence CC, le code source est MIT. Tout n’est pas encore publié et je suis en train de le réviser.

Si vous êtes intéressé par Common Lisp pour être exact et que vous ne voulez pas passer par la route weblocks, je vous recommande la configuration suivante:

  1. Utiliser SBCL sous Linux mais avec plusieurs threads
  2. Utilisez Hunchentoot comme serveur Web qui vous fournira tout le traitement serveur requirejs, y compris les sessions et les cookies.
  3. Utilisez ClSql pour communiquer avec MySQL, il a une documentation suffisante et est très stable.
  4. Pour la génération HTMl, vous pouvez utiliser le Dr Edi Weitz Cl-WHO (très bien documenté).

Notez que tous les éléments ci-dessus sont sous licence GPL ou similaire (une licence plus efficace pour les programmes lisp)

Gambit Scheme a également sa propre solution pour les applications Web. Il utilise le framework Spork , basé sur le système de module Black Hole (tous deux de Per Eckerdal).

Andrew Whaley a un premier tutoriel sur comment faire fonctionner une application Web sous Apache avec Gambit, Black Hole et Spork en utilisant mod_proxy. Vous voudrez peut-être y jeter un coup d’oeil.

Sur une note (éventuellement) liée, Gambit comstackra également vos données en C puis sur un exécutable, si vous le souhaitez.

Paul Graham (et ses amis) a fait un dialecte lisp spécifiquement pour écrire des applications Web de base. Cela s’appelle Arc, et vous pouvez l’obtenir sur arclanguage.org .

Il ne convient probablement pas aux très grands sites Web complexes et je ne suis pas certain de l’état de la firebase database, mais Paul Graham sait comment écrire des applications Web en mode lisp . de vos cycles cérébraux apprendre la manière lisp.

Weblocks est un bon outil pour créer des applications Web dans Common Lisp, mais un peu trop lourd pour moi.

Nous utilisons la stack suivante:

  • OpenMCL (open source Lisp, très sympa)

  • Portable Allegroserve (serveur Web, générateur HTML)

  • Nos propres outils ressemblant à Rails pour faire des choses avec Ajaxy (mise à jour: celle-ci a été ouverte depuis WuWei )

  • Une variété de bibliothèques CL comme cl-json, cl-smtp, md5

J’utilise ma propre version personnalisée de Scheme, dérivée de MzScheme. Il dispose d’un nouveau cadre d’application Web simple, d’un serveur Web intégré (pas celui fourni avec MzScheme) et de bibliothèques ODBC. ( http://spark-scheme.wikispot.org/Web_applications ). La documentation peut ne pas être exhaustive, car il s’agit plutôt d’un outil personnel. Mais il y a beaucoup de code exemple dans le référentiel de code .

Voyons ce qui peut être fait avec Common Lisp .

L’ état de l’écosystème Common Lisp (2015) et la liste Awesome Common Lisp nous montrent quelques frameworks modernes ( Caveman , Lucerne , tous construits sur le nouveau serveur d’applications Web Clack , une interface pour Hunchentoot et d’autres serveurs). Discutons avec nos propres conclusions.

mise à jour : un peu plus tard, j’ai découvert Snooze , du créateur de Sly ou du Yasnippet d’Emacs, et j’ai eu une bien meilleure impression que Caveman. La déclaration des points de terminaison est comme la déclaration de fonctions, de sorte que certaines choses fastidieuses dans Caveman sont évidentes dans Snooze, comme l’access aux parameters d’url. Je n’ai pas beaucoup d’expérience avec cela, mais je recommande de le vérifier.

mise à jour juin 2018 : ne manquez pas non plus la réécriture en cours de Weblocks, ça va être énorme! : D http://40ants.com/weblocks/quickstart.html Weblocks permet de créer des webapps dynamics, sans ligne de javascript, sans séparer le recto et le verso. Il est basé sur des composants, comme React mais côté serveur. C’est très alpha dès l’écriture (juin 2018), mais en cours, et ça marche, j’ai quelques applications web simples qui fonctionnent.

Un moyen simple d’obtenir les parameters de la requête (quelque chose comme: get-get #key, get-post #key, get-cookie #key).

J’ai trouvé plus facile la méthode de Lucerne, elle est aussi simple qu’une macro with-params ( exemple du monde réel ):

 @route app (:post "/tweet") (defview tweet () (if (lucerne-auth:logged-in-p) (let ((user (current-user))) (with-params (tweet) (utweet.models:tweet user tweet)) (redirect "/")) (render-template (+index+) :error "You are not logged in."))) 

La façon dont Caveman a été moins claire pour moi .

Accès à Mysql

Caveman annonce l’intégration de bases de données (avec Datafly et sxql de Fukamachi).

Vous pouvez simplement utiliser clsql ou l’ORM Mito: https://lispcookbook.github.io/cl-cookbook/databases.html

Générateurs de formulaires HTML, traitement, validateurs, etc.

Je ne sais pas s’il existe des générateurs de formulaires. edit : il y a: des formes-cl et des formulaires , ou encore 1forms , en collaboration avec Caveman2.

Caveman n’en a pas (question soulevée en 2011).

Des aides pour filtrer les données d’entrée des utilisateurs (quelque chose comme des entités HTML, des variables d’échappement pour les requêtes de mise en place, etc.).

Ratify est une bibliothèque de validation des entrées, mais pas intégrée à un framework.

FLOSS et compatible GNU / Linux ✓

Autres choses sur le web

En parlant de web, il y a d’ autres belles bibliothèques dans CL land:

  • serveurs web: Woo est un serveur HTTP rapide, plus rapide que Nodejs (méfiez-vous des graphiques…), wookie est un serveur http asynchrone,
  • Dexador est un client HTTP
  • Plump , lquery et CLSS facilitent l’parsing syntaxique du HTML et de l’interrogation du DOM.
  • cl-bootstrap offre des raccourcis twitter-bootstrap pour le moteur de création de modèles cl-who (qui remplace Jade / Pug, même si nous avons aussi des modèles habituels).

Ajax à Lisp

(rappelez-vous, avec Weblocks, voir ci-dessus, nous pourrions ne pas en avoir besoin)

  • Wuwei est une expérience intéressante qui permet d’écrire des vues Ajax dans Common Lisp. Le site a de belles démos du monde réel. Il peut inclure d’autres bibliothèques Javascript.
  • également SmackJack , expliquée dans ce récent billet de blog (2017).

Clojure est un dialecte Lisp qui peut vous intéresser. À ce stade, il y a une stack de développement Web assez décente. Je peux recommander quelques choses:

  • Le leiningen dépendance leiningen , qui est très facile à installer et à gérer les bibliothèques que vous utilisez. Joli jeu de plugins pour ça aussi. Il existe même un plugin pour Clojurescript, un langage basé sur Clojure qui comstack en Javascript.
  • L’abstraction du serveur HTTP en ring . Son utilisé dans la plupart des frameworks Web réels. C’est une bonne idée d’apprendre cela avant de sauter dans un cadre réel.
  • hiccup est un langage HTML dsl / templating écrit en Clojure. C’est très expressif! Cela me rappelle un peu Jade, dans un sens.
  • composurecomposure devrait être le framework Web le plus populaire pour Clojure. C’est essentiellement une bibliothèque de routage comme express.js .

Clojure serait parfait pour cela. Avec un code très court et propre, vous pouvez implémenter des applications très complexes, telles que des blogs ou des forums.