Re[7]: N2 - финальная бэта статьи
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.12 12:22
Оценка:
Здравствуйте, jkff, Вы писали:

VD>>Ну, и конечно же в МПС нет понятия макроса. Они не дают манипулировать АСТ программы (если я все правильно понял). Мы же, как немерловые люди, хотим получить систему которая это предоставляет. Соответственно продумываем эти возможности.


J>Не совсем так. Скорее уж весь MPS это один сплошной макрос.


Этак можно про любой язык сказать.

J>Мы определяем типы синтаксических узлов и для них определяем: форму отображения в редакторе, правила типизации, правила dataflow, правила scoping, правила трансформации в другой AST или прямо в конечный текст, правила для отладчика...


Да я как бы и так это все понял. Но это все совершенно не то. МПС средство для создания нерасширяемых языков.
Понимаю, что звучит это странно, но похоже это так. МПС не предполагает трансформацию программ. И тем более не предполагает трансформацию программ в самих в себя.

Попробую объяснить смысл сказанного мной выше. Возьмем к примеру макро-атрибуты. Классическим примером, пожалуй, является макрос Record.

1. Этот макрос не имеет какого-то своего синтаксиса. Он имеет синтаксис пользовательского атрибута применяемого к типам. Если в области видимости открыто пространство имен в котором объявлен макрос, то выбирается макрос. Иначе производится поиск аналогичного атрибута.

2. Этот макрос формирует конструкцию (конструктор) того же самого языка. Причем делает это на основании списка полей класса и других макро-атрибутов примененных к ним (атрибутов RecordIgnore).

3. Конструкторы генерированные макросом влияют на процесс типизации выражений.

4. Макросы действуют не по одиночке, а зависят друг от друга. Другие макросы могут генерировать поля, что может влиять на работу макросов генерирующих конструкторы по полям и так далее.

Я ночью поглядел МПС. Заметил там какое-то наличие ручного манипулирования АСТ, но мне кажется, что это вряд ли моно рассматривать как штатное средство. Да и почти уверен, что геморрой с зависимостями в МПС не разрулить.

J>Например, джавские узлы трансформируются прямо в текстовый исходник на джаве. А надстройки (например, лямбда-литералы и пр.; я вот делал монаду асинхронности тоже) трансформируются в джавские узлы или в другие надстройки.


Это я и так понимал, но это не то. Этого мало.

J>Притом MPS "метациклический", т.е. все эти правила также описываются в MPS-овских редакторах и их синтаксис и семантика описаны на MPS.


Это все тоже понятно.

Я покапал МПС этой ночью. Многие идеи похожи. Много общего. Но недостатков в их подходе не мало. Я потратил 4 часа на воспроизведение банального if-а. На Nemerle 1.х или на N2 у меня на это ушло бы менее минут.

Понятно, что у меня не было опыта использования МПС. Но все же я знаком со всеми необходимыми концепциями и просмотрел множество материала. Так что по идее за пол часа я должен был бы справиться.

Кроме того редактор на основе форм переодически просто бесит. Если неудобство еще можно терпеть, то исчезновении информации при редактировании — это пипец! Возникает желание швырнуть ноут в стену .

J>Если есть еще какие-то вопросы, могу Вас связать с людьми из команды MPS.


Спасибо. Я думаю, что мы с ними по любому свяжемся. С кое-кем из ДжетБрэйнса я знаком. Но не с теми кто работает над МПС.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.