Регистрация | Войти
Lisp — программируемый язык программирования
RSS
новости def-symbol-readmacro
den73 - 23.02.2013 00:23, Сообщений - 6
Доброго!
 Многие слышали про библиотеку для lispworks под названием

http://code.google.com/p/def-symbol-readmacro/

 Monk вроде работал над тем, чтобы портировать её на SBCL, хотя последнее время об этом мало слышно.

У неё есть страничка http://code.google.com/p/def-symbol-readmacro/wiki/InstallationInEnglish
где написано, как её установить и приведены примеры использования основных фич.

Полчаса назад добавил новый коммит - подружил iterate со степпером.
Раньше в степпере нельзя было поставить брекпойнт на кляузе (как это будет по-рюсски?)
Теперь можно. Чтобы пользоваться, всю библиотеку грузить не нужно. Грузите только два файла:

http://code.google.com/p/def-symbol-readmacro/source/browse/lw-macro-friendly-stepper.lisp
и
http://code.google.com/p/def-symbol-readmacro/source/browse/lw-macro-friendly-stepper-iterate-patch.lisp

Сделайте первому из них compile and load - и вуаля!
В функции
(defun test () (iter (for i from 1 to 3) (collect i)))
можно ставить брекпойнты на скобках перед словами for и collect.

Прошу осуждать.
[#]

(iter (for a from 1 to 2) (collect (print a)))
                                   ^
Здесь breakpoint не ставится.
Menschenkindlein - 23.02.2013 22:50
[#] Ответ на комментарий от Menschenkindlein 23.02.2013 22:50
Я как-то не подумал сразу проверить, но там и в непатченной версии breakpoint не ставится. Что характерно, в loop в аналогичном месте - ставится.
Menschenkindlein - 24.02.2013 14:53
[#] Ответ на комментарий от Menschenkindlein 24.02.2013 14:53
Нда. Надо пофиксить, наверное.
den73 - 24.02.2013 22:52
[#] Ответ на комментарий от den73 24.02.2013 22:52
Вроде пофиксил, но замечены случаи, когда код, полученный под степпер, даже не компилируется. Для безопасности, сделано так, чтобы разрушение исходника происходило при работе в степпере, а не при обычной компиляции.
den73 - 26.02.2013 21:43
[#] Ответ на комментарий от den73 26.02.2013 21:43
Добавил в библиотеку целую систему для различных плюшек в Lispworks. Копирую кусок анонса:

- lispworks: если в файле может содержится команда (in-readtable имя), то команды Compile Defun, Evaluate Defun, Evaluate Last Form, Evaluate Region, Compile Region будут использовать эту таблицу чтения. Если такой команды в файле нет, таблица чтения будет привязана к значению (named-readtables:find-readtable nil). Для возможности писать (in-readtable) до (in-package), символ 'named-readtables:in-readtable импортирован в пакет :cl-user

- lispworks: если используется таблица чтения :buddens-readtable-a, то при ошибке чтения во время компиляции нажмите в отладчике :e и с большой вероятностью откроется место в файле, где произошла ошибка. Буфер будет раскрашен цветами согласно вложенности вызовов (read)

- lispworks: при компиляции файла в редакторе ofasl создаётся во временном каталоге. Тепрь ofasl-ы больше не будут мешаться под ногами в каталоге исходников

- lispworks: поправлено расположение окошек в дебаггере - больше места для сообщений, меньше - для стека

- lispworks: статус бар для листенера и его заполнение произвольной информацией (в нашем случае - в нём отображается текущая таблица чтения и т.п.)

- lispworks: запрос перед закрытием листенера с любым вашим сообщением


Наиболее интересная новость - то, что я научил среду разыскивать слова (in-readtable ) в файле. Теперь стало совсем удобно работать с несколькими именованными таблицами чтения. В своё время linkfly справедливо указывал, что незначительные измнеения, к-рые я внёс в чтение, случайно написанный в библиотеке CamelCase идентификатор может привести к проблемам (особенно, если это не имя функции или переменной, а данные).

Теперь эта проблема решена: если есть (in-readtable ), то будет использована заданная таблица чтения. Если нет, то будет использована обычная.

Также очень полезен статус-бар в листенере. Я обычно там вывожу таблицу чтения и текущий конннект к базе данных. Последнее критично, т.к., имея под рукое несколько баз, легко испортить жизнь целому предприятию одним запросом, сделанным не в той базе, где надо.
den73 - 08.02.2015 14:36
[#] Ответ на комментарий от den73 08.02.2015 14:36
Приветствую! :)
Кстати, для тех кто в танке: http://code.google.com скоро закрывается)
LinkFly - 26.03.2015 00:49
@2009-2013 lisper.ru