【问题标题】:Is it feasible to do (serious) web development in Lisp? [closed]在 Lisp 中进行(严肃的)Web 开发是否可行? [关闭]
【发布时间】:2010-10-08 01:45:33
【问题描述】:

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

【问题讨论】:

  • 取决于您所说的“实用”。可能,是的。实用,可能不适合大多数人。您打算托管您的网站吗?您是否要操作自己的专用盒子,在那里您将拥有根控制权?你愿意为此付出多少努力?
  • Leonardo,我现在正在整理一本关于这个主题的书,并希望从对 Lisp 感兴趣的 Web 开发人员那里获得反馈。如果你愿意,你能告诉我你是如何想到使用 Lisp 的,以及你想在这本书中看到什么吗? vsedach@gmail.com
  • @chris - 我最近为我的一些副项目设置了 Scheme 托管;这比我想象的要容易 - gcbhacks.dreamhosters.com/scheme-web-apps
  • 去阅读 Paul Graham 的文章吧。我怀疑他在讨论将 LISP 用于 Web 应用程序时遗漏了什么,而且他是一位伟大的作家。 paulgraham.com/avg.html他的主页是:paulgraham.com/index.html
  • 谷歌同事:awesome CL 列表中有更多和最新的答案。

标签: lisp


【解决方案1】:

Paul Graham's company Viaweb wrote a product 在 Common Lisp 中,后来成为 Yahoo Shops。显然,雅虎随后用 C++ 重新编写了它。 Lisp 编程有很多网络资源。

【讨论】:

  • 如果Yahoo 是这样,有些人可能会认为这是CL 作为一种网络语言的失败。但我认为它是 CL 作为网络原型语言的成功。
  • 我几乎不会认为重写失败,正如 Paul Graham 在 Beating the Averages 的笔记中所说的那样:“2003 年 1 月,雅虎发布了用 C++ 和 Perl 编写的编辑器的新版本。它是不过,很难说这个程序是否不再用 Lisp 编写,因为要将这个程序翻译成 C++,他们实际上必须编写一个 Lisp 解释器:据我所知,所有页面生成模板的源文件仍然是, Lisp 代码。”
  • viaweb 没有在 common lisp 中进行原型化,以便用另一种语言 c++ 重写。由于他陈述的各种明显原因,语言能力,快速,是的原型设计和快速生产,它的生产者打算用 lisp 编写和运行它,他非常了解 lisp 等等。他们用他们的版本运行它已经用 lisp 写过,其中一部分实际上是用 lisp 编写的。在ahoo获得它之后,他们根据传闻重写了它,我不确定。这是收购方的选择,你甚至可以用 vbasic 或 pascal fortran 编写。
【解决方案2】:

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

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

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

Adam Petersen 去年发布了一篇出色的入门教程,介绍了如何开始以这种风格构建 Lisp Web 应用程序:

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

【讨论】:

    【解决方案3】:

    我无法与其他框架交谈,但我很幸运将Hunchentoot 用于网络服务器(它自己运行良好,或者您可以put it behind Apache)。真正让它大放异彩的是图书馆(这可能会让一些人感到震惊)!

    我真正喜欢将 CL 用于 Web 的地方在于,您可以在它运行时对其进行调整。您总是有一个 REPL 启动并运行您的服务器代码,然后您可以连接到该 REPL 并更改或检查代码的工作方式,而无需停止任何事情。我在网站运行时重新定义了函数,下次调用该函数时,它会简单地获取新代码并开始工作。

    【讨论】:

    • 你知道任何可以让 LISP 与 MongoDB 交互的东西吗?
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        是的,Web 开发是当今 Common Lisp 的优势之一。

        • 作为 Web 服务器,请使用 Edmund Weitz 博士的 Hunchentoot,以前称为 tbnl。

          您可以使用 mod_proxy 作为反向代理或作为独立服务器将其作为 Apache 的后端运行。

        • 提供各种 HTML 生成解决方案,从 PHP 样式模板到 Lisp 宏 hack 再到 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 编写的 :-)

        【讨论】:

        • 这仅适用于普通的lisp,并且只有一套工具......
        • @MattBall 汪汪。是的。嚎叫。
        • 在互联网上没有人能听到你的 lisp 服务器的尖叫声。
        【解决方案7】:

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

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

        这里有一些商业 lisp 产品:

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

        【讨论】:

        • 他确实说库是“最大的问题”,但在此之前他说“reddit 无法在我的 Mac 上运行”;当时,Mac 只有一个线程化的 CL,无法运行他们的低级套接字代码。这听起来至少是一个破坏交易的因素。
        • 我是 Lisp 的忠实粉丝,它正在取代我的 Python。但我在 C++ 中工作。我可以找到其他会理解 Python 原型的 Python 程序员,但在目前的 Lisp 复兴取得更大成功之前,我无法在工作中使用它,而没有无休止的问题“你为什么不使用 Python 或 Ruby?”
        【解决方案8】:

        我认为可以毫不费力地说“是”。

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

        2. DrScheme 周围的人在这方面花费了大量时间:

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

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

        所以是的,可以使用 Common Lisp 进行“严肃的”网络编程。就我而言,我目前尚未决定遵循一些 Common Lisp 路线或 Ruby on Rails。我更喜欢两者都胜过 .NET....

        【讨论】:

          【解决方案9】:

          意见不一。普遍的看法是:最好使用不同的语言,或者更确切地说是不同的 Web 堆栈,例如 LAMP、.NET、Ruby on Rails、Java。在 lisp 中著名的成功 Web 项目是 Paul Graham 的 ViaWebReddit 最初是在 lisp 中实现的,但后来是 switched to python。如果你决定使用 lisp,试试 Seibel 的书:Practical Common Lisp

          【讨论】:

          • 您是否有机会在您的帖子中添加更多 FUD?
          • @Yuval 是对的。这是普遍的智慧。 Reddit 确实切换了。我认为这篇文章是在询问这种普遍智慧背后是否有任何真相。
          • @jrockway 和 Steve Rowe - 共同智慧的存在是有原因的。我不认为这是 FUD。自 ViaWeb 以来,我还没有听说过用 LISP 编写的成功网站。如果我错了,请纠正我。我认为应该根据自己的优点而不是意识形态来使用编程语言。
          【解决方案10】:

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

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

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              猜你喜欢
              • 2010-11-12
              • 1970-01-01
              • 1970-01-01
              • 2015-02-25
              • 2023-03-25
              • 1970-01-01
              • 1970-01-01
              • 2012-01-10
              • 2017-04-21
              相关资源
              最近更新 更多