我如何使用Lisp或Scheme进行网页编程?

我通常使用PHP,Ruby或Perl编写Web应用程序。 我开始研究Scheme,我想用这种语言来尝试一些Web项目。 但是我找不到这个最好的环境。

我正在寻找以下function:

  • 获取请求参数的简单方法(如:get-get #key,get-post #key,get-cookie #key)。
  • Mysql访问。
  • HTML表单生成器,处理,validation器等
  • 用于过滤用户input数据的帮助器(类似于htmlentities,用于放入查询的转义variables等)。
  • FLOSS。
  • 和GNU / Linux友好。

所以,预先感谢所有答复。

球拍有你需要的一切。 请参阅Racket Web服务器教程 ,然后阅读文档 。 networking服务器已经有一段时间了,它有很多function。 可能唯一没有包含的是mysql接口,但是作为PLaneT (球拍包分发工具)上的一个包存在。

更新:球拍现在与数据库支持,与包括MySQL在内的几个数据库。

你可能想看看Clojure :

Clojure是一种针对Java虚拟机的dynamic编程语言。 Clojure通过可选的types提示和types推断提供了对Java框架的简单访问,以确保对Java的调用可以避免reflection。

Clojure是Lisp的一种方言,与Lisp分享了代码作为数据的哲学和强大的macros观系统。

Java中的Interop在Clojure中很简单,所以您可以根据需要重新使用任何现有的Java库。 我敢肯定,有很多有用的网页开发。

clojure-contrib有一个SQL API,还有ClojureQL ,它应该覆盖你的DB访问需求。

Clojure有一个名为Compojure的web框架正在开发中。 也可能有其他的。

Clojure的源码可以在 EPL下的github上find 。 让它在Linux上运行很容易; 我只是克隆git仓库,并运行ant

你可以用guilescheme做web开发。 它的标准库包含(sxml简单)模块,对于html生成,操作和parsing非常有用。 guile-www库增加了对http,cgi等的支持.guile-dbi库提供对MySQL和其他数据库的访问。 通过这些构build块,您可以使用自己的HTTP服务器实现从简单的cgi脚本到Web应用程序的所有内容。

尝试Weblocks,一个Common Lisp Web框架:

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

我已经写了一个相当广泛的教程/电子书的主题: http : //lispwebtales.ppenev.com/

快速总结:

  • 它使用Common Lisp
  • 它使用Restas框架
  • 它提供了绝大多数基本Web开发的例子,包括数据库访问,authentication,HTML生成和模板。
  • 由于Restas文档已经过时,我的教程是最接近最新的文档。
  • 显示一些更高级的function,比如策略,允许你编写可插入的接口,例如你可以编写一个数据存储层,并且相对容易地为不同的存储机制写后端,模块系统允许你编写可重用的组件,像auth框架和类似的东西。
  • 它包括安装lisp,设置ASDF构build系统和quicklisp包pipe理器等。
  • 它在线免费,只要完成,它也会在leanpub上免费。 源代码是https://github.com/pvlpenev/lispwebtales下的CC许可证,源代码是MIT。; 并不是所有的东西都已经发布了,而且我正在修改过程中。

如果您对Common Lisp感兴趣,并且不想走捷径,我会推荐以下设置:

  1. 在Linux上使用SBCL,但有多个线程支持
  2. 使用Hunchentoot作为Web服务器,它将为您提供所有需要的服务器处理,包括会话和cookie
  3. 使用ClSql与MySql进行通信,它有足够的文档,非常稳定。
  4. 对于HTMl世代,您可以使用Dr Edi Weitz Cl-WHO(非常有据可查)。

请注意,以上所有内容均采用GPL或类似许可(对lisp程序更适用)

手游计划也有自己的networking应用解决scheme。 它使用Spork框架,基于黑洞模块系统(Per Eckerdal)。

Andrew Whaley有一个关于如何让Gambit,Black Hole和Spork使用mod_proxy在Apache下运行web应用程序的初始教程 。 你可能想看看这个。

在一个(可能)相关的说明中,Gambit也会把你的东西编译成C,然后再编译成一个可执行文件,如果你觉得这么做的话。

Paul Graham(和朋友)专门为编写基本的Web应用程序制作了一个Lisp方言。 这就是所谓的弧,你可以在arclanguage.org 。

它可能不适合真正的大型复杂网站,我不确定它的数据库支持是什么状态,但是Paul Graham知道如何在lisp中编写Web应用程序 ,所以当你花费最多的时候Arc会使HTTP / HTML部分变得容易你的大脑循环学习Lisp的方式。

Weblocks是在Common Lisp中构buildWeb应用程序的好工具,但对我来说有点太重了。

我们使用下面的堆栈:

  • OpenMCL(开源Lisp,非常好)

  • 便携式的Allegroserve(networking服务器,HTML生成器)

  • 我们自己的Rails类的工具来做Ajaxy的东西(更新:现在已经开源了,作为WuWei )

  • CL-json,cl-smtp,md5等各种CL库

我使用我自己的定制版本的Scheme,从MzScheme派生。 它有一个新的,简单的Web应用程序框架,一个内置的Web服务器(不是MzScheme自带的)和ODBC库。 ( http://spark-scheme.wikispot.org/Web_applications )。 文档可能并不完整,因为这更像是个人的工具。 但代码库中有很多示例代码。

Clojure是一个你可能感兴趣的Lisp方言。 在这一点上,有一个相当不错的Web开发堆栈。 我可以推荐几件事情:

  • leiningen依赖关系pipe理器是非常容易安装和pipe理你正在使用的库。 相当不错的插件集。 甚至还有一个Clojurescript的插件,它是一个基于Clojure的编译成Javascript的语言。
  • ring HTTP服务器抽象。 它用在大多数实际的web框架中。 在跳入实际的框架之前,先学习一个很好的主意。
  • hiccup是用Clojure编写的HTML dsl /模板语言。 它非常有performance力! 在某种意义上,让我想起了一些翡翠。
  • composure将不得不成为最stream行的Clojure网页框架。 它基本上是一个类似express.js的路由库。

Clojure将是完美的。 使用一些非常简洁的代码,您可以实现一些非常复杂的应用程序,例如博客或论坛。

让我们来看看Common Lisp可以做些什么。

Common Lisp生态系统(2015)和Awesome Common Lisp列表的状态向我们展示了几个现代化框架( Caveman , Lucerne ,全部基于新的Clack Web应用程序服务器,Hunchentoot和其他服务器的接口)。 我们来讨论一下我们自己的发现。

获取请求参数的简单方法(如:get-get #key,get-post #key,get-cookie #key)。

我发现卢塞恩方式更简单,它就像一个with-paramsmacros( 真实世界的例子 )一样简单:

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

穴居人的方式一直不太清楚 。

Mysql访问

起重机是一个支持MySQL,Postgre,SQLite等的ORM。它具有自动迁移function ( 不适用于SQLite )。

穴居人广告数据库集成。

HTML表单生成器,处理,validation器等

我不知道那里是否有表单生成器。 编辑 :有: cl-forms和formlets ,或者再一次使用Caveman2。

穴居人没有 (2011年提出的问题)。

用于过滤用户input数据的帮助器(类似于htmlentities,用于放入查询的转义variables等)。

Ratify是一个inputvalidation库,但没有集成到框架中。

FLOSS和GNU / Linux友好✓

其他网站的东西

谈到networking,在CL的土地上还有其他不错的图书馆 :

  • Web服务器: Woo是一个快速的HTTP服务器,比Nodejs更快(注意图表…), wookie是一个asynchronousHTTP服务器,
  • Dexador是一个HTTP客户端
  • 丰满 , lquery和CLSS使得parsinghtml和查询DOM变得很容易。
  • cl-bootstrap为cl-who模板引擎提供了twitter-bootstrap快捷键(即使我们也有通常的模板,这种快捷键可以替代Jade / Pug)。

Ajax在Lisp中

  • 无为是一个有趣的实验,可以在Common Lisp中编写Ajax视图。 该网站有很好的现实世界的演示。 它可以包含其他Javascript库。
  • 还有SmackJack ,在最近这篇博文(2017)中解释。
  • Weblocks是构build基于Ajax的Web应用程序的旧框架。 这里正在重新devise一个新的快速入门。 我会密切关注的。