在 Mac、Windows 和 Linux 上使用 CFFI 和线程支持实现 Common Lisp?
目标:安装 Hunchentoot 并能够将 Hunchentoot 作为后台线程运行。
这就是我所做的:
- 安装 Common Lisp。
- 安装 Quicklisp。
(ql:quickload "hunchentoot")
(hunchentoot:start (make-instance 'hunchentoot:acceptor :port 4242))
最后一个命令应该启动 Hunchentoot,然后返回给解释器进一步的 Common Lisp 形式。
对于 CLISP、SBCL、ABCL、ECL 和 CCL,我得到以下两个结果之一:
- Hunchentoot 的依赖项 Bordeaux Threads 无法安装。
hunchentoot:start
挂起。网页永远不会加载,也永远不会出现 404 错误。
Goal: Install Hunchentoot and be able to run Hunchentoot as a background thread.
This is what I do:
- Install Common Lisp.
- Install Quicklisp.
(ql:quickload "hunchentoot")
(hunchentoot:start (make-instance 'hunchentoot:acceptor :port 4242))
The last command is supposed to start Hunchentoot, then return to the interpreter for further Common Lisp forms.
For CLISP, SBCL, ABCL, ECL, and CCL, I get one of two results:
- Hunchentoot's dependency Bordeaux Threads fails to install.
hunchentoot:start
hangs. The web page never loads, and never 404s.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
AFAIK CLISP 和 SBCL 的 win32 实现不支持多线程,而 Hunchentoot 依赖于此功能(依赖于 Bordeaux 线程)。 Hunchentoot 与 Clozure Common Lisp 配合良好。
AFAIK the win32 implementations of CLISP and SBCL don't support multiple threads whereas Hunchentoot depends on this feature (dependency to Bordeaux Threads). Hunchentoot works well with Clozure Common Lisp.
LispWorks 是 Hunchentoot 的设计平台,可在所有三种操作系统上使用。
LispWorks is the platform on which Hunchentoot was designed, and is available on all three operating systems.
Lispbox 提供了 CCL、CFFI、线程、Emacs 和 SLIME 的工作副本。 Quicklisp 和 Hunchentoot 工作得很好。目前还没有安装程序,但是该死的东西可以工作:)
Lispbox offers a working copy of CCL, CFFI, threads, Emacs, and SLIME. Quicklisp and Hunchentoot work well. There isn't an installer yet, but the darn thing works :)
无论操作系统如何,如果在 SBCL 中返回 nil,则需要启用线程:
启用线程:使用预编译的 SBCL,从源代码编译最新版本,但请注意有关启用线程的 INSTALL 说明。您将创建一个名为“customize-target-features.lisp”的文件来包含说明中给出的 lambda 表达式。 (提示:从分离的“屏幕”内进行编译,重定向到日志文件或类似文件,因为终端窗口可能会受到 I/O 限制,实际上会减慢编译速度。)
针对 Linux 预编译的 SBCL 已启用线程,但已预编译对于 MacOSX、FreeBSD 和 Windows 没有启用线程。这可能会随着未来的版本而改变。
我已经确认,在 MacOSX 10.6.6/x86-64 上使用当前版本的 SBCL(编译为启用线程)和 QuickLisp,您应该获得带有“Hunchentoot 1.1.1 (SBCL 1.0.46)”的“Hunchentoot 默认页面”在 localhost:4242”访问 http://localhost:4242/ 时。
Regardless of OS, if this returns nil in SBCL, you'll need to enable threads:
Enable threads: Using the pre-compiled SBCL, compile latest version from source, but note the INSTALL instructions on enabling threads. You'll create a file called "customize-target-features.lisp" to contain the lambda expression given in the instructions. (Tip: compile from within 'screen' detached, redirect to log file or similar since a Terminal window may become i/o bound and actually slow-down the compile.)
SBCL pre-compiled for Linux has threads enabled, but pre-compiled for MacOSX, FreeBSD and Windows are without threads enabled. This may change with future releases.
I've confirmed that using the current versions of SBCL (compiled to enable threads) and QuickLisp on MacOSX 10.6.6/x86-64, you should get the "Hunchentoot Default Page" with "Hunchentoot 1.1.1 (SBCL 1.0.46) at localhost:4242" when visiting http://localhost:4242/.