?

Log in

No account? Create an account

Метапрограммирование в Агде и немного философии - Excelsior

Aug. 27th, 2013

09:49 am - Метапрограммирование в Агде и немного философии

Previous Entry Share Next Entry

Comments:

[User Picture]
From:xeno_by
Date:August 29th, 2013 05:48 am (UTC)
(Link)
Какие бы вы выделили основные недостатки макросистемы TH?
(Reply) (Parent) (Thread)
From:Valentin Budaev
Date:August 29th, 2013 09:12 am (UTC)
(Link)
1. Это даже не про саму макросистему - отсутствие хорошего, качественного АПИ. Пусть даже система не слишком выразительна - но написание макросов очень узкая задача (разбор и генерация АСТ), а раз задача очень узкая - для нее можно написать удобный, специализированный апи/дсл/етц. (все эти pattern language и т.п.) Да, он не будет универсален - но покроет большую часть юзкейсов и кардинально повысит юзабельность. Те 10%, что он не покроет, я уж буду писать руками, не проблема, но не заставляйте меня самому крутить педали в оставшихся 90%.

2. Требование заведомой корректности типов на выходе - сильно ограничивает выразительность, понятное дело

3. Отсутствие локальных макросов, macrogenerated макросов - многие "патерны" использования макросов на них основаны.

4. Отсутствие гомоиконности в конструкциях языка - когда синтаксис конструкций спроектирован сразу так, что его _удобно_ разбирать и генерить - это большой плюс. Но чтобы исключить этот недостаток, необходимо быть лиспом :)

*хороший АПИ из первого пункта может свести к минимуму подобного рода недостаток

5. Вызов макросов (и вот эти $(dyn "it")) туда же. Макрос пишется, чтобы пользователю было _удобно_. Если вы для использования макросов (и даже банального вызова) заставляете писать кучу лишних закорючек - это никак не способствует удобству. Пусть писать макросы даже будет немного сложнее - но для пользователя должно быть все предельно легко, прозрачно и с минимальными затратами. Никаких лишних телодвижений.

6. Отсутствие всяких фич, специально сделанных для макросов - типа тех же syntax parameters, renamers, возможности ассоциирования с символами произвольной статической информации и ее использования

7. Отсутствие поддержки со стороны рантайма - syntax objects, фазы, модульная система. По-хорошему рантайм должен учитывать наличие макросов, в хаскеле макросы - сбоку припека для рантайма.

Edited at 2013-08-29 09:15 am (UTC)
(Reply) (Parent) (Thread)