我正在尝试安装克鲁比特 (用于木星的通用lisp内核),但无法工作:当我打开一个新的lisp笔记本(或更改现有笔记本的内核)时,它会在显示以下消息后崩溃:
[I 18:26:50.855 NotebookApp] Kernel started: ccba815a-9065-4fad-9d95-06f6291136d2
To load "cl-jupyter":
Load 1 ASDF system:
cl-jupyter
; Loading "cl-jupyter"
...............
cl-jupyter: an enhanced interactive Common Lisp REPL
(Version 0.7 - Jupyter protocol v.5.0)
--> (C) 2014-2015 Frederic Peschanski (cf. LICENSE)
kernel configuration = ((hb_port . 58864) (shell_port . 37462)
(transport . tcp) (iopub_port . 43232)
(signature_scheme . hmac-sha256) (control_port . 52184)
(stdin_port . 45879)
(key . 2ae7d65f-65f9-40d8-bfd4-21760eaec0ca)
(ip . 127.0.0.1))
[Hearbeat] starting...
[Heartbeat] thread started
[Heartbeat] thread started
[Kernel] Entering mainloop ...
[Shell] loop started
Argh! corrupted error depth, halting
fatal error encountered in SBCL pid 24605(tid 140737353922304):
%PRIMITIVE HALT called; the party is over.一些细节:
Jupyter可以很好地处理python ( 2x和3x)。sbcl似乎也运行得很好(我刚刚开始使用公共lisp,所以我可能遗漏了一些东西--但我可以运行代码,并使用asdf和quicklisp)。python3 ./install-cl-jupyter.py".来安装它.sbclrc文件现在只包含"(load "~/quicklisp/setup.lisp")“。系统信息:
有些事我试过了:
文件~/.ipython/kernels/lisp/kernel.json包含:
{"argv": ["sbcl", "--non-interactive", "--load", "/home/myusername/lisp/systems/cl-jupyter/cl-jupyter.lisp", "/homemyusername/lisp/systems/cl-jupyter/src", "/home/myusername/lisp/systems/cl-jupyter", "{connection_file}"], "display_name": "SBCL Lisp", "language": "lisp"}所有的道路都是正确的。当我手动运行相同的代码时:
sbcl --non-interactive --load "/home/myusername/lisp/systems/cl-jupyter/cl-jupyter.lisp" "/homemyusername/lisp/systems/cl-jupyter/src" "/home/myusername/lisp/systems/cl-jupyter" kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json(其中"kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json“是我保存的lisp内核的自动生成文件),它看起来”正常“(例如,它运行,等待时没有错误)。
我试着做一些快速的调试-打印,我最好的猜测是它在src/shell.lisp中崩溃,在行中。
(vbinds (identities sig msg buffers) (message-recv (shell-socket shell))但我可能又错了。因为它看起来有点像与通信有关,所以我确保了zeromq的更新。
除了学习更多的lisp之外,我不知道下一步是什么,然后再回来正确地调试代码--但是我希望通过木星来学习它:)
如有任何建议,我将不胜感激,谢谢。
发布于 2016-05-09 02:55:35
此问题是由于0MQ版本4.1.x中的消息结构zmq_msg_t的大小从4.0.x版本中的32字节更改为64字节造成的。
cl-jupyter使用的0MQ接口库是pzmq,并且声明该库支持最高版本为4.0的0MQ。在撰写本文时,pzmq使用了32字节的0MQ消息大小。如果安装了0MQ版本4.1.x,这将导致内部错误。
这里有两个解决方案:
pzmq在c-api.lisp中的定义从32字节更新到64字节来修复c-api.lisp库。更新-2016年5月9日
对pzmq库进行了更新,以支持0MQ版本4.1.x (保持与旧版本的兼容性)。新版pzmq计划作为2016年5月Quicklisp发行版的一部分发布。
更新-2016年6月1日
2016年5月的Quicklisp版本包括对解决此问题的pzmq库的更新。降级的0MQ或修改pzmq库不再是必要的。
https://stackoverflow.com/questions/34093656
复制相似问题