В статье рассматриваются особенности конструкции defstruct.
Автор:
Написал: artish   Дата: 2008-09-08 21:25
Комментарии: (0)   Рейтинг:

Многие вещи в стандарте Common Lisp то ли нарочито недоделаны до конца, то ли это тупость американских чиновников. Однако, есть кладезь мудрости в виде чужих исходников, есть достаточно открытая архитектура лиспа с морем метаинформации.

Имеется такая конструкция, как defstruct, она аналогична struct в C и определяет "запись", т.е. объект, содержащий в себе ссылки на несколько других объектов, которые можно указывать по именам. Стандарт не определяет, как можно узнать хотя бы перечень полей структуры. Пока что общего решения я не знаю, но кое-что есть в ap5, файл sys-depe.lisp. См. определение функции defstruct-access-function-name - оно даёт способ обращения к структурам для нескольких реализаций лиспа. К сожалению, они не включают sbcl. Для sbcl с помощью apropos я нашёл SB-PCL::STRUCTURE-TYPE-SLOT-DESCRIPTION-LIST. Видимо, корень этой функции следует искать в PCL, которую можно скачать вот тут (по ftp). Но мне некогда это проверять. Вообще, апропос - это великая вещь. Например, в Lispworks Personal стоит поискать апропосом слово "personal", затем воспользоваться disassemble, который тоже на символьном уровне показывает, какие функции вызываются. Далее, при минимальном знании ассемблера можно переопределить эти функции так, чтобы убрать, к примеру, ограничения на время работы образа и на размер хипа. Я это сделал (потратив примерно полдня) и теперь у меня есть Lispworks personal, работающий неделями и держащий до сотен мегабайт хипа. Боюсь, если эта информация дойдёт до вендоров лиспворкса, в следующей версии они уберут disassemble и тогда такой фокус больше не пройдёт. Впрочем, я всё равно стараюсь работать кроссплатформенно и планирую перебраться на sbcl.



Онлайн :

0 пользователь(ей), 21 гость(ей) :




Реклама на сайте: