Lisp 与现代 Web 开发

2015-08-25 06:05:03 +08:00
 vitovan

"Lisp 不是一门语言,它是一种构建素材。"

- 艾伦·凯

本文将介绍如何从零开始使用 Lisp 作为后端构建一个现代的 Web 应用程序。

从 Lisp 诞生至今已有 57 年,半个多世纪。什么概念呢?除了 Fortran 没有谁比 Lisp 更古老了,而很少有人说 Fortran 很酷。

你可以在几乎所有的语言当中看到 Lisp 的影子,因为真的: Lisp 不是一门语言,她是人机对话的基本元素。

敬请阅读: http://vitovan.com/lispweb3-cn.html

10437 次点击
所在节点    程序员
43 条回复
usapla
2015-08-25 12:06:57 +08:00
我在 “面向世界的编程”部分遇到困难,我用的是 win7PC64 位系统,然后安装 quicklisp.lisp 部分是用 “ sbcl -- load quicklisp.lisp ”命令来执行的,然后执行后,按照提示继续安装。等运行 “ server.lisp ”部分一直提示缺少 libssl32.dll 文件,我把这个缺失文件放到 system32 里, 还是提示缺失,真是头痛
vitovan
2015-08-25 12:11:34 +08:00
phoenixlzx
2015-08-25 12:15:55 +08:00
好书好书 www mark 一下
liuxu
2015-08-25 12:53:05 +08:00
酷毙了
jadecoder
2015-08-25 17:36:33 +08:00
放进 pocket 里了,今晚地铁看
Rand01ph
2015-08-25 18:23:00 +08:00
一直支付出错。。。真是难
vitovan
2015-08-25 19:12:00 +08:00
@Rand01ph

抱歉,麻烦了。

如果实在不行,可以尝试英文版:

https://www.gitbook.com/book/vitovan/lispweb3/welcome
bian
2015-08-25 21:27:31 +08:00
楼主还是将 lisp 改成 common lisp 吧。毕竟 lisp 有很多方言。。。
bramblex
2015-08-26 01:44:55 +08:00
吃豆人哪个是指 Currying 的过程吗?很有意思啊
Rico
2015-08-26 13:24:48 +08:00
通过一个叫田春冰河的人知道了这门语言
像是上古时期的一门法术
脑洞一开,觉得掌握不同语言的程序员就像是会不同属性的技能的法师。 Some one like Gandalf
nareix
2015-08-26 13:25:26 +08:00
@kainwen 正解啊。 lisp 这种纯语法树的,在当时看来发明轮子很容易,但现在轮子已经比当初完善多了。比如 React/angular 等等。
3b295
2015-08-26 14:30:06 +08:00
《黑客与画家》是在高三看得。当时还到处和别人吹鼓 lisp 。试下用 lisp 造一下东西,应该更能体会 lisp 吧。
yannxia
2015-08-26 14:52:04 +08:00
很多年前, LISP 就和 Java 一样火,甚至于更火,现在呢?
a15819620038
2015-08-26 16:54:02 +08:00
@vitovan Hello ,谢谢你提供的资源,内容很好简单。

但我按照你书本里面的内容走,发现除了 / 能访问之外,其它带 uri 的例子都是 404 ,请问这个问题是?
vitovan
2015-08-26 17:11:40 +08:00
@a15819620038 哈!那...... 能再详细一些么? 环境?步骤?
a15819620038
2015-08-26 17:19:20 +08:00
@vitovan
> sbcl --version
SBCL 1.1.6.0-3c5581a

JSON 的那个例子(之前那个 /hello 例子同样 404 ),代码都是复制进去的。

访问 /, 200
```
"GET / HTTP/1.1" 200 393 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4 ) AppleWebKit/537.36 (KHTML, like Gecko ) Chrome/44.0.2403.157 Safari/537.36"
```

访问 /me , 404
```
"GET /me HTTP/1.1" 404 303 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4 ) AppleWebKit/537.36 (KHTML, like Gecko ) Chrome/44.0.2403.157 Safari/537.36"
```
vitovan
2015-08-26 18:01:26 +08:00
@a15819620038 如果 /hello 404 的话, JSON 的就更不用考虑了。

你用的是什么系统?
a15819620038
2015-08-26 19:29:23 +08:00
@vitovan Mac OS X 10_9_4 ,谢谢你的帮助
vitovan
2015-08-26 21:39:58 +08:00
@a15819620038 你说 “代码都是复制进去的“,指的是直接复制到 REPL 里面然后回车的么? 还是用的加载文件的形式?

---
先把 Hello 搞出来再说,试试启动 sbcl 之后,直接在 REPL 内执行以下代码:

(ql:quickload :hunchentoot )
(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242 ))
(hunchentoot:define-easy-handler (say-hello :uri "/hello") (name )
(setf (hunchentoot:content-type*) "text/plain")
(format nil "嘿, ~a! 我是 Vito! ~%我刚刚用 Lisp 建了个网站!" name ))
a15819620038
2015-08-26 22:55:21 +08:00
@vitovan Hi ,谢谢你的回答,我解决了 O (∩_∩)O 。

创建 handler 的代码需要在运行服务监听端口代码之前:

```
;; 调换一下位置
(hunchentoot:define-easy-handler (say-hello :uri "/hello") (name )
(setf (hunchentoot:content-type*) "text/plain")
(format nil "嘿, ~a! 我是 Vito! ~%我刚刚用 Lisp 建了个网站!" name ))

(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242 ))
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/215726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX