LINUX.ORG.RU

ООП, литература, теория

 


3

2

Доброго времени суток.

Люди часто используют понятия вроде связности кода, зависимости, внутреннего состояния объекта, и т.п.
Что они означают на практике всем понятно.

Подскажите литературу, в которой подобная терминология систематизируется и вводится более-менее строго в математическом смысле?


Ответ на: комментарий от monk

А вот сделать правильную гигиену...

Да ладно гигиена. Вот что на счет syntax properties, syntax source, двупроходного экспандера, привязки идентификаторов к лексическому контексту, фаз и других подобных фич?

anonymous
()
Ответ на: комментарий от monk

Без гигены повторить синтакисис шаблона-подстановки syntax-rule вполне можно.

Кстати, нельзя. Без гигиены легко будет написать пример, который будет ломать паттерн-матчинг.

anonymous
()
Ответ на: комментарий от anonymous

syntax properties — необходимое и достаточное условие для реализации гигиены

syntax source — в SBCL (и много где ещё) есть, не ANSI CL

двупроходного экспандера — macroexpand + codewalker. В принципе реализуемо (например, в cl-iterate)

привязки идентификаторов к лексическому контексту = гигиена

фазы — реализовано в xcvb (библиотека, система сборки), в контексте CL полезность сомнительна, так как сильно затрудняет отладку макросов в рамках image-based разработки.

monk ★★★★★
()
Ответ на: комментарий от anonymous

Без гигиены легко будет написать пример, который будет ломать паттерн-матчинг.

http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html

Выглядит так:

(define-syntax my-or
  (syntax-rules ()
    ((my-or) nil)
    ((my-or arg1) arg1)
    ((my-or arg1 arg2) (with ((temp (gensym)))
                         (let ((temp arg1))
                           (if temp temp arg2))))
    ((my-or arg1 arg2 arg3 ***) (my-or (my-or arg1 arg2) arg3 ***))))

Напиши пример, который сломает my-or.

monk ★★★★★
()
Ответ на: комментарий от monk

фазы — реализовано в xcvb (библиотека, система сборки), в контексте CL полезность сомнительна, так как сильно затрудняет отладку макросов в рамках image-based разработки.

Криво реализовано, очевидно. Семантику фаз в общелиспе корректно повторить нельзя.

двупроходного экспандера — macroexpand + codewalker.

Ну через codewalker и переопределение всех форм стандартной библиотеки можно сделать все что угодно. Только это уже будет не общелисп.

anonymous
()
Ответ на: комментарий от monk

Сломается не конкретный макрос а сама syntax-rule форма. Например, если вызывать макросы внутри макросов или раскрываться макросом в syntax-rules

anonymous
()
Ответ на: комментарий от anonymous

Криво реализовано, очевидно.

Не читал, но осуждаю?

Семантику фаз в общелиспе корректно повторить нельзя.

В одном образе нет. Если использовать отдельный образ для сборки (как сделано в xcvb), то в чём проблема?

Только это уже будет не общелисп

Что в использовании или реализации cl-iterate не общелисповского? Работает на любой ANSI CL реализации.

monk ★★★★★
()
Ответ на: комментарий от anonymous

Сломается не конкретный макрос а сама syntax-rule форма. Например, если вызывать макросы внутри макросов или раскрываться макросом в syntax-rules

Можно пример? Макросы внутри макросов и в моём примере вызываются (my-or рекурсивен).

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.