LINUX.ORG.RU

Slime & sbcl


0

0

В slime не работает save-lisp-and-die:

CL-USER> (save-lisp-and-die "sbcl1.core")
Lisp connection closed unexpectedly: exited abnormally with code 256
 
В "чистом" sbcl - всё нормально.
Slime из emacs'a завпускаю. В .emacs прописано:

(load "/usr/share/emacs/site-lisp/slime/slime")
(setq inferior-lisp-program "/usr/bin/sbcl --noinform")

anonymous

Все правильно. save-lisp-and-die нужно делать в "чистом" REPL без SLIME. Иначе он тебе сохранит ядро вместе со swank. А вылетает он потому, что после save-lisp-and-die SBCL принудительно выходит в top-level. Вот у тебя и рвется connection unexpectedly. А вот CLISP, например, остается в REPL после saveinitmem (аналог save-lisp-and-die).

Zubok ★★★★★
()
Ответ на: комментарий от anonymous

>А тогда как свое core загрузить в slime (не получается) ? или в emacs'e хотябы ?

Установи в .emacs:

(setq inferior-lisp-program "/usr/bin/sbcl --noinform --core /path/to/your/core")

При старте slime у тебя sbcl загрузится с новым ядром.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

собственно так и делал, но

; compiling file "/usr/share/emacs/site-lisp/slime/swank-sbcl.lisp" (written 10 JAN 2007 12:20:09 AM):
; compilation aborted after 0:00:00

;; Error while loading: ~/.slime/fasl/2007-01-10/sbcl-1.0.4-linux-x86/swank-sbcl.fasl

; compilation unit aborted
;   caught 2 fatal ERROR conditions
* 
Это после запуска slime с новым ядром...

anonymous
()
Ответ на: комментарий от anonymous

Эт у меня скорее всего от:

* (compile-file "/usr/share/emacs/site-lisp/slime/swank-sbcl.lisp")

debugger invoked on a SB-INT:SIMPLE-FILE-ERROR: error opening #P"/usr/share/emacs/site-lisp/slime/swank-sbcl.fasl": Отказано в доступе

А из под рута:

; compiling file "/usr/share/emacs/site-lisp/slime/swank-sbcl.lisp" (written 10 JAN 2007 12:20:09 AM): ; compiling (IN-PACKAGE :SWANK-BACKEND) debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR: The name "SWANK-BACKEND" does not designate any package.

; compilation unit aborted ; caught 1 fatal ERROR condition

; compilation aborted after 0:00:35

anonymous
()
Ответ на: комментарий от anonymous

>Это после запуска slime с новым ядром...

Что-то я не пойму никак.

1. У тебя без своего ядра грузится SLIME нормально, а как указываешь --core, то перестает?

2. Загружаемое ядро ты сохранял из SLIME или непосредственно в SBCL?

Zubok ★★★★★
()
Ответ на: комментарий от anonymous

Можно сделать приблизительно так:

В чистом sbcl делаешь что-то вроде такого:

(make-package :swank-loader)
(defparameter swank-loader::*source-directory* "/home/yuri/emacs/slime-2.0/")
(require :swank)
(setf swank:*use-dedicated-output-stream* nil)
(setf swank:*communication-style* :spawn)

Естественно заменив "/home/yuri/emacs/slime-2.0/" на правильный путь.

После этого грузишь/делаешь что еще надо а после этого (save-lisp-and-die ...).

После этого запускаем полученный образ, а в emacs делаем M-x slime-connect.
И конектимся к localhost:4005.

kpanic ★★
()
Ответ на: комментарий от kpanic

Вот что получается:

* (make-package :swank-loader)

#<PACKAGE "SWANK-LOADER">
* (defparameter swank-loader::*source-directory* "/usr/share/emacs/site-lisp/slime")

SWANK-LOADER::*SOURCE-DIRECTORY*
* (require :swank)

debugger invoked on a SB-INT:EXTENSION-FAILURE:
  Don't know how to REQUIRE SWANK.

Ошибка...

anonymous
()

Если у тебя SLIME самоустановленный, а не из дистрибутива настроенный, то сделай так:

Создай каталог ~/.sbcl/systems и сделай следующее:

$ cd ~/.sbcl/systems

$ ln -s /path/to/the/real/swank.asd swank.asd

Тогда у тебя sbcl поймет, как сделать (require 'swank).

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Всё равно:

* (require 'swank)

debugger invoked on a SB-INT:EXTENSION-FAILURE:
  Don't know how to REQUIRE SWANK.

anonymous
()
Ответ на: комментарий от Zubok

Может в ~/.sbcl/source ещё slime кинуть ? А то он у меня в /usr/share...

anonymous
()
Ответ на: комментарий от kpanic

> В чистом sbcl делаешь что-то вроде такого:

> (make-package :swank-loader)
> (defparameter swank-loader::*source-directory* 
> "/home/yuri/emacs/slime-2.0/")
> (require :swank)
> (setf swank:*use-dedicated-output-stream* nil)
> (setf swank:*communication-style* :spawn) 

1. Можно просто добавить путь к slime в asdf:*central-registry*

(pushnew "/path/to/slime/" asdf:*central-registry* :test #'equal)

для require этого достаточно, но!

2. Мне кажется (из слов вопрошающего не понял), что проблема в том _как_
он запускает slime со своим ядром: M-x slime или M-x slime-connect?
Судя по тому, что slime пытается занятся компиляцией - именно первым
путём. А надо вторым.

Но и это может быть не всё - полазь по гуглу.

yyk ★★★★★
()
Ответ на: комментарий от yyk

Новая проблема: * (pushnew "/usr/share/emacs/site-lisp/slime" asdf:*central-registry* :test #'equal) debugger invoked on a SB-KERNEL:READER-PACKAGE-ERROR: READER-ERROR on #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {1000158E21}>: package "ASDF" not found Хотя ASDF есть --- /usr/share/common-lisp/ >>> /usr/share/common-lisp/source/ >>> /usr/share/common-lisp/source/asdf/ >>> /usr/share/common-lisp/source/asdf/asdf-install.lisp >>> /usr/share/common-lisp/source/asdf/asdf.lisp >>> /usr/share/common-lisp/source/asdf/wild-modules.lisp

anonymous
()
Ответ на: комментарий от yyk

ещё ссылка по теме:

http://common-lisp.net/project/slime/doc/html/Setting-up-the-lisp-image.html#...

И в SAVE-LISP-AND-DIE ты можешь добавить :EXECUTABLE (не забыв при этом в :TOPLEVEL загнать лямбду с вызовом swank:create-server с нужными параметрами) - получишь одно файло :)

yyk ★★★★★
()
Ответ на: комментарий от yyk

Сделал:
pushnew "/usr/share/emacs/site-lisp/slime"
 asdf:*central-registry* :test #'equal)
(Прошло)


(save-lisp-and-die "sbcl1.core")
(Прошло)

Потом прописал в .emacs новую core.
Запускаю M-x slime - таже ошибка, что и была (А почему так нельзя ?)
Запускаю M-x slime-connect 
Host: 127.0.0.1
Port: 4005
connection failed: в соединении отказано Host 127.0.0.1

anonymous
()
Ответ на: комментарий от anonymous

Жуть как всё запущено (это я не про тебя). Сам проверил - если сохранить image с swank - после его загрузки swank:create-server нормально не стартует - ругается, причём sb-bsd-sockets на ненайденный протокол "tcp". Где-то вкралась ошибка... Правда, у меня всё из cvs.

Перед slime-connect надо сначала запустить лисп с твоим ядром. Т.е. ты разносишь запуск slime на две части: запуск сервера (лиспа) и запуск клиента (slime в emacs).

yyk ★★★★★
()
Ответ на: комментарий от yyk

> Перед slime-connect надо сначала запустить лисп с твоим ядром

А как мне из emacs это сделать ? SBCL сначала запустить ? Или как ? Можно подробней ?

anonymous
()
Ответ на: комментарий от anonymous

Самый простой способ (для меня ;) - посмотри в slime.el :)))

Но можеш сначала для проверки запустить sbcl со своим ядром и вызвать swank:create-server. Если отработает (не выдаст ошибку, а как-бы зависнет) - запускай еmacs и в нём slime-connect.

yyk ★★★★★
()
Ответ на: комментарий от yyk

А как сделать чтоб в emacs'e читый sbcl запускался ? Может ну его это slime. Вот ща набираю M-x lisp-mode и грузится какой-то lisp, но нет REPL. Как сделать чтоб M-x lisp-mode и sbcl ?

anonymous
()
Ответ на: комментарий от anonymous

>pushnew "/usr/share/emacs/site-lisp/slime" asdf:*central-registry* :test #'equal)

Слеш в конце после slime попробуй набрать.

Zubok ★★★★★
()
Ответ на: комментарий от anonymous

> А как сделать чтоб в emacs'e читый sbcl запускался ? Может ну его это slime.

Не, это ты зря. Просто оставь загрузку slime как есть. Т.е. пропиши в ~/.sbclrc

(require :asdf) (pushnew "/path/to/slime/" asdf:*central-registry* :test #'equal)

в ~/.emacs

(setq inferior-lisp-program "/usr/local/bin/sbcl.exe --core /usr/local/lib/sbcl/sbcl.core") (add-to-list 'load-path "/path/to/slime/")

(require 'slime) (add-hook 'slime-mode-hook (lambda () (slime-autodoc-mode t))) (add-hook 'lisp-mode-hook (lambda () (slime-mode t))) (slime-autodoc-mode)

(slime-setup) (setq slime-net-coding-system 'utf-8-unix)

в ~/.swank.lisp

(setq SWANK::*CODING-SYSTEM* ':utf-8-unix)

И запускай просто из emacs M-x slime - и будет тебе счастье... :)

> Вот ща набираю M-x lisp-mode и грузится какой-то lisp, но нет REPL. Как сделать чтоб M-x lisp-mode и sbcl ?

А это не mode для elisp?

yyk ★★★★★
()
Ответ на: комментарий от Zubok

В .emacs
(load "/usr/share/emacs/site-lisp/slime/slime")
(setq inferior-lisp-program "/usr/bin/sbcl 
--noinform --core /PATH/TO/sbcl1.core")

В sbcl

* (require :asdf)
("ASDF")
*  pushnew "/usr/share/emacs/site-lisp/slime/" asdf:*central-registry* :test #'equal)

debugger invoked on a UNBOUND-VARIABLE: The variable PUSHNEW is unbound.

anonymous
()
Ответ на: комментарий от anonymous

А где открывающая скобка?

* pushnew "/usr/share/emacs/site-lisp/slime/" asdf:*central-registry* :test #'equal)

->

* (pushnew "/usr/share/emacs/site-lisp/slime/" asdf:*central-registry* :test #'equal)

yyk ★★★★★
()
Ответ на: комментарий от yyk

ну да :)

Вот ща делаю:

sbcl --core /my.core
* (require :asdf)
("ASDF")
* (pushnew "/usr/share/emacs/site-lisp/slime" asdf:*central-registry* :test #'equal)
("/usr/share/emacs/site-lisp/slime"
 (MERGE-PATHNAMES ".sbcl/systems/" (USER-HOMEDIR-PATHNAME))
 (LET ((ASDF::HOME (POSIX-GETENV "SBCL_HOME")))
   (WHEN ASDF::HOME (MERGE-PATHNAMES "site-systems/" (TRUENAME ASDF::HOME))))
 *DEFAULT-PATHNAME-DEFAULTS*)

(require :swank)

debugger invoked on a SB-INT:SIMPLE-FILE-ERROR:
  error opening #P"/usr/share/emacs/site-lisp/slime/swank-loader.fasl":
    Отказано в доступе

Рааз "Отказано в доступе" значит /usr/share/... не нравится.
Перекинул slime в ~./sbcl/source/slime ив pushnew этот путь указал. Всё равно туже ошибку выдаёт.

anonymous
()
Ответ на: комментарий от anonymous

>(load "/usr/share/emacs/site-lisp/slime/slime") 
>(setq inferior-lisp-program "/usr/bin/sbcl --noinform --core /PATH/TO/sbcl1.core")


Почитай README к SLIME:

(add-to-list 'load-path "~/hacking/lisp/slime/") ; your SLIME directory

(setq inferior-lisp-program "/opt/sbcl/bin/sbcl") ; your Lisp system 
(require 'slime)
(slime-setup) 

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Сделал так.
Всё равно 
* (require :swank)

debugger invoked on a SB-INT:SIMPLE-FILE-ERROR:
  error opening #P"/usr/share/emacs/site-lisp/slime/swank-loader.fasl":
    Отказано в доступе

Хотя путь везде (.emacs и pushnew) указал домашний
(~/.sbcl/source/slime)

Чего он упорно в /usr/share... лезет ?

anonymous
()
Ответ на: комментарий от yyk

> Вот ща набираю M-x lisp-mode и грузится какой-то lisp, но нет REPL. Как сделать чтоб M-x lisp-mode и sbcl ? >> А это не mode для elisp?

Наверное эт emacs'овое что-то.

anonymous
()
Ответ на: комментарий от anonymous

Потому что slime сохраняет файлы *.fasl не там, где лежат исходники, а в отдельном каталоге. У меня он лезет в /var/cache/common-lisp-controller/0/sbcl/swank/fasl/sbcl-bla-bla-bla

Может у тебя ещё одна версия slime стоит кроме той, что ты пытаешься подключить?

yyk ★★★★★
()
Ответ на: комментарий от anonymous

И я не понимаю, почему он у тебя грузит swank-loader.fasl, если у меня даже при наличии swank-loader.fasl всё-равно грузит

; loading #P"/usr/share/common-lisp/source/slime/swank-loader.lisp"

;; loading #P"/var/cache/common-lisp-controller/0/sbcl/swank/fasl/sbcl-0.9.16-linux-x8 6/swank-backe\ nd.fasl"

...

yyk ★★★★★
()
Ответ на: комментарий от yyk

> И я не понимаю, почему он у тебя грузит swank-loader.fasl, если у меня даже при наличии swank-loader.fasl всё-равно грузит

Без понятия...... Ерунда какая-то...

anonymous
()
Ответ на: комментарий от yyk

А как мне этоо swank-loader.fasl получить ?

anonymous
()
Ответ на: комментарий от yyk

Таак. Компильнул swank-loader.lisp - получил .fasl и (require :swank) прокатило.

Но потом

swank:create-server

debugger invoked on a UNBOUND-VARIABLE:
  The variable SWANK:CREATE-SERVER is unbound.

Что дальше делать ?

anonymous
()
Ответ на: комментарий от anonymous

Всё равно что-то странное.

Только что сделал purge для slime, установил из cvs, всё работает:

; loading #P"/root/src/slime/slime/swank-loader.lisp"
;; loading #P"/root/.slime/fasl/2007-04-18/sbcl-0.9.16-linux-x86/swank-backend.fasl&qu
ot;

Может покажешь полные версии ~/.sbclrc и ~/.emacs? А то "не верю" :)

yyk ★★★★★
()
Ответ на: комментарий от yyk

Ага. Что-то торможу сегодня. Заработало! Спасибо всем!!!
Вот только объясните ещё плз.зачем такие сложности ? И что это даст ? 
Я так понимаю: запускаю чистый sbcl (с моим ядром или стандартным ?).
Конекчусь к нему из emacs'a. И скаким ядрм я работаю (серверным или
клиентским) ? И где вообще работа происходит на сервере или клиенте ?

anonymous
()
Ответ на: комментарий от yyk

~/.sbclrc  - нет такого...
~/.emacs :

(load "/usr/share/emacs/site-lisp/site-gentoo")
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/slime")
(setqinferior-lisp-program 
"/usr/bin/sbcl --noinform --core /home/vladx/sbcl1.core")
(require 'slime)
(slime-setup)

А вот что пишет при M-x slime

; loading #P"/usr/share/emacs/site-lisp/slime/swank-loader.lisp"
;; loading #P"/home/vlad/.slime/fasl/2007-03-19/sbcl-1.0.4-linux-x86-64/swank-backend.
fasl"
;; loading #P"/home/vlad/.slime/fasl/2007-03-19/sbcl-1.0.4-linux-x86-64/nregex.fasl&qu
ot;
;; loading #P"/home/vlad/.slime/fasl/2007-03-19/sbcl-1.0.4-linux-x86-64/swank-sbcl.fas
l"

;; Error while loading: /home/vlad/.slime/fasl/2007-03-19/sbcl-1.0.4-linux-x86-64/swank-sbcl.fasl

Хотя swank-sbcl.lisp есть. Подкидываю в этот каталог swank-sbcl.fasl
(скомпилил его в /usr/share....) он исчезает и выдаётся эта ошибка...

anonymous
()
Ответ на: комментарий от yyk

Вот ща ~/.sbclrc

(require :asdf)
(pushnew "/usr/share/emacs/site-lisp/slime/"asdf:*central-registry* 
:test #'equal)

anonymous
()
Ответ на: комментарий от yyk

Короче я понял в чём дело:

При попытке (require :swank) или M-x slime sbcl лезет в 
/usr/share/emacs/site-lisp/slime компилит там swank-sbcl.lisp,
а fasl кидает в ~/.slime.... Так вот, если я это всё делаю от root'a
то всё ОК, а из под юзера - болт, т.к. не имею прав компилить в 
/usr/share/emacs/site-lisp/slime....
Как с этим бороться ?

anonymous
()
Ответ на: комментарий от anonymous

> Ага. Что-то торможу сегодня. Заработало! Спасибо всем!!!

Так я не понял - заработало, или ошибка осталась?

> Вот только объясните ещё плз.зачем такие сложности ?

Это не "сложности", это "недоработки" :)

> И что это даст ?

Ты про slime? Ну, из известных cl mode самый "продвинутый" (со слов тех, кто щупал другие ;) - google в помощь.

> Я так понимаю: запускаю чистый sbcl (с моим ядром или стандартным ?)

А это как запустишь (укажешь в inferior-lisp) - с таким ядром и загрузится.

> И скаким ядрм я работаю (серверным или клиентским) ?

ядро - оно у лиспа (CL) - не у емакса, соответственно - с "серверным" :)

> И где вообще работа происходит на сервере или клиенте ?

Смотря что понимать под работой ;) Выполнение вводимых тобой комманд для CL - на "сервере" (т.е. сам лисп выполняет), а всё что связяно с емаксом - он сам, вестимо (его часть интерфейса ну и вся интерактивная работа) :)

yyk ★★★★★
()
Ответ на: комментарий от yyk

> Так я не понял - заработало, или ошибка осталась?

См. мой пост выше. Из под root'a работает, из под юзера - нет.

anonymous
()
Ответ на: комментарий от anonymous

> При попытке (require :swank) или M-x slime sbcl лезет в > /usr/share/emacs/site-lisp/slime компилит там swank-sbcl.lisp, > а fasl кидает в ~/.slime.... Так вот, если я это всё делаю от root'a > то всё ОК, а из под юзера - болт, т.к. не имею прав компилить в > /usr/share/emacs/site-lisp/slime.... > Как с этим бороться ?

По идее под юзером slime должен ещё раз откомпилироваться в ~/.slime... И не должен он компилить _в_ /usr/share/emacs/site-lisp/slime... Читать из него - да, писать в него - нет.

yyk ★★★★★
()
Ответ на: комментарий от anonymous

> (setqinferior-lisp-program "/usr/bin/sbcl --noinform --core /home/vladx/sbcl1.core")

Я надеюсь - в файле не "setqinferior-lisp-program" а "setq inferior-lisp-program"?

yyk ★★★★★
()
Ответ на: комментарий от yyk

глупый вопрос - совсем бы не работало...

yyk ★★★★★
()
Ответ на: комментарий от yyk

Эт да :) иначеб emacs ругался

А на счёт рута и юзера - при компиляции, наверное, что-то вспомогательное и в /usr/share... пишет или fasl сначала в /usr/share... хочет записать, а потом в ~/.slime. В общем как-то так...

anonymous
()
Ответ на: комментарий от anonymous

> А на счёт рута и юзера - при компиляции, наверное, что-то вспомогательное и в /usr/share... пишет или fasl сначала в /usr/share... хочет записать, а потом в ~/.slime. В общем как-то так...

Ладно, попробую проверить...

А ты попробуй положить slime туда, где юзер имеет все права - вот и узнаешь - так или нет.

yyk ★★★★★
()
Ответ на: комментарий от yyk

Так положил уже в ~/.sbcl/source/slime, так компилить он всё равно
лезет в /usr/share... Хотя я и в ~/.emacs прописал ему:

(add-to-list 'load-path "/home/vlad/.sbcl/source/slime")
И в ~./sbclrc

(pushnew "/home/vlad/.sbcl/source/slime/"asdf:*central-registry* :test #'equal)

А он всё равно... Как ещё указать надо ?

anonymous
()
Ответ на: комментарий от anonymous

Посмотри - может в этом /usr/share таки остались куски slime? Удали нафиг! Есть подозрение, что емакс пытается сначала загрузить пакет из "собственных" каталогов, а потом только прётся искать по дополнительно указанным путям.

yyk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.