JetBrains Meta Programming System - PullRequest
       21

JetBrains Meta Programming System

9 голосов
/ 11 августа 2009

Есть ли у кого-нибудь опыт работы с системой мета-программирования JetBrains? MPS лучше, чем, скажем, разработка DSL на Ruby?

Ответы [ 5 ]

7 голосов
/ 11 августа 2009

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

5 голосов
/ 26 ноября 2010

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

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

3 голосов
/ 23 января 2012

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

2 голосов
/ 02 июля 2015

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

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

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

Хороший пример DSL, созданного с помощью MPS, можно увидеть в проекте MetaR .

2 голосов
/ 26 июня 2010

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

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

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

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

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

...