Re[2]: [N2] Синтаксические макросы
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.11 13:46
Оценка:
Здравствуйте, catbert, Вы писали:

C>Зачем ";"? Ведь в Немерле-1 к любому выражению и так можно приписать ; без последствий.


Сдирал грамматику с макроса из Nemerle 1. Зачем-то в ней ";"? присутствует. Даже не задумывался зачем.

C>2. Почему бы не дать каждому виду макросов свое имя? Например, оставить macro для самого популярного вида: тех, которые расширяют другие макросы. Расширяемые макросы типа Expr назвать macrobase, или там choice, или extensible.


Не знаю. Вопросы именования меня сейчас волнуют меньше всего.
Вопрос только, что это даст? И как это все объяснять в последствии (в документации).

C>3. Я так и не понял, во что в конечном итоге переписываются макросы. В Nemerle 1 с этим просто — MacroCall переписывается в PExpr. Но в Nemerle 2 нету никакого PExpr! Есть только Expr, который сам по себе макрос.

C>@?. переписывается в if, if переписывается в match, но match тоже Expr. Что с ним-то делать?

Каждый макрос вводит новый тип описывающий АСТ. Полями такого типа становятся аргументы макроса. Даже если у макроса есть тело, при парсинге сначала формируется АСТ верхнего уровня. MacroCall больше не будет, так как для любого макроса будет полноценное АСТ.

Преобразование же будет выполняться уже потом, после формирования полного дерева парсинга. При этом на вход преобрзователь будет получать ту самую ветку АСТ описанную заголовком макроса.

C>4. Мне кажется, не стоит называть дерево разбора Ast. AST означает Abstract syntax tree — важное понятие для авторов языка, и непонятную белиберду для пользователей. Им вряд ли интересно, что такое ast, почему оно abstract и так далее.


Ну, а как его называть? Можно назвать PerseTree. Но это длинно и ничего не меняет.

C>Это как с лямбдами. Почему они лямбды? Кому интересно, что их прародитель — λ-исчисление какого-то древнего дядьки? Название "анонимные функции" понятнее.


С лямбдами, как раз, название прижилось и всем уже по фигу почему они так называются. На сегодня почти никто не использует термины вроде анонимной функции. Или используют для недосинтаксиса C# появившегося в версии 2.0.

C>В данном случае, проще и правильнее назвать класс просто Code.


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