显然几乎可以用任何编程语言编写几乎任何类型的应用程序,尤其是像Lisp这样强大的应用程序(无论是Scheme还是Common Lisp).但是将它用于Web开发是否可行?如果是这样,什么应该是一个很好的起点?哪里可以找到这种性质的项目的适当资源(工具,库,文档,最佳实践,示例等)?
是的,Web开发是Common Lisp今天的优势之一.
作为Web服务器,使用Hunchentoot,原名tbnl,埃德蒙博士韦茨.
您可以使用mod_proxy作为反向代理或作为独立服务器将其作为Apache的后端运行.
提供各种HTML生成解决方案,从PHP风格的模板到Lisp宏黑客到XSLT.请随便挑选.
HTML-TEMPLATE就是一个例子.
Closure XML可用于XML解析,序列化,XPath 1.0,XSLT 1.0.还有用于HTML标签汤解析的Closure HTML.
(完全披露:我是Closure XML和Closure HTML的维护者.)
如果您愿意,Parenscript可以让您的JavaScript体验更加轻松,但您当然也可以自己编写简单的旧JavaScript.
jwacs中另一个很酷的JavaScript增强解决方案,它使用Common Lisp编写并转换JavaScript以添加延续支持.
除服务器外,Web服务项目可能还需要HTTP客户端.
Drakma是今天使用的图书馆.
PURI对URI操作很有用.
还有更多!一个起点是cliki,例如cliki.net/web.
在网上,没有人知道你的服务器是用Common Lisp编写的:-)
Common Lisp中的Web开发既有效又有趣.
一些例子:
CL-WHO允许您在不忘记结束标记的情况下编写HTML.
Weblocks允许您使用内置验证以声明方式定义表单:
(defview signup (:type form :caption "Sign up") (username :satisfies #'valid-username) (password :present-as dual-password :parse-as dual-password) (receive-newsletter-p :present-as checkbox :parse-as predicate))
它还以全自动方式支持AJAX,如果浏览器不支持,则回退到普通链接.
cl-prevalence是一种非常简单的SQL替代方案.
最近有很多人将这些技术用于任务关键型应用程序 - 并取得了成功.
事实上,最重要的CL开源项目确实有很好的社区支持.
有一些用于Web开发的Web框架.看一下:
Weblocks(Common Lisp)
Compojure(Clojure)
如果您需要得到良好支持的lisp工具,那么您需要为它们付费.围绕开源工具并没有一个非常大的社区,因此他们没有与Python上的Django相同级别的文档/采用.
以下是一些商业lisp产品:
Lispworks
Franz Allegro CL
值得注意的是,Reddit最初是在Lisp中构建的,但作者后来迁移到Python,理由是缺乏使用良好且文档化的库.(链接)
我不能和其他框架说话,但是我很幸运使用Hunchentoot作为网络服务器(它本身可以正常工作,或者你可以把它放在Apache之后).真正令它闪耀的是(这可能会让一些人震惊)是图书馆!
使用CL-WHO以lisp风格的语法编写轻松的HTML
Parenscript允许您编写编译为javascript的代码
对于数据库连接,使用Postmodern与PostgreSQL交谈
我真正喜欢在网络上使用CL的是你可以在运行时调整它.您总是有一个REPL并运行您的服务器代码,然后您可以连接到该REPL并更改或检查代码的工作方式,所有这些都无需停止任何操作.我在网站运行时重新定义了函数,下次调用函数时,它只是选取新代码并运行.
为了进一步帮助消除没有Lisp Web框架的神话,这里有一些尚未提及的:
UnCommon Web
BKNR
AllegroServe的Webactions
显然很多人似乎认为Lisp足以编写很多Web框架.
我不使用或认可任何Web框架.我更喜欢通过将正交工具(David Lichteblau提到一些好的工具)结合在一起来构建Web应用程序,使用的设计模式实际上适合您正在构建的应用程序,这就是我推荐的方法.Common Lisp提供了大量此类工具,以及无与伦比的组合能力.
亚当·彼得森(Adam Petersen)去年发表了一篇关于如何以这种方式开始构建Lisp Web应用程序的优秀入门教程:
http://www.adampetersen.se/articles/lispweb.htm
我想没有多少人就可以说是的.
第一个HTTP服务器之一是cl-http
DrScheme周围的计划人员花费了大量时间:
www.franz.com运行在他们自己的Webserver(AllegroServer)和webframework(webactions)上
如果您有疑问,请查看Edi Weitz的常见lisp包.他们通常工作.
所以是的,可以使用Common Lisp进行"严肃"的网络编程.我个人目前尚未决定遵循一些Common Lisp路线或Ruby on Rails.我更喜欢任何.NET ....