среда, 28 сентября 2011 г.

Заметки на полях

Вот чего в Кложуре хорошего есть, и чего нет в Коммон Лиспе - это интерфейс для создания последовательностей. Коммонлисповские elt, nth, aref, svref - это, по-сути, дупликация одной и той же функциональности: доступ к элементу последовательности.

В своём dsl мне удобно было бы расширить функциональность elt и setf elt, чтобы они работали с функциональным объектом или методом clos, но я не могу сделать это прямым способом, не прыгая с бубном вокруг эмуляции православного списка для штатного elt.

Ещё на деле сигнальный протокол вообще нигде не используется, плюс метаобъектный протокол используется только по той части, которая должна бы быть штатно в clos.

5 комментариев:

  1. да, с последовательностями Рич хорошо продумал...

    ОтветитьУдалить
  2. Ну, nth, svref ... — это просто оптимизированные версии elt, о них вообще говорить не стоит (об этом хорошо написал Грем в ANSI CL). А elt расширить — ну да, плохо, что не расширяются встроенные последовательности, но это, конечно, можно обойти (что понятно и, конечно, не очень приятно).

    А вот сигнальный протокол используется, но в нетривиальных применениях (которые редко, когда встречаются, но если уж встречаются, то другими средствами обычно еще сложнее). Это не говоря о рестартах, которые нужны везде.

    А MOP — с точки зрения практики, то да (всякие Postmodern и CLSQL юзают как раз то, что, в принципе, должно было быть в CLOS). Но в теории (а это, возможно, практика через 10 лет, если правильно ее повернуть ;) он использоваться вполне может, как показывает работа Паскаля Костансы.

    ОтветитьУдалить
  3. Что-то я не понял, что значит "расширить функциональность elt и setf elt, чтобы они работали с функциональным объектом или методом clos"? Речь идёт о обновлении определения? Поясните, плиз.

    ОтветитьУдалить
  4. Вообще в sbcl реализованы расширяемые последовательности через clos (т. е. можно сделать чтобы с твоим объектом работали все функции, работающие с последовательностями) - пакет sb-sequence. Определяешь метод для обобщённой функции из этого пакета - и всё. Для твоих целей этого по-моему хватит.

    А так - да, в CL есть довольно много кривых, странных и нелогичных вещей, оставленных для совместимости со старым кодом. Чего стоит, к примеру, setq, который если его первый аргумент является символьным макросом превращается в setf.

    ОтветитьУдалить
  5. Хорошо б было, если ревью ANSI CL сделали. На самом деле, фундаментальных косяков в CL не так много, но они есть, и вызывают попоболь.

    ОтветитьУдалить

Архив блога