在Lisp中进行(严肃的)Web开发是否可行?
在几乎所有的编程语言中编写几乎任何types的应用程序显然是可能的,尤其是在像Lisp(Scheme或Common Lisp)这样强大的应用程序中。 但是将其用于Web开发是否实用? 如果是这样,那么应该是一个好的起点? 哪里可以find这种性质的项目的适当资源(工具,图书馆,文件,最佳实践,例子等)?
是的,Web开发是Common Lisp今天的优势之一。
-
作为一个Web服务器,使用Dr. Edmund Weitz以前称为tbnl的Hunchentoot。
您可以使用mod_proxy作为反向代理或作为独立服务器将其作为Apache的后端运行。
-
各种HTML生成解决scheme都可用,从PHP风格的模板到Lispmacros的黑客到XSLT。 只要你select。
HTML-TEMPLATE就是一个例子。
-
Closure XML可用于XMLparsing,序列化,XPath 1.0,XSLT 1.0。 HTML标签汤parsing还有Closure HTML。
(完全披露:我是Closure XML和Closure HTML的维护者。)
-
如果你喜欢, Parenscript可以让你的JavaScript经验,但你也可以自己写旧的JavaScript自己,当然。
jwacs中的另一个很酷的JavaScript增强解决scheme, 使用 Common Lisp编写,并转换JavaScript以添加延续支持。
-
除了服务器之外,Web服务项目可能还需要一个HTTP客户端。
Drakma是今天使用的图书馆。
PURI对URI操作很有用。
还有更多! 一个起点是cliki,例如cliki.net/web 。
在网上,没有人知道你的服务器是用Common Lisp编写的:-)
Common Lisp中的Web开发既有效又有趣。
一些例子:
CL-WHO允许您在不忘记结束标签的情况下编写HTML。
Weblocks允许您使用内置validation以声明方式定义表单:
(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开发框架。 看一下:
- networking锁 (Common Lisp)
- Compojure (Clojure)
如果你想要很好的支持lisp工具,那么你需要支付他们。 开源工具周围并没有一个非常大的社区,所以他们没有像Python上的Django那样的文档/采用。
这里有一些商业的lisp产品:
- Lispworks
- 弗朗兹Allegro CL
另外值得注意的是,Reddit最初是在Lisp中构build的,但后来作者转向Python,理由是缺乏使用良好的文档库。 ( 链接 )
我不能说其他的框架,但是我已经使用了Hunchentoot作为web服务器(它自己可以正常工作,或者你可以把它放在Apache后面 )。 真正让它发光的东西(这可能会让一些人感到震惊)是图书馆!
- 使用CL-WHO以lisp风格的语法编写毫不费力的HTML
- Parenscript允许您编写编译为javascript的代码
- 对于数据库连接使用Postmodern与PostgreSQL交谈
我真正喜欢在networking上使用CL的原因是你可以在运行时调整它。 您始终拥有一个REPL并运行您的服务器代码,然后您可以连接到该REPL并更改或检查代码的工作方式,而不必停止任何操作。 我在网站运行的时候重新定义了函数,下次调用这个函数的时候,它只是拾取新的代码并运行。
为了进一步帮助消除没有Lispnetworking框架的神话,这里还没有提到:
- 不常见的网站
- BKNR
- AllegroServe的联系人
显然,很多人似乎认为Lisp可以编写大量的Web框架。
我不使用或认可任何Web框架。 我更喜欢使用devise模式来组合正交工具(David Lichteblau提到的一些好的工具)来构buildWeb应用程序,这种方式实际上适合于您正在构build的应用程序,这就是我推荐的方法。 Common Lisp提供了大量这样的工具,以及将它们组合在一起的无与伦比的能力。
亚当·彼得森(Adam Petersen)发表了一篇优秀的入门教程,介绍如何在去年开始以这种风格构buildLisp Web应用程序:
我觉得可以说没有太多的哈哈。
-
第一个HTTP服务器之一是cl-http
-
DrScheme周围的计划人员花费了大量的时间:
-
http://www.franz.com运行在自己的Webserver(AllegroServer)和webframework(webactions);
-
如果您有疑问,请查看Edi Weitz的常见口译包。 他们通常工作。
所以有人可以用Common Lisp来进行“严肃”的networking编程。 我目前尚未决定遵循一些Common Lisp路由或Ruby on Rails。 我更喜欢任何.NET的….
Paul Graham的公司Viaweb在Common Lisp中写了一个产品 ,后来成为雅虎商店。 显然,雅虎随后用C ++重新编写了它。 Lisp编程有相当多的networking资源。
你可以在这个问题中find一些关于Lisp Web应用程序工具的东西。
也许值得有一个倾听堆栈溢出播客27 ,其中Reddit的人谈论他们的一个关于运行一个网站的Lisp(和他们的切换到Python)的经验。
看起来很多Orbitz 是或者是在LISP写的 。
意见不一。 常识是:更好地使用不同的语言,或者更好的使用不同的Web栈,比如LAMP,.NET,Ruby on Rails,Java。 着名的Lisp成功的Web项目是Paul Graham的ViaWeb 。 Reddit最初是在lisp中实现的,但后来改用python 。 如果您决定使用lisp,请尝试Seibel的书: Practical Common Lisp 。
看看Allegro Common Lisp。 它有一些库,包括一个Web服务器,专门用于Web开发。