在Lisp中进行(大量)Web开发是否可行?[关闭]


99

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


2
取决于您所说的“实用”。可能的,是的。实际的,可能不是大多数。您是否打算托管您的网站?您是否要在自己的专用盒子中进行root控制?您愿意付出多少努力?
核心

Leonardo,我现在正在整理一本关于该主题的书,并希望获得对Lisp感兴趣的Web开发人员的反馈。如果您愿意,能否让我知道您使用Lisp的想法,以及您想在这本书中看到什么?vsedach@gmail.com
vsedach

@chris-我最近为我的一些副项目设置了Scheme托管;它比我想象的要容易-gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison 2012年

2
去读保罗·格雷厄姆的论文。我怀疑他在将LISP用于Web应用程序的讨论中会遗漏任何东西,而且他是一位出色的作家。paulgraham.com/avg.html他的主页是:paulgraham.com/index.html
Kelly S. French

各位Google员工:很棒的CL列表上有更多最新的答案。
Ehvince

Answers:


82

是的,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编写的:-)


1
而且这仅适用于普通口齿不清和仅一套工具...
Attila Lendvai 2009年


1
@MattBall woof。没错 嗥。
2013年

在互联网上,没有人能听到您的Lisp服务器尖叫声。
kd4ttc

31

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开源项目确实具有出色的社区支持。


19

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

如果您需要良好支持的Lisp工具,则需要付费。开源工具周围没有一个很大的社区,因此它们的文档/采用程度与Django on Python相同。

以下是一些商业Lisp产品:

还值得注意的是,Reddit最初是在Lisp中构建的,但是后来由于缺乏良好使用和记录在案的库,作者后来迁移到了Python。(链接


他确实说图书馆是“最大的问题”,但是在此之前他说“ reddit不能在我的Mac上运行”。当时,对于Mac,只有一个线程CL,无法运行其低级套接字代码。这听起来至少像是一个破坏交易者。

3
我是Lisp的忠实粉丝,它正在替我取代Python。但是我使用C ++。我可以找到其他可以理解Python原型的Python程序员,但是直到当前Lisp复兴取得更大的成功,我才能在工作中使用它而无休止地问“为什么不使用Python或Ruby?”
亚伦,

10

我无法与其他框架交流,但是我很幸运地将Hunchentoot用作Web服务器(它可以很好地运行,或者可以将其放在Apache后面)。真正使它发光的(可能会引起某些人的震惊)是库!

我真正喜欢在网络上使用CL的是,您可以在运行时对其进行调整。您始终可以启动并运行REPL服务器代码,然后可以连接到该REPL并更改或检查代码的工作方式,而无需停止任何操作。我已经在网站运行时重新定义了功能,下次调用该功能时,它只是选择了新代码并开始工作。


您是否知道可以使LISP与MongoDB建立接口的任何内容?
MadPhysicist

9

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

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

我不使用或不认可任何Web框架。我更喜欢通过使用设计模式将正交工具(David Lichteblau提到过一些不错的工具)组合在一起来构建Web应用程序,这种方式实际上适合于您正在构建的应用程序,这就是我推荐的方法。Common Lisp提供了很多这样的工具,并且提供了无与伦比的组合能力。

亚当·彼得森(Adam Petersen)去年发表了一篇出色的入门教程,介绍如何开始以这种风格构建Lisp Web应用程序:

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


8

我想一个人可以说“是”而不必费神。

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

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

  3. www.franz.com在自己的Web服务器(AllegroServer)和webframework(webactions)上运行

  4. 如果您有疑问,请检查Edi Weitz提供的常见Lisp软件包。他们通常工作。

因此,可以使用Common Lisp进行“严重的” Web编程。我目前还不确定要遵循一些Common Lisp路线或Ruby on Rails。我更喜欢.NET以外的任何东西。


4

保罗·格雷厄姆(Paul Graham)的公司Viaweb 在Common Lisp中编写了一种产品该产品随后成为Yahoo Shops。显然,雅虎随后用C ++重新编写了它。Lisp编程有很多Web资源。


1
如果有关Yahoo的说法是正确的,则有些人可能会认为这是CL作为网络语言的失败。但是我认为这是CL作为网络原型语言的成功。
gcbenison 2012年

3
保罗·格雷厄姆(Paul Graham)在《击败平均水平》的笔记中说:“ 2003年1月,雅虎发布了用C ++和Perl编写的新版本的编辑器。我很难说该程序是否不成功。不过,由于要将此程序转换为C ++,他们实际上不得不编写一个Lisp解释器:据我所知,所有页面生成模板的源文件仍然是Lisp代码。
protist 2013年

viaweb并不是使用通用Lisp进行原型化,而是可以用另一种语言c ++进行重写。由于他所说的各种显而易见的原因,语言能力,快速,是的原型制作和快速生产,他的生产者打算以Lisp的形式编写和运行它,他非常了解Lisp等。他们使用自己的版本运行它都是用Lisp写的,实际上部分是用Lisp写的。谣言一经获得,他们就已经将它重写了,我不确定。这是收购方的选择,甚至可能会陷入vbasic或pascal fortran中。
sçuçu


2

意见各不相同。普遍的看法是:更好地使用其他语言,或者使用其他Web堆栈,例如LAMP,.NET,Ruby on Rails,Java。Paul Liham著名的成功的Web项目是Paul Graham的ViaWebReddit最初是用Lisp实现的,但后来切换到了python。如果您决定使用Lisp,请尝试Seibel的书:Practical Common Lisp


1
您是否有可能在您的帖子中添加更多的FUD?
jrockway

@Yuval是正确的。这是常识。Reddit确实切换了。我认为该帖子询问的是这种常识背后是否有任何真理。
Steve Rowe

1
@jrockway和史蒂夫·罗(Steve Rowe)-出于某种原因,存在共同的智慧。我认为这不是FUD。自ViaWeb以来,我还没有听说过用LISP编写的成功网站。如果我错了,请纠正我。我认为应该根据编程语言的优点而不是意识形态来使用编程语言。
Yuval F,


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.