我该如何使用Lisp或Scheme进行Web编程?

78

我通常使用PHP、Ruby或Perl编写Web应用程序。我正在开始学习Scheme,并想尝试使用这种语言进行一些Web项目。但是我找不到最适合它的环境。

我正在寻找以下功能:

  • 一种简单的获取请求参数的方法(类似于:get-get #key,get-post #key,get-cookie #key)。
  • 访问Mysql。
  • HTML表单生成器、处理器、验证器等。
  • 帮助过滤用户输入数据的工具(类似于htmlentities,将变量转义以放入查询中等)。
  • 自由开源软件。
  • 并且友好于GNU/Linux。

因此,在此提前感谢所有回复。


1
像 htmlentities、转义函数、请求包装器等这样的东西,对于你来说可能是一个不错的练习,因为你说你刚开始学习 Scheme。 - erjiang
15个回答

73

Racket 拥有你需要的一切。请先查看 Racket web 服务器 教程,然后再阅读文档。这个 web 服务器已经存在一段时间了,并且拥有许多功能。唯一没有包含的可能是 mysql 接口,但可以在 PLaneT(Racket的软件包分发工具)上下载该接口的包。

更新: Racket 现在已经支持 DB,可以与多种数据库配合使用,包括 mysql。


1
赞同。继续接口也很有趣——不用担心它看起来可能有些混乱;除它外,servlet接口的其他部分仍然可以工作。我之前不知道mysql接口,我会去看看的,谢谢! - Aaron
1
自2009年起,Racket已经获得了内置的数据库支持。它支持PostgreSQL,MySQL,SQLite和ODBS。请见http://docs.racket-lang.org/db/index.html。 - soegaard

20
您可能想看一下 Clojure:

Clojure是一种针对Java虚拟机的动态编程语言。 [...] Clojure提供了易于访问的Java框架,可以选择使用类型提示和类型推断,以确保对Java的调用可以避免反射。

Clojure是Lisp的一个方言,与Lisp共享代码即数据哲学和强大的宏系统。

在Clojure中与Java的互操作性很简单,因此您可以根据需要重用任何现有的Java库。我确定有很多对Web开发有用的库。 clojure-contrib有一个SQL API,并且还有ClojureQL,应该可以满足您的数据库访问需求。
Clojure还有一个名为Compojure的Web框架正在开发中。可能还有其他框架。
Clojure的源代码在github上可用,在EPL下发布。在Linux上运行它很容易,我只需克隆git存储库并运行ant

谢谢回复。我没有Java的任何经验。Clojure设置或使用需要它吗? - Castro
1
我认为Java不是必需的;你可以很好地开始使用Clojure。 - Mike Mazur
1
Clojure 运行于 JVM 上,因此您需要安装一个。一旦您超出 Clojure 内置类型的范围,与 Java 类库的经验绝对是一个加分项。 - wm_eddie

18

你可以使用 guile scheme 进行 Web 开发。它的标准库包括了 (sxml simple) 模块,非常适合用于 HTML 的生成、操作和解析。同时,guile-www 库也增加了对于 HTTP、CGI 等的支持。而 guile-dbi 库则提供了访问 MySQL 和其它数据库的接口。有了这些构建块,你就可以实现从简单的 CGI 脚本到具有自己 HTTP 服务器的 Web 应用程序的各种功能。


15

10

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

快速概述:

  • 它使用 Common Lisp
  • 它使用Restas框架
  • 它有几乎所有基本网络开发的示例,包括数据库访问、身份验证、HTML生成和模板化。
  • 由于 Restas 文档几乎过时了,我的教程是最接近最新文档的东西。
  • 展示了一些更高级的功能,如策略,允许您编写可插接的接口,例如您可以编写数据存储层,并相对容易地编写不同存储机制的后端,模块系统允许您编写可重用组件,如认证框架等。
  • 涵盖安装 lisp,设置 ASDF 构建系统和 quicklisp 包管理器等方面的内容。
  • 它在线免费,一旦我完成它,它也将免费在 leanpub 上。源代码在https://github.com/pvlpenev/lispwebtales下采用 CC 许可,源代码采用 MIT 许可。并非所有内容都已发布,我正在进行修订。

8

5
请提供链接的描述。 - Sasha Chedygov
4
PLT Scheme现在被称为Racket,并且位于不同的网站上:http://racket-lang.org/。 - Nate C-K

8
如果您对Common Lisp感兴趣,但不想走weblocks的路线,我建议您采用以下设置:
  1. 在Linux上使用带有多线程支持的SBCL
  2. 使用Hunchentoot作为Web服务器,它将为您提供所有所需的服务器处理,包括会话和Cookie
  3. 使用ClSql与MySql通信,它有丰富的文档并且非常稳定。
  4. 对于HTML生成,您可以使用Dr Edi Weitz Cl-WHO(文档非常好)。
请注意,以上所有内容均受GPL或类似许可证的保护(适用于Lisp程序)。

6

Gambit Scheme也有自己的Web应用程序解决方案。它使用Spork框架,基于Black Hole模块系统(都是由Per Eckerdal创建的)。

Andrew Whaley在如何使用mod_proxy在Apache下运行Gambit、Black Hole和Spork的Web应用程序方面有一个初始的教程。你可能想看一看。

可能与此相关的是,如果您感兴趣,Gambit还可以将您的内容编译为C语言并生成可执行文件。


5
保罗·格雷厄姆(以及他的朋友们)专门为编写基本Web应用程序制作了一种Lisp方言,名为Arc,您可以在arclanguage.org上获取它。它可能不适用于非常大而复杂的网站,我也不确定它的数据库支持状态如何,但是保罗·格雷厄姆知道lisp编写Web应用程序的方法,因此当您花费大部分脑力学习lisp的方式时,Arc将使HTTP / HTML部分变得容易。

3
Weblocks是一款用于在Common Lisp中构建Web应用程序的好工具,但对我来说有点太重了。
我们使用以下堆栈:
- OpenMCL(开源Lisp,非常不错) - Portable Allegroserve(Web服务器,HTML生成器) - 我们自己的类似于Rails的工具,用于执行Ajaxy操作(更新:现在已经作为WuWei开源) - 各种CL库,如cl-json,cl-smtp,md5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接