Автодок слизи в обычном режиме REPL - PullRequest
0 голосов
/ 10 ноября 2011

Я использую SLIME и EMACS для Common LISP с компилятором SBCL.Функция Autodoc в SLIME, где аргументы функции отображаются в минибуфере, работает нормально.

Но когда я выполняю пользовательский REPL, как показано ниже:

(defun game-repl ()
  (let ((cmd (game-read)))
    (unless (eq (car cmd) 'quit)
      (game-print (game-eval cmd))
      (game-repl))))

Функция Autodoc неработать больше.Не в буферах LISP и не в моих пользовательских REPL.Возможно, потому что процесс SBCL занят моим REPL (ожиданием ввода) и не может связаться с SLIME.

После того, как я запускаю другой процесс SBCL с C-u M-x slime, функция автодока снова работает, но только в LISPbuffers.

Итак, есть ли способ получить автодок SLIME в моем пользовательском REPL?

1 Ответ

2 голосов
/ 11 ноября 2011

Я думаю, что вы правы, заключив, что бэкэнд-сервер (в вашем процессе sbcl) занят. В слизи IIRC есть как синхронные, так и асинхронные команды, и ваша game-repl будет синхронной командой, которая не позволит асинхронным командам документации пройти к бэкэнду - напротив, при составлении обычной команды в REPL слизи, бэкэнд не используется, поэтому запросы документов могут проходить.

Но, пожалуйста, прости меня за то, что ты также интересуешься, имеет ли смысл то, что ты делаешь в этом конкретном случае - цель пользовательского REPL, по-видимому, одна или обе из:

  • Предоставить ограниченный или синтетический набор команд
  • Предоставление нестандартных структур управления / синтаксиса

и в любом случае ввод в пользовательский REPL может быть не эквивалентен обычному коду, который слизь может автоматически сгенерировать для вас.

Можно было бы предоставить ограниченное «игровое» пространство имен, в котором вы могли бы поиграть в обычном REPL слизи, а затем также предоставить отдельный ориентированный на производство REPL с ридером, который позволял бы доступ только к символам в этом пространстве имен. ? (Здесь обсуждается песочница с обычным шрифтом здесь .)

...