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:
Merci donc d'avance à toutes les réponses.
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.
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
.
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.
Essayez Weblocks, un framework web LISP commun:
J'ai écrit un tutoriel/ebook assez complet sur le sujet: http://lispwebtales.ppenev.com/
Résumé rapide:
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:
Notez que tout ce qui précède est sous GPL ou licence similaire (celle qui fonctionne plus pour les programmes LISP)
C'est peut-être ce que vous recherchez.
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.
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.
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 )
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 .
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.
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 .
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
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).
Ratify est une bibliothèque de validation d'entrée, mais pas intégrée dans un framework.
En parlant de web, il y a autres bibliothèques niçoises en CL:
(rappelez-vous, avec Weblocks, voir ci-dessus, nous pourrions ne pas en avoir besoin)
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:
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.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
.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.