Регистрация | Войти
Lisp — программируемый язык программирования
RSS
сделал аналог defadvice для SBCL
den73 - 11.09.2017 00:43, Сообщений - 6
Сделал аналог defadvice из Lispworks или advise из CCL. 

Т.е. пока не совсем аналог. Для функции можно задать только один "совет", а в Lispworks их можно задать сколько угодно (правда, порядок их вызова не определён). 

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

Заодно переделал поиск определений asdf систем. Вроде в SLIME есть контриб для поиска определения системы asdf, но он находит с точностью до файла. Я нахожу с точностью до формы. Но это у меня уже давно было. 

Исходники:
https://bitbucket.org/budden/budden-tools/src/20ce8de15137fcf93d81c35a89d0dc8289a35013/decorate-function.lisp?at=default&fileviewer=file-view-default
https://bitbucket.org/budden/budden-tools/src/20ce8de15137fcf93d81c35a89d0dc8289a35013/asdf-3.1.4-tools.lisp?at=default
https://bitbucket.org/budden/budden-tools/src/20ce8de15137fcf93d81c35a89d0dc8289a35013/sbcl--find-definition-sources-by-name--patch.lisp?at=default

[#]
ПО сути всё это - о том, как добавлять в метаданные SBCL свои виды определений. В Лиспворксе есть dspec, который для этого предназначен. Он довольно странный и не очень хорошо документирован, но его можно заставить работать. В SBCL тоже есть база данных, где хранятся определения. В моих исходниках можно увидеть, как с ней работать.

ХОтелось бы code review, перед тем, как я напишу обо всём этом в SBCL-devel. 

den73 - 11.09.2017 00:45
[#] Ответ на комментарий от den73 11.09.2017 00:45
Ну, результат был вполне предсказуем. 
den73 - 11.09.2017 22:01
[#] Ответ на комментарий от den73 11.09.2017 22:01
Мне написали, что encapsulate - это по сути defadvice, только скрытый. 
den73 - 14.09.2017 21:09
[#]
> Исходники здесь (не думаю, что вы сможете всё это запустить без clcon/Яра)

Ага, то есть что такое defadvice все должны догадываться, а вот свой Яр опять пропиарил. Убейся
shamaz.mazum - 21.09.2017 17:52
[#] Ответ на комментарий от shamaz.mazum 21.09.2017 17:52
Если ты не знаешь, что такое defadvice, то ты некомпетентен. Убейся лучше ты. 
den73 - 21.09.2017 20:24
[#] Ответ на комментарий от den73 21.09.2017 20:24
Не потрудишься объяснить, в чем именно я некомпетентен? Я не берусь утверждать, что я знаю всё.
shamaz.mazum - 23.09.2017 10:52
@2009-2013 lisper.ru