ventajas resueltos programación programacion lenguajes lenguaje funcion ejercicios ejemplos desventajas descargar cond caracteristicas lisp scheme

resueltos - ¿Cómo puedo hacer programación web con Lisp o Scheme?



lisp pdf (14)

Clojure es un dialecto de Lisp que te puede interesar. En este punto hay una pila de desarrollo web bastante decente. Puedo recomendar algunas cosas:

  • El leiningen dependencias de leiningen que hace es realmente fácil de instalar y administrar las bibliotecas que está utilizando. Bastante buen conjunto de complementos para él también. Incluso hay un complemento para Clojurescript, que es un lenguaje basado en Clojure que se compila en Javascript.
  • La abstracción del servidor HTTP del ring . Se usa en la mayoría de los marcos web reales. Es una buena idea aprender eso antes de saltar a un marco real.
  • hiccup es un lenguaje de dsl / plantillas HTML escrito en Clojure. ¡Es muy expresivo! Me recuerda un poco a Jade, en cierto sentido.
  • composure tendría que ser el marco web más popular para Clojure. Es esencialmente una biblioteca de enrutamiento como express.js .

Normalmente escribo aplicaciones web en PHP, Ruby o Perl. Estoy empezando el estudio de Scheme y quiero probar algún proyecto web con este lenguaje. Pero no puedo encontrar cuál es el mejor entorno para esto.

Estoy buscando las siguientes características:

  • Una forma simple de obtener los parámetros de solicitud (algo como: get-get #key, get-post #key, get-cookie #key).
  • Acceso Mysql.
  • Generadores de formularios HTML, procesamiento, validadores, etc.
  • Ayudantes para los datos de entrada del usuario de filtro (algo así como htmlentities, variables de escape para poner en consultas, etc.).
  • SEDA FLOJA.
  • Y amigable con GNU / Linux.

Entonces, gracias de antemano por todas las respuestas.


Clojure sería perfecto para esto. Con un código muy breve y limpio, puede implementar algunas aplicaciones muy complejas, como blogs o foros.


Es posible que desee echar un vistazo a Clojure :

Clojure es un lenguaje de programación dinámico que se dirige a Java Virtual Machine. [...] Clojure proporciona un acceso fácil a los marcos de Java, con sugerencias de tipo opcionales e inferencia de tipo, para garantizar que las llamadas a Java puedan evitar la reflexión.

Clojure es un dialecto de Lisp, y comparte con Lisp la filosofía del código como datos y un poderoso macro sistema.

Interop con Java es sencillo en Clojure, por lo que puede volver a utilizar cualquier biblioteca Java existente que necesite. Estoy seguro de que hay muchos que son útiles para el desarrollo web.

clojure-contrib tiene una API de SQL, y también está ClojureQL , que debería cubrir sus necesidades de acceso a la base de datos.

Existe un marco web para Clojure llamado Compojure en desarrollo. Puede haber otros, también.

La fuente de Clojure está disponible en github bajo el EPL . Hacer que funcione en Linux es fácil; Solo clono los repositorios de git y corro la ant .



He escrito un extenso tutorial / ebook sobre el tema: http://lispwebtales.ppenev.com/

Sumario rápido:

  • Utiliza Common Lisp
  • Utiliza el marco Restas
  • Tiene ejemplos para casi todo el desarrollo web básico, incluido el acceso a bases de datos, la autenticación, la generación de HTML y la creación de plantillas.
  • Como la documentación de Restas está prácticamente desactualizada, mi tutorial es lo más parecido a los documentos actualizados.
  • Muestra algunas de las funciones más avanzadas, como políticas, que le permiten escribir interfaces conectables, por ejemplo, puede escribir una capa de almacén de datos y escribir back-ends para diferentes mecanismos de almacenamiento con relativa facilidad, el sistema de módulos que le permite escribe componentes reutilizables, como auth frameworks y cosas por el estilo.
  • Cubre cosas como instalar lisp, configurar el sistema de compilación ASDF y el administrador de paquete quicklisp, etc.
  • Es gratis en línea, y tan pronto como lo termine será gratis en leanpub también. La fuente está en https://github.com/pvlpenev/lispwebtales bajo una licencia CC, el código fuente es MIT. Aún no se ha publicado todo, y estoy en proceso de revisión.

Paul Graham (y amigos) hicieron un dialecto lisp específicamente para escribir aplicaciones web básicas. Se llama Arc, y puedes obtenerlo en arclanguage.org .

Probablemente no sea adecuado para sitios web complejos realmente grandes y no estoy seguro de en qué estado se basa la base de datos, pero Paul Graham sabe cómo escribir aplicaciones web en lisp , por lo que Arc hará que la parte HTTP / HTML sea más fácil para ti mientras pasas más tiempo de tus ciclos cerebrales aprendiendo el camino de lisp.



Puedes hacer desarrollo web con un esquema ingenioso . Su biblioteca estándar incluye el módulo (sxml simple) que es muy útil para generar, manipular y analizar html. La biblioteca guile-www agrega soporte para http, cgi, etc. La biblioteca guile-dbi proporciona acceso a MySQL y otras bases de datos. Con estos componentes, puede implementar desde simples scripts cgi hasta aplicaciones web con su propio servidor HTTP.


Si está interesado en Common Lisp para ser exacto y no desea ir a la ruta de weblocks, le recomendaría la siguiente configuración:

  1. Use SBCL en Linux pero con soporte de múltiples hilos
  2. Utilice Hunchentoot como un servidor web que le proporcionará todo el procesamiento del servidor requerido, incluidas sesiones y cookies
  3. Use ClSql para comunicarse con MySql, tiene una amplia documentación y es muy estable.
  4. Para la generación HTMl, puede usar el Dr. Edi Weitz Cl-WHO (muy bien documentado).

Tenga en cuenta que todo lo anterior está bajo licencia GPL o similar (una que funciona más para programas lisp)


Uso mi propia versión personalizada de Scheme, derivada de MzScheme. Tiene un nuevo y simple marco de aplicaciones web, un servidor web incorporado (no el que viene con MzScheme) y bibliotecas ODBC. ( http://spark-scheme.wikispot.org/Web_applications ). La documentación puede no ser exhaustiva, ya que se trata más de una herramienta personal. Pero hay muchos ejemplos de código en el repositorio de código .


Veamos qué se puede hacer con Common Lisp .

El estado del ecosistema Common Lisp (2015) y la lista Awesome Common Lisp nos muestran un par de marcos modernos ( Caveman , Lucerne , todos construidos sobre el nuevo servidor de aplicaciones web Clack , una interfaz para Hunchentoot y otros servidores). Discutamos con nuestros propios hallazgos.

actualización : un poco más tarde, descubrí Snooze , del creador de Sly o Emacs ''Yasnippet, y tuve una mejor impresión que Caveman. Declarar puntos finales es como declarar funciones, por lo que algunas cosas que fueron tediosas en Caveman son obvias en Snooze, como el acceso a los parámetros de la url. No tengo mucha experiencia con él, pero recomiendo echarle un vistazo.

actualización junio 2018 : ¡no se pierda la reescritura de Weblocks, va a ser enorme! : D http://40ants.com/weblocks/quickstart.html Weblocks permite construir webapps dinámicas, sin una línea de Javascript, sin separar el reverso y el frente. Está basado en componentes, como React pero en el lado del servidor. Es muy alfa a partir de la escritura (junio de 2018), pero en progreso, y está funcionando, tengo un par de aplicaciones web simples funcionando.

Una forma simple de obtener los parámetros de solicitud (algo como: get-get #key, get-post #key, get-cookie #key).

Encontré más fácil la forma de Lucerna, es tan simple como una macro with-params ( ejemplo del mundo real ):

@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.")))

El camino de Caveman ha sido menos claro para mí .

Acceso Mysql

Caveman anuncia la integración de la base de datos (con Datafly y sxql de Fukamachi).

Solo puede usar clsql o Mito ORM: https://lispcookbook.github.io/cl-cookbook/databases.html

Generadores de formularios HTML, procesamiento, validadores, etc.

No sé si hay generadores de formularios por ahí. editar : hay: cl-forms y formlets , o de nuevo 1forms , trabajando con Caveman2.

Caveman no tiene uno (problema planteado en 2011).

Ayudantes para los datos de entrada del usuario de filtro (algo así como htmlentities, variables de escape para poner en consultas, etc.).

Ratify es una biblioteca de validación de entrada, aunque no está integrada en un framework.

Compatible con FLOSS y GNU / Linux ✓

Otras cosas web

Hablando de la web, hay otras buenas bibliotecas en CL Land:

  • servidores web: Woo es un servidor HTTP rápido, más rápido que Nodejs (cuidado con los gráficos ...), wookie es un servidor http asincrónico,
  • Dexador es un cliente HTTP
  • Plump , lquery y CLSS hacen que sea fácil analizar html y consultar el DOM.
  • cl-bootstrap ofrece métodos abreviados de arranque de Twitter para el motor de plantillas cl-who (que reemplaza a Jade / Pug, aunque también tenemos plantillas habituales).

Ajax en Lisp

(recuerde, con Weblocks, vea arriba, puede que no los necesitemos)

  • Wuwei es un experimento interesante que permite escribir vistas de Ajax en Common Lisp. El sitio web tiene buenas demos del mundo real. Puede incluir otras bibliotecas de Javascript.
  • también SmackJack , explicado en esta reciente publicación de blog (2017).

Weblocks es una buena herramienta para crear aplicaciones web en Common Lisp, pero un poco demasiado pesada para mí.

Usamos la siguiente pila:

  • OpenMCL (código abierto de Lisp, muy agradable)

  • Portable Allegroserve (servidor web, generador de HTML)

  • Nuestras propias herramientas de Rails para hacer cosas de Ajax (actualización: esto ahora ha sido abierto como WuWei )

  • Una variedad de bibliotecas CL como cl-json, cl-smtp, md5

Gambit Scheme también tiene su propia solución para aplicaciones web. Utiliza el marco de Spork , basado en el sistema de módulo Black Hole (ambos de Per Eckerdal).

Andrew Whaley tiene un tutorial inicial sobre cómo hacer que Gambit, Black Hole y Spork ejecuten una aplicación web bajo Apache usando mod_proxy. Es posible que desee echar un vistazo a eso.

En una nota (posiblemente) relacionada, Gambit también compilará sus cosas en C y luego en un ejecutable, si así lo desea.


Racket tiene todo lo que necesitas. Consulte el tutorial servidor web Racket y luego la documentation . El servidor web ha existido por un tiempo y tiene muchas funciones. Probablemente, lo único que no está incluido es una interfaz mysql, pero eso existe como un paquete en PLaneT (herramienta de distribución de paquetes de Racket).

ACTUALIZACIÓN: Racket ahora viene con soporte de DB, funciona con varios DBs incluyendo mysql.