Common Lisp中的Web开发

6
我对Scheme有一定的了解。我正在阅读《OnLisp》,并希望能够在其中进行一个真实的项目,最可能是网站开发。我想知道人们用什么样的设置来开发lisp网站。我在家里有几台Mac电脑,我想使用Clozure CL。但我有些担心。我在互联网上读到,CL没有可靠的线程设施和良好的网络功能。这是真的吗?你的经验如何?
PS:不要告诉我关于Clojure的事情 :). Lisp是我需要解决的问题。

此外,大多数网络应用程序似乎有点过时。我并不是在说“哈哈..看啊..没衣服”,但有人能告诉我为什么会这样吗,或者给我一个反例吗?此外,是否有任何Lisp到JavaScript的翻译器? Lisp在前端方面有任何帮助吗? - Ravi
我怀疑这是一个社交问题。由于Lisp程序员相对较少,基于Lisp的Web应用程序通常没有太多的贡献者。因此,开发人员往往需要专注于完成基础工作,而忽略了像华丽的AJAX功能之类的东西。 - Matthias Benkard
给Google的同事们:我建议重新审视一下这个令人惊叹的Common Lisp列表! - Ehvince
4个回答

8

目前我正在使用Restas,这是一个基于Hunchentoot并受到Rails路由系统启发的框架。我还使用PostmodernPostgreSQL数据库进行交互,并使用cl-markup生成HTML,尽管我正在考虑切换到cl-who,因为它看起来更加可定制。

当我开始时,我也考虑使用Parenscript生成JavaScript,但现在我只是用Mootools和普通的JavaScript就很满意了。

所有内容都在SBCL上运行,并且可以通过Quicklisp获得。


Parenscript 看起来很有趣。你的设置看起来很全面。谢谢。 - Ravi
1
我已经使用Restas有一段时间了。我为什么喜欢它:1)顾名思义,它鼓励RESTful设计;2)它很简单,如果你按照MVC的方式思考,它基本上只是C部分,并且做得非常好;3)它非常灵活;4)我发现它的路由概念优于Django使用正则表达式进行调度的方式(尽管我认为它从Rails那里得到了这个好主意);5)你可以将站点结构化为模块,然后在特定的URL上挂载它们,同样优于Django在项目中组织应用程序或使用url.py文件的意大利面条式方法;6)它是Lisp :) - Pavel Penev

6

不确定为什么它不会有“良好的网络”;如果你想编写便携式的Common Lisp应用程序,就不能依赖于线程,因为某些实现不支持它们(据我所知,只有clisp,尽管你可以使用实验性线程支持进行编译)。如果你计划选择一个实现并坚持使用它,你就不会遇到这个问题。

“标准”的CL Web堆栈是Hunchentoot/cl-who/clsql,尽管你可以找到在AraneidaPortable AllegroServe上运行的教程。

我使用的设置是Debian/SBCL运行quicklisp和上述系统以及MySQL(尽管我正在认真考虑跳转到Postgres)用于数据库和nginx在Hunchentoot前面运行,提供任何静态内容。


我曾尝试在 Mac 上使用 SBCL,但是当我尝试加载 weblocks 时出现了“线程禁用”错误。我启用了线程,但它仍然显示相同的错误 : ) 总之,我现在将坚持使用 Clozure。感谢您提供的所有信息。我认为这是一个不错的开始。 - Ravi
在我的经验中,SBCL和Clozure CL的行为非常相似,因此使用后者不太可能引起任何问题。例如,我倾向于在Mac OS X上使用Clozure CL,在GNU/Linux上使用SBCL,但我尚未在两者之间遇到任何可移植性问题。(当然,CLISP和ECL是另一回事,但在编写Web应用程序时,我只是忽略它们的存在。:)) - Matthias Benkard
顺便提一下,在这个答案中提到的库之外,我建议您考虑使用Postmodern来满足您的数据库需求。我发现它非常灵活和可预测。 - Matthias Benkard
听到SBCL和Clozure的消息很不错。我在考虑是否应该购买一个Linux电脑,但我会推迟这个决定,直到遇到性能问题为止。 - Ravi
配置clsql很痛苦,而且需要很长时间(特别是如果您在多个平台和实现上使用它,就像我一样)。相比之下,postmodern(使用PostgreSQL)在所有平台/实现组合上“只需工作”,并直接通过TCP/IP与服务器通信,与使用CFFI/UFFI的clsql形成对比,有时需要额外的库,有时Unicode不起作用(而且您找不到在线帮助,我试过了),因此Postmodern更可靠。我从真实的经验中说话,因为我两者都商业使用过。 - Luka Ramishvili

3

2
Common Lisp中的“网络”问题是,CL标准中没有套接字,因此每个实现都有自己的套接字API。虽然我们试图创建通用接口,例如usocket,但这些尝试并不太成功。您可以在这里找到一些与网络相关的软件包列表。
如果您需要一个Web框架,请尝试使用Caveman。我还没有使用过它,但它看起来像是我见过的最完整的CL Web框架。

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