【问题标题】:How do I create a web application using LISP?如何使用 LISP 创建 Web 应用程序?
【发布时间】:2013-08-11 14:17:00
【问题描述】:

我有 C# 和 JavaScript 方面的经验,过去几年一直在使用 Node.js。基本上,我对这种环境非常有信心,但一种语言总是引起我的注意:LISP。鉴于 LISP 的最小语言概念,我发现它的表现力令人印象深刻且非常迷人。它基本上和 jQuery 一样:事半功倍;-)

不幸的是,我对 LISP 的体验或多或少是理论上的,有些只是在玩玩,而不是认真的编程。

现在我想改变这一点,但我绝对致力于 Web 应用程序开发(因此是 Node.js)。我的问题不是将 LISP 作为一门语言来学习,我的问题是我不知道从哪里以及如何开始使用 不是 基于控制台但基于 Web 的“Hello LISP world”应用程序.

所以,我的问题基本上是:如何在 LISP 中编写类似于以下 Node.js 应用程序的服务器端 Web 应用程序

var http = require('http');
http.createServer(function (req, res) {
  res.end('Hello world!');
}).listen(3000);

不需要大量的框架和额外的库和东西等等?

有经验的 LISP 程序员如何解决这个任务?有什么提示吗?

【问题讨论】:

  • 也许你应该考虑使用 CGI。
  • 嗯,是的,这可能是一个想法——尽管我不喜欢 CGI 的“插件”方法。但这可能是一个想法......感谢您指出这一点!
  • 你应该检查一下:stackoverflow.com/questions/556456/…
  • 谢谢,这看起来很有趣!
  • 如果 Emacs 是一个可接受的平台,请查看Elnode

标签: web-applications lisp common-lisp


【解决方案1】:

一旦您安装了SBCLQuicklisp

(ql:quickload "hunchentoot")
(hunchentoot:start 
  (make-instance 'hunchentoot:easy-acceptor :port 3000))
(hunchentoot:define-easy-handler (foo :uri "/bar") (name)
  (format nil "Hello~@[ ~A~]!" name))

然后访问

http://127.0.0.1:3000/bar?name=World

【讨论】:

    【解决方案2】:

    关于 Hunchentoot 的答案确实是一种入门方法,我完全建议尝试一下。

    与问题中的 node.js 变体的唯一主要区别是 Hunchentoot 是一个同步 Web 服务器。如果您想获得相同的异步行为(实际上,您为什么要这样做,但这是另一个讨论;),您必须尝试其他方法,例如wookie。类似的 Hello World 示例在其 documentation page 处提供。

    【讨论】:

    • 感谢 Wookie 的提及!我也会推荐 Hunchentoot 作为初学者。同步模型更容易缠绕您的头部约 5 倍。 Wookie 真正闪耀的地方是当您需要一个应用程序将不同的部分联系在一起时(通过 HTTP 调用内部或第 3 方 API、运行数据库查询、从 redis 获取值、将较大的作业排队到后台等等......任何需要网络 I/O)。除了编码/解码和传递数据之外,它并不意味着做很多“工作”。还要注意,缺乏异步驱动程序支持。您最喜欢的数据库可能不受支持(目前)
    【解决方案3】:

    作为对其他答案的补充,还有 ningle1 和 Caveman2,它们也有很好的记录。 Ningle 路由与 Sinatra/Flask 非常相似。

    【讨论】:

    • 我和穴居人玩得很开心。会推荐给任何人。
    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多