Макросы vs шаблоны

Aug 29, 2013 10:24

Продолжая дискуссию про метапрограммирование в D: http://thedeemon.livejournal.com/68456.htmlRead more... )

macros, scala

Leave a comment

Comments 19

moi_drug_daun August 29 2013, 11:14:28 UTC
Отдам свой голос.
С точки зрения аматора Дишные шаблоны выглядят наглядней и аккуратней.

Reply

wizzard0 August 29 2013, 12:46:35 UTC
+1 к наглядности и аккуратности

Reply


andy128k August 29 2013, 13:10:53 UTC
макросы круче потому, что на них можно реализовать не только темплейты

Reply


akuklev August 29 2013, 15:21:32 UTC
Вопрос как всегда в том, что у нас дефолтный уровень и что мы эскейпим. Дефолтным уровнем всегда должно быть то, чего больше, что более по-существу важно при чтении. А это в зависимости от задачи может быть как метакод, так и рантаймкод. В теле макроса дефолтный уровень код макроса, а генерируемый код инклюдится в виде квазицитат. В темплейтах наоборот дефолтный уровень target-код, а метакод эскейпится словом static. Шош тут делать, разные задачи элегантнее делать по-разному. Ту, что ты привёл выше, темплейтами делать элегантнее. Естественно, тривиальные с точки зрения алгоритмики макросов задачи темплейтами делать кошерно и красиво ( ... )

Reply

atlanter August 29 2013, 16:15:11 UTC
Согласен. Короче, как обычно, нужно сделать и то и другое :)

Reply

ext_1178598 August 29 2013, 16:17:04 UTC
Это все вопрос исключительно выразительности макросистемы. Если можно раскрываться в макросы и квазицитаты, то можно сделать альтернативные макро-объявления, в которых дефолтным уровнем будет уровень рантайма.

Reply

thedeemon August 29 2013, 17:16:00 UTC
D не одним static if богат, там и "два вложенных цикла, да рекурсийка, да..." так же просто делаются. TypeTuple, раскрываемый в статике foreach по ним, рекурсивные шаблонные ф-ии и исполнение почти произвольного чистого кода при компиляции - это вам не старинные плюсовые темплейты.

Reply


ext_956459 August 29 2013, 20:26:01 UTC
однозначно д-шный подход лучше, т.к. это именно то, что я хотел бы сказать (написать)

ну или что почти то же самое - разница между макросом и static if это разница между грудой печатных плат и устройством, запакованным в корпус

можно чуть изменить формулировку - скажем, потребовать, чтобы MyRange(R) работала даже в том случае, если R *тоже* зависит от каких-то членов или методов MyRange(R) напрямую или через цепочку типов; при этом *в макросе* необходимо будет, например, производить топологическую сортировку и выявлять кольцевые зависимости (куча кода), однако синтаксис static if останется неизменным

декларативность, короче

Reply


justy_tylor August 30 2013, 13:17:59 UTC
Это частный случай. Для описания полиморфных контейнеров подход D более пригоден. Там уровень абстракции практически не меняется. А на других уровнях абстракции (например, получение кода из датасетов) уже понадобятся внешние генераторы кода или внутренние макросы с эффектами.

Впрочем, модификатор static здесь выглядит как масло масляное. Глобальные декларации и описания типов - они уже compile time. Вероятно, оставили для схожести с мета-включениями внутри функций, чтобы не смущать юных падаванов.

Reply


Leave a comment

Up