显然,几乎任何类型的应用程序都可以使用几乎任何编程语言来编写,特别是像 Lisp(无论是 Scheme 还是 Common Lisp)这样强大的语言。但是将其用于 Web 开发是否切实可行?如果是,什么是一个良好的起点?在哪里可以找到适合此类项目的正确资源(工具、库、文档、最佳实践、示例等)?
显然,几乎任何类型的应用程序都可以使用几乎任何编程语言来编写,特别是像 Lisp(无论是 Scheme 还是 Common Lisp)这样强大的语言。但是将其用于 Web 开发是否切实可行?如果是,什么是一个良好的起点?在哪里可以找到适合此类项目的正确资源(工具、库、文档、最佳实践、示例等)?
是的,Web开发是Common Lisp今天的优势之一。
作为Web服务器,使用Hunchentoot,这是由Edmund Weitz博士开发的原名为tbnl的解决方案。
您可以将其作为Apache的后端使用mod_proxy作为反向代理运行,也可以作为独立服务器运行。
有各种HTML生成解决方案可用,从PHP样式模板到Lisp宏技巧再到XSLT,任君选择。
HTML-TEMPLATE就是其中一个例子。
Closure XML可用于XML解析、序列化、XPath 1.0、XSLT 1.0。 还有Closure HTML可用于HTML标记解析。
(完全披露:我是Closure XML和Closure HTML的维护者。)
如果您喜欢,Parenscript可以使您的JavaScript体验更加Lisp风格,但当然您也可以自己编写普通的JavaScript代码。
另一个不错的JavaScript增强解决方案是jwacs,它是用Common Lisp编写的,并通过转换JavaScript以添加continuation支持。
Web服务项目可能需要HTTP客户端,除了服务器。
Drakma是今天用于此目的的库。
PURI有助于URI操作。
还有更多! 一个起点是cliki,例如cliki.net/web。
使用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开源项目都拥有优秀的社区支持。
有一些用于Web开发的Web框架,可以看看以下内容:
如果您想要得到良好支持的Lisp工具,则需要付费。因为开源工具周围的社区并不是很大,所以它们的文档和采用程度都没有像Python上的Django那样高。
以下是一些商业Lisp产品:
值得注意的是,Reddit最初是用Lisp构建的,但作者后来迁移到Python,原因是缺乏使用广泛和有文档的库。 (链接)
我无法评论其他框架,但是我使用Hunchentoot作为Web服务器非常成功(它可以独立运行,或者您可以将其放在Apache后面)。真正使其突出的是库!
我喜欢在Web上使用Common Lisp的原因是,您可以在运行时调整它。您始终拥有一个REPL来运行服务器代码,然后可以连接到该REPL并更改或检查代码的工作方式,而无需停止任何内容。我曾经在站点正在运行时重新定义函数,下一次调用该函数时,它只需要选择新代码并运行。
Paul Graham的公司Viaweb 写了一个产品,用Common Lisp编写,随后成为了Yahoo商店。显然,Yahoo后来将它重写为C++。有相当多的网络资源可供Lisp编程使用。