在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://www.adampetersen.se/articles/lispweb.htm

我觉得可以说没有太多的哈哈。

  1. 第一个HTTP服务器之一是cl-http

  2. DrScheme周围的计划人员花费了大量的时间:

  3. http://www.franz.com运行在自己的Webserver(AllegroServer)和webframework(webactions);

  4. 如果您有疑问,请查看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开发。