Метапрограммирование в D
От: Ka3a4oK  
Дата: 03.09.11 21:39
Оценка:
Дмитрий Нестерук (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>>
Re: Метапрограммирование в D
От: Аноним  
Дата: 03.09.11 21:48
Оценка:
Имхо, Дмитрий Нестерук прав в том, что для метапрограммирования в Немерле надо кое-что знать.

Но он ошибается, утверждая, что в D это не нужно. Для примеров посложнее необходимо з6ать больше, чем одно ключевое слово.
Re: Метапрограммирование в D
От: Jack128  
Дата: 03.09.11 22:03
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Кто-нибудь может прокомментировать?

ветка по теме: http://www.rsdn.ru/forum/nemerle/4308977.1.aspx
Автор: BogdanMart
Дата: 14.06.11
Re: Метапрограммирование в D
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.09.11 22:49
Оценка: 4 (1)
Здравствуйте, Ka3a4oK, Вы писали:

KK>Дмитрий Нестерук (IT Специалист) в своем блоге, в заметке про язык D пишет следущее:

KK>

...ключевое слово mixin. Самый вменяемый подход к метапрограммированию, который просто ставит в угол Boo, Nemerle и иже с ними.


KK>Кто-нибудь может прокомментировать?


Если в двух словах, то он ламер.

Тут даже не нужно особых объяснений. Если бы он был прав, то все использовали бы препроцессор C и были бы довольны.\

Если говорить развернуто, то нужно давать довольно большую вводную. Нужно объяснить что такое квази-цитирование. Почему оно "квази" и почему цитирование. Из этого вытекает возможность использования квази-цитат в паттерн-матчинге (вещи о которой Дмитрий, видимо не подозревает). Далее нужно объяснять что такое гигиена макросов (альфа-переименования, цвета и т.п.).
Потом нужно понимать когда и как работают макросы Nemerle. А работают они во время типизации. Это дает макросам возможность получать и обрабатывать информацию о типах, а так же получать другой сервис от компилятора.

В общем, тут нужно много чего объяснять. Проще сравнить результат. Все МП что я видел на D просто печально. Если я не прав, то тыкните меня носом во что-то вроде PegGrammar, foreach, XML-лиетералы или что-то подобное. Так же интересно поглядеть на поддержку этих текстовых строк в IDE.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Метапрограммирование в D
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.09.11 12:27
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>

KK>Как работает метапрограммирование в языках вроде Boo? Там с помощью цитирования создается объектная модель кода – например [| x + y |] превращается в BinaryExpression. Вставки из реального мира делаются с помощью splice-оператора $. Тем самым, чтобы хоть что-то сгенерировать, нужно уметь создавать объектную модель нужного кода.


Выделенное просто противоречит. Что там уметь, если цитирование для того и используется?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Метапрограммирование в D
От: hardcase Пират http://nemerle.org
Дата: 05.09.11 17:41
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Ka3a4oK, Вы писали:


KK>>Дмитрий Нестерук (IT Специалист) в своем блоге, в заметке про язык D пишет следущее:

KK>>

...ключевое слово mixin. Самый вменяемый подход к метапрограммированию, который просто ставит в угол Boo, Nemerle и иже с ними.


KK>>Кто-нибудь может прокомментировать?


VD>Если в двух словах, то он ламер.


А еще он MVP
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Метапрограммирование в D
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.11 18:10
Оценка:
Здравствуйте, hardcase, Вы писали:

VD>>Если в двух словах, то он ламер.


H>А еще он MVP


Ну, может в C# он что-то и понимает. Хотя данное звание обесценилось.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.