在Lisp中进行(严肃的)Web开发是否可行?

时间:2009-02-17 11:50:26

标签: lisp

显然几乎可以用任何编程语言编写几乎任何类型的应用程序,尤其是像Lisp这样强大的应用程序(无论是Scheme还是Common Lisp)。但是将它用于Web开发是否可行?如果是这样,什么应该是一个很好的起点?哪里可以找到这种性质的项目的适当资源(工具,库,文档,最佳实践,示例等)?

11 个答案:

答案 0 :(得分:80)

是的,网络开发是Common Lisp今天的优势之一。

  • 作为网络服务器,请使用Edmund Weitz博士的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编写的: - )

答案 1 :(得分:30)

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开源项目实际上确实有很好的社区支持。

答案 2 :(得分:19)

有一些用于Web开发的Web框架。看看:

如果您需要得到良好支持的lisp工具,那么您需要为它们付费。围绕开源工具并没有一个非常大的社区,因此他们没有与Python上的Django相同级别的文档/采用。

以下是一些商业lisp产品:

还值得注意的是,Reddit最初是在Lisp中构建的,但作者后来迁移到Python,理由是缺乏使用良好且文档化的库。 (link

答案 3 :(得分:9)

我不能和其他框架说话,但是我使用Hunchentoot为网络服务器运气很好(它可以单独运行,或者你可以put it behind Apache)。真正令它闪耀的是(这可能会让一些人震惊)是图书馆!

我真正喜欢在网络上使用CL是因为你可以在运行时调整它。您总是有一个REPL并运行您的服务器代码,然后您可以连接到该REPL并更改或检查代码的工作方式,所有这些都无需停止任何操作。我在网站运行时重新定义了函数,下次调用函数时,它只是选取新代码并运行。

答案 4 :(得分:9)

为了进一步帮助消除没有Lisp Web框架的神话,这里有一些尚未提及的内容:

显然很多人似乎认为Lisp足以编写很多Web框架。

我不使用或支持任何Web框架。我更喜欢通过将正交工具(David Lichteblau提到一些好的工具)结合在一起来构建Web应用程序,使用的设计模式实际上适合您正在构建的应用程序,这就是我推荐的方法。 Common Lisp提供了大量此类工具,以及无与伦比的组合能力。

Adam Petersen去年发表了一篇关于如何以这种方式开始构建Lisp Web应用程序的优秀入门教程:

http://www.adampetersen.se/articles/lispweb.htm

答案 5 :(得分:8)

我认为没有多少人就可以说是的。

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

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

  3. www.franz.com在自己的Webserver(AllegroServer)和webframework(webactions)上运行

  4. 如果您有疑问,请查看Edi Weitz的常见lisp包。他们通常工作。

  5. 所以是的,可以使用Common Lisp进行“严肃”的网络编程。我个人目前尚未决定遵循一些Common Lisp路线或Ruby on Rails。我更喜欢.NET ......

答案 6 :(得分:4)

在Common Lisp中的

Paul Graham's公司Viaweb wrote a product随后成为雅虎商店。显然雅虎后来用C ++重写了它。 Lisp程序设计有很多网络资源。

答案 7 :(得分:2)

您可以在this question中找到有关Lisp Web应用程序工具的一些内容。

也许值得听一下Stack Overflow Podcast 27,Reddit的人们谈谈他们在Lisp上运行一个网站的经历(以及他们转向Python)。

答案 8 :(得分:2)

意见各不相同。常识是:更好地使用不同的语言,或者更确切地说是不同的Web堆栈,例如LAMP,.NET,Ruby on Rails,Java。 lisp中着名的成功网络项目是Paul Graham的ViaWebReddit最初是在lisp中实现的,但随后是switched to python。如果您决定使用lisp,请尝试使用Seibel的书:Practical Common Lisp

答案 9 :(得分:2)

看起来很像Orbitz was or is written in LISP

答案 10 :(得分:0)

看看Allegro Common Lisp。它有一些库,包括一个Web服务器,专门用于Web开发。