Дмитрий Нестерук (IT Специалист) в своем блоге, в заметке про язык D пишет следущее:
...ключевое слово mixin. Самый вменяемый подход к метапрограммированию, который просто ставит в угол Boo, Nemerle и иже с ними.
Mixin
Как работает метапрограммирование в языках вроде Boo? Там с помощью цитирования создается объектная модель кода – например [| x + y |] превращается в BinaryExpression. Вставки из реального мира делаются с помощью splice-оператора $. Тем самым, чтобы хоть что-то сгенерировать, нужно уметь создавать объектную модель нужного кода.
В большинстве случаев это вообще не нужно. Гораздо проще взять и сгенерировать строку (на подобии T4), которая создает текстовое представление и добавляет его в исходный код на этапе компиляции. Это в 100 раз проще чем мучаться с объектной моделью компилятора.
В языке D, инструкция mixin просто принимает строку. Напишите mixin("string Name;") и вы добавили в класс поле Name. Тривиально. Естественно что строки можно не только передавать напрямую, но и создавать отдельные функции, которые исполняются на этапе компиляции. Это решает проблему метапрограммирования в большинстве случаев.
Кто-нибудь может прокомментировать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Имхо, Дмитрий Нестерук прав в том, что для метапрограммирования в Немерле надо кое-что знать.
Но он ошибается, утверждая, что в D это не нужно. Для примеров посложнее необходимо з6ать больше, чем одно ключевое слово.
Здравствуйте, Ka3a4oK, Вы писали:
KK>Кто-нибудь может прокомментировать?
ветка по теме:
http://www.rsdn.ru/forum/nemerle/4308977.1.aspxАвтор: BogdanMart
Дата: 14.06.11
Здравствуйте, Ka3a4oK, Вы писали:
KK>Дмитрий Нестерук (IT Специалист) в своем блоге, в заметке про язык D пишет следущее:
KK>...ключевое слово mixin. Самый вменяемый подход к метапрограммированию, который просто ставит в угол Boo, Nemerle и иже с ними.
KK>Кто-нибудь может прокомментировать?
Если в двух словах, то он ламер.
Тут даже не нужно особых объяснений. Если бы он был прав, то все использовали бы препроцессор C и были бы довольны.\
Если говорить развернуто, то нужно давать довольно большую вводную. Нужно объяснить что такое квази-цитирование. Почему оно "квази" и почему цитирование. Из этого вытекает возможность использования квази-цитат в паттерн-матчинге (вещи о которой Дмитрий, видимо не подозревает). Далее нужно объяснять что такое гигиена макросов (альфа-переименования, цвета и т.п.).
Потом нужно понимать когда и как работают макросы Nemerle. А работают они во время типизации. Это дает макросам возможность получать и обрабатывать информацию о типах, а так же получать другой сервис от компилятора.
В общем, тут нужно много чего объяснять. Проще сравнить результат. Все МП что я видел на D просто печально. Если я не прав, то тыкните меня носом во что-то вроде PegGrammar, foreach, XML-лиетералы или что-то подобное. Так же интересно поглядеть на поддержку этих текстовых строк в IDE.
Здравствуйте, Ka3a4oK, Вы писали:
KK>KK>Как работает метапрограммирование в языках вроде Boo? Там с помощью цитирования создается объектная модель кода – например [| x + y |] превращается в BinaryExpression. Вставки из реального мира делаются с помощью splice-оператора $. Тем самым, чтобы хоть что-то сгенерировать, нужно уметь создавать объектную модель нужного кода.
Выделенное просто противоречит. Что там уметь, если цитирование для того и используется?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Ka3a4oK, Вы писали:
KK>>Дмитрий Нестерук (IT Специалист) в своем блоге, в заметке про язык D пишет следущее:
KK>>...ключевое слово mixin. Самый вменяемый подход к метапрограммированию, который просто ставит в угол Boo, Nemerle и иже с ними.
KK>>Кто-нибудь может прокомментировать?
VD>Если в двух словах, то он ламер.
А еще он MVP
Здравствуйте, hardcase, Вы писали:
VD>>Если в двух словах, то он ламер.
H>А еще он MVP
Ну, может в C# он что-то и понимает. Хотя данное звание обесценилось.