Юпитер и Лисп

Я пытаюсь установить cl-jupyter (ядро с общим lisp для Jupyter), и я не могу заставить его работать: когда я открываю новый ноутбук 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 отлично работает с питоном (как 2x, так и 3x).
  • sbcl также, кажется, работает нормально (я только начинаю с common-lisp, поэтому я могу что-то упустить - но я могу запустить код и использовать asdf и quicklisp).
  • Я установил его, запустив python3 ./install-cl-jupyter.py ".
  • мой .sbclrc Файл теперь содержит только (load "~/quicklisp/setup.lisp") ".

Системная информация:

  • ОС: Linux 4.1.13-1-MANJARO x86_64 GNU / Linux
  • Python 3.5.0
  • SBCL 1.3.0
  • Jupyter версия 4.0.6

Некоторые вещи, которые я пробовал:

Файл ~/.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, а затем вернуться, чтобы правильно отладить код - но я надеялся изучить его, используя Jupyter:)

Буду признателен за любые предложения, спасибо.

1 ответ

Решение

Эта проблема вызвана изменением размера структуры сообщения, zmq_msg_t, в 0MQ версии 4.1.x до 64 байтов с размером 32 байта в версии 4.0.x.

Библиотека интерфейса 0MQ, используемая cl-jupyter является pzmqи эта библиотека поддерживает 0MQ до версии 4.0. На момент написания этой статьи pzmq использует размер сообщения 0MQ 32 байта. Это приводит к внутренним ошибкам, если установлена ​​версия 0MQ 4.1.x.

Здесь есть два решения:

  1. Понизьте версию 0MQ до версии 4.0.x
  2. Исправить pzmq библиотека путем обновления определения msg% в c-api.lisp от 32 до 64 байт.


Обновление - 9 мая 2016

pzmq Библиотека была обновлена ​​для поддержки 0MQ версии 4.1.x (с сохранением совместимости со старыми версиями). Новая версия pzmq планируется к выпуску в рамках выпуска Quicklisp в мае 2016 года.


Обновление - 1 июня 2016 г.

Релиз Quicklisp за май 2016 года включает обновления pzmq библиотека, которая решает эту проблему. Понижение уровня 0MQ или модификации pzmq библиотека больше не нужна.

Другие вопросы по тегам