显然几乎可以用任何编程语言编写几乎任何类型的应用程序,尤其是像Lisp这样强大的应用程序(无论是Scheme还是Common Lisp)。但是将它用于Web开发是否可行?如果是这样,什么应该是一个很好的起点?哪里可以找到这种性质的项目的适当资源(工具,库,文档,最佳实践,示例等)?
答案 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应用程序的优秀入门教程:
答案 5 :(得分:8)
我认为没有多少人就可以说是的。
答案 6 :(得分:4)
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的ViaWeb。 Reddit最初是在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开发。