2009-08-10 3 views

ответ

7

У меня нет личного опыта работы с MPS, но это было упомянуто в недавнем эпизоде ​​Herding Code with Markus Völter. Вот мое понимание. MPS - это проекционный редактор, который означает, что вместо синтаксического анализа и редактирования текста вы непосредственно редактируете подчеркнутую структуру данных языка. Как отмечает Маркус, MPS позволяет вам определять свой собственный язык, но вы также можете вводить новые языковые концепции в существующие языки. Например, вы можете добавить новое ключевое слово на Java за считанные минуты. MPS размывает линии между внутренними и внешними DSL, и при этом вы получаете статическую типизацию и поддержку инструмента, которые вы не получили бы при разработке DSL с динамическим языком, таким как Ruby.

2

MPS - интересный зверь и обладает огромным потенциалом. Идея просто фантастическая:

  • Внутри IDE (MPS) пользователь определяет более или менее визуально его DSL (s)
  • интегрированная среда разработки позволяет генерировать не только сам язык (среда выполнения или что она делает), но и «инструмент», который является более или менее полной версией IDE, которую он или другие пользователи могут использовать для редактирования этого нового языка.

Это, как говорится, к сожалению, по крайней мере, для фактических доступных версий MPS, JetBrains не в состоянии поставить выше (по крайней мере для меня), потому что: - это очень и очень трудно и сложно использовать - как это не будет были сделаны авторами простой в использовании IntelliJ. - существует слишком много концепций и «способов», которые пользователь должен изучить, прежде чем он сможет сделать что-то полезное, и все же возникает ощущение, что вы вникаете в темноту. - IDE не будет создавать IDE для вас, а что-то внутри MPS, только «Cell Based Editor» (только с этой версии).

Я попробовал MPS несколько раз (потому что концепция такая замечательная и многообещающая), но, к сожалению, с этого момента я не смог сделать что-то полезное с этим. Я мог бы быть глупым для MPS, но в то время, когда я просто выяснял основные сведения о MPS, я смог доставить полностью раздутый DSL на основе Groovy.

Я все еще следую эволюции MPS и надеюсь, что однажды осуществит то, что первоначально обещал, так как это такая фантастическая идея.

5

Я работаю на JetBrains. Я возглавлял проект MPS уже несколько лет, и теперь я работаю над другим проектом, который также полностью написан в MPS. По моему опыту, MPS стоит использовать :-)

Ответ на ваш вопрос зависит от многих факторов. Если у вас есть система на основе Ruby или вы хотите быстро создать язык, внутренний DSL на основе Ruby может быть лучшим выбором. Если вы хотите сгенерировать Java, и у вас будет время узнать MPS, MPS может быть лучшим. Вы также можете рассмотреть такие системы, как XText и т. Д., Которые являются промежуточным звеном между DSL на основе Ruby и MPS.

3

Макросы в общей объектной системе CLOS могут существенно изменить синтаксис, MPS очень похож на ANTLR, но он поставляется с графическим редактором. Однако MPS не ценит фрагментацию кода за пределами компиляции и времени выполнения, и поэтому MPS и ANTLR свернутся вокруг статических проблем метапрограммирования. Вы по-прежнему не можете создавать конструкции, которые будут принимать произвольное количество аргументов подконструкции, таких как Monadics, например; создатель списка, который принимает произвольное количество фильтров и генераторов списков. Чтобы сделать это возможным, вам необходимо программно изменить исходный АСТ. Более опытные Лисперс, возможно, могут указать на другие преобразования, которые невозможно сделать.

2

Я согласен с тем, что документация была проблемой для начинающих при изучении MPS. Это было правдой, когда был написан предыдущий пост (2010). Испытав это из первых рук и, наконец, сумев понять систему, я написал The MPS Language Workbench (тома I и II), чтобы помочь сгладить кривую обучения. Обратная связь, которую я получаю от читателей, состоит в том, что книг достаточно, чтобы помочь вам начать работу (Том I) и изучить более продвинутые аспекты платформы MPS (том II).

Относительно ответа на исходный вопрос. Да, я считаю, что MPS имеет ключевые преимущества по сравнению с разработкой DSL в Ruby или Groovy. Причина заключается в том, что в качестве языка дизайнера вы

  1. имеет гораздо больший контроль над всеми аспектами языка,
  2. языки вы строите с МОБОМ может включать в себя графические обозначения и элементы пользовательского интерфейса, которые делают их гибрид пользовательский интерфейс и текстовый DSL-скрипт/программа,
  3. MPS помогает переносить программы по мере развития вашего языка (например, рефакторинг или другие изменения на языке могут распространяться на конечных пользователей языков с использованием автоматического сценария/программы DSL миграции).

Вы можете увидеть хороший пример DSL, построенного с помощью MPS в MetaR project.

Смежные вопросы