很显然,几乎可以使用任何编程语言编写几乎任何类型的应用程序,尤其是使用Lisp这样强大的语言(无论是Scheme还是Common Lisp)。但是将其用于Web开发是否可行?如果是这样,什么是一个好的起点?在哪里可以找到此类项目的适当资源(工具,库,文档,最佳实践,示例等)?
很显然,几乎可以使用任何编程语言编写几乎任何类型的应用程序,尤其是使用Lisp这样强大的语言(无论是Scheme还是Common Lisp)。但是将其用于Web开发是否可行?如果是这样,什么是一个好的起点?在哪里可以找到此类项目的适当资源(工具,库,文档,最佳实践,示例等)?
Answers:
是的,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的维护者。)
如果您愿意,请旁写可以使您的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,如果浏览器不支持AJAX,则会退回到普通链接。
cl-prevalence是SQL的一种非常简单的替代方法。
最近,有很多人将这些技术用于关键任务应用-取得了成功。
实际上,最重要的CL开源项目确实具有出色的社区支持。
有一些用于Web开发的Web框架。看一下:
如果您需要良好支持的Lisp工具,则需要付费。开源工具周围没有一个很大的社区,因此它们的文档/采用程度与Django on Python相同。
以下是一些商业Lisp产品:
还值得注意的是,Reddit最初是在Lisp中构建的,但是后来由于缺乏良好使用和记录在案的库,作者后来迁移到了Python。(链接)
我无法与其他框架交流,但是我很幸运地将Hunchentoot用作Web服务器(它可以很好地运行,或者可以将其放在Apache后面)。真正使它发光的(可能会引起某些人的震惊)是库!
我真正喜欢在网络上使用CL的是,您可以在运行时对其进行调整。您始终可以启动并运行REPL服务器代码,然后可以连接到该REPL并更改或检查代码的工作方式,而无需停止任何操作。我已经在网站运行时重新定义了功能,下次调用该功能时,它只是选择了新代码并开始工作。
为了进一步帮助消除没有Lisp Web框架的神话,这里有一些尚未提及的框架:
显然,很多人似乎认为Lisp足以编写很多Web框架。
我不使用或不认可任何Web框架。我更喜欢通过使用设计模式将正交工具(David Lichteblau提到过一些不错的工具)组合在一起来构建Web应用程序,这种方式实际上适合于您正在构建的应用程序,这就是我推荐的方法。Common Lisp提供了很多这样的工具,并且提供了无与伦比的组合能力。
亚当·彼得森(Adam Petersen)去年发表了一篇出色的入门教程,介绍如何开始以这种风格构建Lisp Web应用程序:
保罗·格雷厄姆(Paul Graham)的公司Viaweb 在Common Lisp中编写了一种产品,该产品随后成为Yahoo Shops。显然,雅虎随后用C ++重新编写了它。Lisp编程有很多Web资源。
您可以在此问题中找到有关Lisp Web应用程序工具的一些知识。
也许还应该听听Stack Overflow Podcast 27,在Reddit上,他们谈论了他们在Lisp上运行网站的经验(以及他们转向Python)。
意见各不相同。普遍的看法是:更好地使用其他语言,或者使用其他Web堆栈,例如LAMP,.NET,Ruby on Rails,Java。Paul Liham著名的成功的Web项目是Paul Graham的ViaWeb。Reddit最初是用Lisp实现的,但后来切换到了python。如果您决定使用Lisp,请尝试Seibel的书:Practical Common Lisp。
看起来很多Orbitz 以前是用LISP编写的。
看看Allegro Common Lisp。它具有一些库,包括一个专门用于Web开发的Web服务器。