Здравствуйте, 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.
Спасибо. Я думаю, что мы с ними по любому свяжемся. С кое-кем из ДжетБрэйнса я знаком. Но не с теми кто работает над МПС.