web-dev-qa-db-fra.com

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 ce langage. Mais je ne trouve pas ce qui est le meilleur environnement pour cela.

Je recherche les fonctionnalités suivantes:

  • Un moyen simple d'obtenir les paramètres de la demande (quelque chose comme: get-get #key, get-post #key, get-cookie #key).
  • Accès Mysql.
  • Générateurs de formulaires HTML, traitement, validateurs, etc.
  • Aides pour filtrer les données d'entrée des utilisateurs (quelque chose comme htmlentities, variables d'échappement pour les mettre dans les requêtes, etc.).
  • SOIE.
  • Et convivial GNU/Linux.

Merci donc d'avance à toutes les réponses.

74
Castro

Racket a tout ce dont vous avez besoin. Voir le serveur Web Racket tutoriel puis le documentation . Le serveur Web existe depuis un certain temps, et il a beaucoup de fonctionnalités. La seule chose qui n'est pas incluse est probablement une interface mysql, mais qui existe sous forme de package sur PLaneT (outil de distribution de packages de raquettes).

MISE À JOUR: Racket est désormais livré avec le support DB, fonctionne avec plusieurs bases de données, y compris mysql.

66
Eli Barzilay

Vous voudrez peut-être jeter un œil à Clojure :

Clojure est un langage de programmation dynamique qui cible la machine virtuelle Java. [...] Clojure fournit un accès facile aux frameworks Java, avec des conseils de type facultatifs et inférence de type, pour garantir que les appels à Java peuvent éviter la réflexion.

Clojure est un dialecte de LISP et partage avec LISP la philosophie du code en tant que données et un puissant système de macro.

Interopérez avec Java est simple dans Clojure, vous pouvez donc réutiliser toutes les bibliothèques Java Java dont vous avez besoin. Je suis sûr qu'il y en a beaucoup qui sont utiles) pour le développement web.

clojure-contrib possède une API SQL, et il existe également ClojureQL , qui devrait couvrir vos besoins d'accès à la base de données.

Il existe un framework web pour Clojure appelé Compojure en cours de développement. Il peut y en avoir d'autres aussi.

La source de Clojure est disponible sur github sous EPL . Le faire fonctionner sous Linux est facile; Je viens de cloner le dépôt git et d'exécuter ant.

19
Mike Mazur

Vous pouvez faire du développement web avec schéma guile . Sa bibliothèque standard comprend le module (sxml simple) qui est très utile pour la génération, la manipulation et l'analyse syntaxique html. La bibliothèque guile-www ajoute la prise en charge de http, cgi, etc. La bibliothèque guile-dbi donne accès à 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.

18
gcbenison

Essayez Weblocks, un framework web LISP commun:

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

15
Leslie P. Polzer

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 pour la plupart des développements Web de base, y compris l'accès aux bases de données, l'authentification, la génération HTML et les modèles.
  • Étant donné que la documentation Restas est à peu près obsolète, mon tutoriel est la chose la plus proche des documents à jour.
  • Affiche quelques-unes des fonctionnalités les plus avancées, comme les politiques, qui vous permettent d'écrire des interfaces enfichables, par exemple, vous pouvez écrire une couche de stockage de données et écrire des back-ends pour différents mécanismes de stockage avec une relative facilité, le système de modules qui vous permet de écrire des composants réutilisables, comme des cadres 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 le gestionnaire de paquets quicklisp, etc.
  • Il est gratuit en ligne et dès que je l'aurai terminé, 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.
9
Pavel Penev

Si vous êtes intéressé par Common LISP pour être exact et que vous ne voulez pas suivre la route des weblocks, je recommanderais la configuration suivante:

  1. Utiliser SBCL sous Linux mais avec prise en charge de plusieurs threads
  2. Utilisez Hunchentoot comme serveur Web qui vous fournira tout le traitement serveur requis, y compris les sessions et les cookies
  3. Utilisez ClSql pour communiquer avec MySql, il a une documentation abondante 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 tout ce qui précède est sous GPL ou licence similaire (celle qui fonctionne plus pour les programmes LISP)

8
Mackram
8
Unknown

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

Andrew Whaley a une initiale tutoriel sur la façon d'obtenir Gambit, Black Hole et Spork exécutant une application web sous Apache en utilisant mod_proxy. Vous voudrez peut-être y jeter un œil.

Sur une note (éventuellement) liée, Gambit compilera également vos trucs en C puis en exécutable, si vous le souhaitez.

6
malvim

Paul Graham (et ses amis) ont créé un dialecte LISP spécifiquement pour l'écriture d'applications Web de base. Cela s'appelle Arc, et vous pouvez l'obtenir sur arclanguage.org .

Il n'est probablement pas adapté aux très gros sites Web complexes et je ne sais pas dans quel état se trouve la prise en charge de la base de données, mais Paul Graham sait comment écrire des applications Web dans LISP , donc Arc fera la partie HTTP/HTML facile pour vous pendant que vous passez la plupart de vos cycles cérébraux à apprendre la manière LISP.

5
wm_eddie

Weblocks est un bel outil pour créer des applications Web dans LISP commun, mais un peu trop lourd pour moi.

Nous utilisons la pile suivante:

  • OpenMCL (LISP open source, très Nice)

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

  • Nos propres outils de type Rails pour faire des trucs Ajaxy (mise à jour: cela a maintenant été open source comme WuWei )

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

J'utilise ma propre version personnalisée de Scheme, dérivée de MzScheme. Il a un nouveau cadre d'application Web simple, un serveur Web intégré (pas celui qui vient avec MzScheme) et des bibliothèques ODBC. ( http: // spark -scheme.wikispot.org/Web_applications ). La documentation n'est peut-être pas exhaustive, car il s'agit davantage d'un outil personnel. Mais il existe de nombreux exemples de code dans le référentiel de code .

2
Vijay Mathew

Voyons ce qui peut être fait avec LISP commun .

La liste état de l'écosystème Common LISP (2015) et Awesome Common LISP nous montre quelques cadres modernes ( Caveman , Lucerne , tous construits sur le nouveau Clack serveur d'applications Web, une interface pour Hunchentoot et d'autres serveurs). Discutons avec nos propres conclusions.

mise à jour : un peu plus tard, j'ai découvert Snooze , par le créateur de Sly ou Yasnippet d'Emacs, et j'ai eu beaucoup meilleure impression que de dire Caveman. La déclaration de points de terminaison est comme la déclaration de fonctions, donc certaines choses qui étaient fastidieuses dans Caveman sont évidentes dans Snooze, comme l'accès aux paramètres 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 construire des webapps dynamiques, sans ligne de Javascript, sans séparer l'arrière et l'avant. Il est basé sur des composants, comme React mais côté serveur. Il est très alpha au moment de l'écriture (juin 2018), mais en cours, et cela fonctionne, j'ai quelques applications Web simples qui fonctionnent.

Un moyen simple d'obtenir les paramètres de la demande (quelque chose comme: get-get #key, get-post #key, get-cookie #key).

J'ai trouvé plus facile à Lucerne, c'est aussi simple qu'un with-params macro ( exemple 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 manière de 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: cl-forms et formlets , ou encore 1forms , en collaboration avec Caveman2.

Caveman n'en a pas (problème soulevé en 2011).

Aides pour filtrer les données d'entrée des utilisateurs (quelque chose comme htmlentities, variables d'échappement pour les mettre dans les requêtes, etc.).

Ratify est une bibliothèque de validation d'entrée, mais pas intégrée dans un framework.

Compatible FLOSS et GNU/Linux ✓

Autres trucs Web

En parlant de web, il y a autres bibliothèques niçoises en CL:

  • serveurs web: Woo est un serveur HTTP rapide, plus rapide que Nodejs (attention aux graphiques…), wookie est un serveur http asynchrone,
  • Dexador est un client HTTP
  • Plump , lquery et CLSS facilitent l'analyse html et interrogent le DOM.
  • cl-bootstrap propose des raccourcis Twitter-bootstrap pour le moteur de modèle cl-who (qui remplace Jade/Pug, même si nous avons aussi des modèles habituels).

Ajax dans 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 en LISP commun. Le site propose de belles démos du monde réel. Il peut inclure d'autres bibliothèques Javascript.
  • aussi SmackJack , expliqué dans ce récent article de blog (2017).
2
Ehvince

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

  • Le gestionnaire de dépendances leiningen qui le rend est vraiment facile à installer et à gérer les bibliothèques que vous utilisez. Un joli ensemble de plugins pour cela aussi. Il existe même un plugin pour Clojurescript, qui est un langage basé sur Clojure qui se compile en Javascript.
  • L'abstraction du serveur HTTP ring. Son utilisé dans la plupart des cadres Web actuels. C'est une assez 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 de Jade, dans un sens.
  • composure devrait être le framework web le plus populaire pour Clojure. C'est essentiellement une bibliothèque de routage comme express.js.
2
Jonathan Boudreau

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

0
Imagist