swizard (swizard) wrote,
swizard
swizard

Category:

((( Racket )))






В посте про cl-bpnet какой-то мудрый анонимус предлагает обратить внимание на Racket.

1) Ты читал пдф, на который я кинул ссылку? Как минимум ты можешь гарантированно положиться на оптимизацию кода, генерируемого макросами, на то, что там не будет мёртвого кода и что тебе не нужно заботиться о краевых случаях вручную. В пдфке есть примеры на эту тему.
2) Мощнее по ряду причин.
-В рэкетовских макрах ты обрабатываешь не голый s-exp, но синтаксический объект, содержащий информацию о биндингах, области видимости и т.д. Там, где в CL тебе надо использовать генсим-костыли, в ракете ты просто пишешь код, и он правильно биндится с автоматической гигиеной.
-В рэкете есть понятие фазы - то, что на CL имитируется вложенными ,,,@'' и прочим аски-артом. "Макросы третьего уровня вложенности" обеспечиваются просто подключением модуля с макросами "второго уровня" с фазой +1 (вообще, все модули автоматически так и подключаются, если мне не изменяет память) - тогда код текущего модуля проходится макроэкспандером, использующим макросы подключенного модуля.
-В Рэкете есть такая удобная штука, как #lang - явное задание языка, на котором написан модуль (по сути такое же подключение модуля, но вместе с ридером и без синтаксического бойлерплейта). Пример использования, например, тут: http://docs.racket-lang.org/datalog/Tutorial.html или тут http://docs.racket-lang.org/ts-guide/quick.html - разве это не красивее, чем пачка инклюдов в начале файла?
-И, наконец, макросистема CL просто является подмножеством макросистемы Racket (например, http://docs.racket-lang.org/mzlib/mzlib_defmacro.html реализуется в ней без проблем, чего не скажешь о нормальной автоматической гигиене).

Я посмотрел наискосок примеры про языки typed/racket, datalog, web-server/insta, racket/gui, slideshow и тд. Вроде бы все грамотно выглядит. Единственно, я (как заслуженная свинья) недолюбливаю и презираю гигиену, так как она мешает анафорическим макрам.

Ну да не суть. Какие у вас соображения про сабж?
Tags: code, common lisp, dsl, lisp, macro, racket, scheme
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 43 comments