I'm trying to install cl-jupyter (A common-lisp kernel for Jupyter), and I can't make it work: when I open a new lisp notebook (or change the kernel of an existing notebook), it crashes after displaying the following messages:
[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.
Some details:
Jupyter
works fine with python (both 2x and 3x).sbcl
also seems to work fine (I'm just starting with common-lisp, so I might be missing something - but I can run code, and use asdf and quicklisp).- I installed it by running "
python3 ./install-cl-jupyter.py
". - My
.sbclrc
file now contains just "(load "~/quicklisp/setup.lisp")
".
System Information:
- OS: Linux 4.1.13-1-MANJARO x86_64 GNU/Linux
- Python 3.5.0
- SBCL 1.3.0
- Jupyter version 4.0.6
Some things I've tried:
The file ~/.ipython/kernels/lisp/kernel.json
contains:
{"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"}
All the paths are correct. When I run the same code manually:
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
(where "kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json" is an auto-generated file for a lisp-kernel that I saved), it "looks ok" (e.g. it runs, and waits with no errors).
I tried to do some quick debug-printing, and my best guess is that it crashes in src/shell.lisp
, in the line
(vbinds (identities sig msg buffers) (message-recv (shell-socket shell))
But again, I could be wrong. Since it kinda looks like it has something to do with communication, I made sure that zeromq is updated.
I'm not sure what's next besides learning some more lisp, and then come back to properly debug the code - but I was hoping to learn it using Jupyter :)
I'd appreciate any suggestions, Thanks.
format
call inmessage-recv
at the end ofsrc/message.lisp
? If it's not printed then it's probably some issue with zeromq. You can also try totrace
some functions, to narrow down where exactly the error occurs. – Dramaturgy*current-error-depth*
or*maximum-error-depth*
is not bound or not arealp
number. See: cs.utexas.edu/users/jared/Milawa/Support/sbcl/sbcl-1.0.29/src/… (though note that this is from a different version of sbcl) – Dramaturgy!COLD-INIT
isn't called: github.com/sbcl/sbcl/blob/… – Dramaturgy*maximum-error-depth*
is unbound: github.com/sbcl/sbcl/blob/… – Dramaturgy*maximum-error-depth*
that is unbound. Could you try to run with this modified version of sbcl, in order to confirm my guess? The code is to be found there: github.com/musteresel/sbcl/tree/… The only modification is insrc/code/cold-error.lisp
to split the case checking for corrupted error depth (which you can test via github if you don't trust me ;) ) – Dramaturgy