Регистрация | Войти
Lisp — программируемый язык программирования
RSS
Вызов функций из repl
strobegen - 14.08.2009 00:20, Сообщений - 7
Подскажите по чему когда я делаю eval какой-нибудь функции по C-x-e или через меню.
То на попытку вызова в repl slime мне говорит, что она не определена? так и должно быть?
Просто в Cups eval вроде автоматически помещает функцию в repl я думал, что в slime также - но открыв его после некоторого перерыва не могу с ним совладать.  

[#]
Похоже я догадался подозреваю, что он не переключает при evalе пакеты - надо в ручную делать (in-package :****)
strobegen - 14.08.2009 00:23
[#]
SLIME ищет в начале файла форму in-package и при вычислении выражения в файле использует в качетсве текущего пакет, указанный в найденном in-package. Поэтому, хотя язык и не запрещает, очень рекомендуется использоваться форму in-package в файле только один раз.

В REPL по умолчанию текущий пакет CL-USER. Для лёгкого переключения пакета в REPL есть специальная  команда: нажимаем ",", в появившемся приглашении набираем "in", теперь ввод и указываем нужный пакет.
archimag - 14.08.2009 00:31
[#]
Спасибо.
Я правильно понимаю если я выделю например текст во всем файле в котором только одна in-package в самом начале и сделаю eval region то slime должен автоматически переключится в нужный пакет? -если так у меня он чего то не хочет так делать
strobegen - 14.08.2009 00:39
[#]
Кстати еще по путное, предложения может кто-нибудь особо умудренный работой со slime выложит свой emacrc на этом сайте? На мой взгляд много кому может пригодится, в сети конечно много всего есть - а тут будет основа для настройки заточенная непосредственно под CL.
strobegen - 14.08.2009 00:51
[#]
>  Я правильно понимаю
>  то slime должен автоматически переключится в нужный пакет

Нет, не правильно, такое поведение было бы крайне неудобным :)
Тут фажно понять, что slime на самом деле в REPL ничего не отправляет, да и нет этого самого REPL ( как  ложки :))
Точнее, есть REPL, который предоставляет реализация лисп, если запустить лисп, то мы получим этот REPL, но SLIME не использует его для взаимодействия с lisp-процессом. Вместо этого, он запускает внутри lisp-процесса swank-сервер, который принимает и исполняет команды по сокетному соединению (cups, насколько я слышал, также использует тот же самый swank-сервер), и вообще, предоставляет всякие средства, необходимые для среды разработки. REPL, предоставляемый SLIME-ом, не связан с REPL-ом lisp-процесса, SLIME просто эмулирует свой REPL.

Подобная архитектура очень удобна (и по другому фактически сделать нельзя, ибо возможности взаимодействия через потоки ввода/вывода очень ограничены) и помимо прочих преимуществ, позволяет SLIME подключаться к удалённым lisp-процессам. Например, я часто подключаюсь SLIME-ом к этому серверу, который физически находится в Германии (кажется, или в Голландии? ну да не суть), и произвожу частичную перекомпиляцию кода без перезапуска всего сервера, или порой отлаживаю какие-то проблемы, которые проявляются только на этом сервере (бывает у меня работает, а здесь нет, как понять в чём дело? подключился, включил дебагер и всё увидел)

> Кстати еще по путное, предложения может кто-нибудь особо умудренный
> работой со slime выложит свой emacrc на этом сайте

Лично у меня ничего особо специфичного именно для работы с CL в конфиге emacs нет. ИМХО, донастраивать SLIME особо не нужно, вроде всё по уму и хорошо. Разве что вот тут: http://archimag-dev.blogspot.com/2008/12/sbcl-slime-clisp-slime-and-etc.html описал пара полезных (как мне кажется) приёмов.
archimag - 14.08.2009 01:21
[#]
Cпасибо за развернутый ответ)
strobegen - 14.08.2009 02:40
[#]
Вот кстати хорошее расширение к emacs для более "правильной" подсветки скобочек :
http://nschum.de/src/emacs/highlight-parentheses

И еще есть еще такое:
mwe-color-box
http://www.foldr.org/~michaelw/emacs/
Но это к сожалению только визуализатор в отдельном буфере.
Если найду время, попробую из первого сделать нечто похожее на второе но со скобочками и не так навящего)
strobegen - 14.08.2009 15:22
@2009-2010 lisper.ru