Есть ли у кого-нибудь опыт работы с Meta Programming System JetBrains? Является ли MPS лучше, чем, скажем, разработка DSL в Ruby?Система программирования метаданных JetBrains
ответ
У меня нет личного опыта работы с MPS, но это было упомянуто в недавнем эпизоде Herding Code with Markus Völter. Вот мое понимание. MPS - это проекционный редактор, который означает, что вместо синтаксического анализа и редактирования текста вы непосредственно редактируете подчеркнутую структуру данных языка. Как отмечает Маркус, MPS позволяет вам определять свой собственный язык, но вы также можете вводить новые языковые концепции в существующие языки. Например, вы можете добавить новое ключевое слово на Java за считанные минуты. MPS размывает линии между внутренними и внешними DSL, и при этом вы получаете статическую типизацию и поддержку инструмента, которые вы не получили бы при разработке DSL с динамическим языком, таким как Ruby.
MPS - интересный зверь и обладает огромным потенциалом. Идея просто фантастическая:
- Внутри IDE (MPS) пользователь определяет более или менее визуально его DSL (s)
- интегрированная среда разработки позволяет генерировать не только сам язык (среда выполнения или что она делает), но и «инструмент», который является более или менее полной версией IDE, которую он или другие пользователи могут использовать для редактирования этого нового языка.
Это, как говорится, к сожалению, по крайней мере, для фактических доступных версий MPS, JetBrains не в состоянии поставить выше (по крайней мере для меня), потому что: - это очень и очень трудно и сложно использовать - как это не будет были сделаны авторами простой в использовании IntelliJ. - существует слишком много концепций и «способов», которые пользователь должен изучить, прежде чем он сможет сделать что-то полезное, и все же возникает ощущение, что вы вникаете в темноту. - IDE не будет создавать IDE для вас, а что-то внутри MPS, только «Cell Based Editor» (только с этой версии).
Я попробовал MPS несколько раз (потому что концепция такая замечательная и многообещающая), но, к сожалению, с этого момента я не смог сделать что-то полезное с этим. Я мог бы быть глупым для MPS, но в то время, когда я просто выяснял основные сведения о MPS, я смог доставить полностью раздутый DSL на основе Groovy.
Я все еще следую эволюции MPS и надеюсь, что однажды осуществит то, что первоначально обещал, так как это такая фантастическая идея.
Я работаю на JetBrains. Я возглавлял проект MPS уже несколько лет, и теперь я работаю над другим проектом, который также полностью написан в MPS. По моему опыту, MPS стоит использовать :-)
Ответ на ваш вопрос зависит от многих факторов. Если у вас есть система на основе Ruby или вы хотите быстро создать язык, внутренний DSL на основе Ruby может быть лучшим выбором. Если вы хотите сгенерировать Java, и у вас будет время узнать MPS, MPS может быть лучшим. Вы также можете рассмотреть такие системы, как XText и т. Д., Которые являются промежуточным звеном между DSL на основе Ruby и MPS.
Макросы в общей объектной системе CLOS могут существенно изменить синтаксис, MPS очень похож на ANTLR, но он поставляется с графическим редактором. Однако MPS не ценит фрагментацию кода за пределами компиляции и времени выполнения, и поэтому MPS и ANTLR свернутся вокруг статических проблем метапрограммирования. Вы по-прежнему не можете создавать конструкции, которые будут принимать произвольное количество аргументов подконструкции, таких как Monadics, например; создатель списка, который принимает произвольное количество фильтров и генераторов списков. Чтобы сделать это возможным, вам необходимо программно изменить исходный АСТ. Более опытные Лисперс, возможно, могут указать на другие преобразования, которые невозможно сделать.
Я согласен с тем, что документация была проблемой для начинающих при изучении MPS. Это было правдой, когда был написан предыдущий пост (2010). Испытав это из первых рук и, наконец, сумев понять систему, я написал The MPS Language Workbench (тома I и II), чтобы помочь сгладить кривую обучения. Обратная связь, которую я получаю от читателей, состоит в том, что книг достаточно, чтобы помочь вам начать работу (Том I) и изучить более продвинутые аспекты платформы MPS (том II).
Относительно ответа на исходный вопрос. Да, я считаю, что MPS имеет ключевые преимущества по сравнению с разработкой DSL в Ruby или Groovy. Причина заключается в том, что в качестве языка дизайнера вы
- имеет гораздо больший контроль над всеми аспектами языка,
- языки вы строите с МОБОМ может включать в себя графические обозначения и элементы пользовательского интерфейса, которые делают их гибрид пользовательский интерфейс и текстовый DSL-скрипт/программа,
- MPS помогает переносить программы по мере развития вашего языка (например, рефакторинг или другие изменения на языке могут распространяться на конечных пользователей языков с использованием автоматического сценария/программы DSL миграции).
Вы можете увидеть хороший пример DSL, построенного с помощью MPS в MetaR project.
- 1. Jetbrains CLion [GCC linking]
- 2. Какая система управления документами предлагает настройку метаданных без использования IDE?
- 3. Поддерживает ли любая современная файловая система произвольную обработку метаданных?
- 4. Параллельные языки программирования, которые выглядят детерминированными?
- 5. Система документации, которая не зависит от языка программирования
- 6. Perl: реализация программирования сокетов (система никогда не возвращается)
- 7. JetBrains Idea Custom Ligatures
- 8. JetBrains IDE с Demandware
- 9. Почему jetbrains пишет ошибку
- 10. Jetbrains PhpStorm HTML indentation
- 11. JetBrains Intellj отсутствует javax.validation
- 12. JetBrains «tag.class» живой шаблон
- 13. Значок панели метаданных метаданных MDX?
- 14. Идентификатор языка программирования Exe
- 15. Что такое использование метаданных Clojure?
- 16. JetBrains отключить авто прокрутку вправо
- 17. Jetbrains PyCharm с Enthought Canopy
- 18. Запуск Ajax/NodeJS с JetBrains
- 19. Блокнот или JetBrains регулярное выражение
- 20. Поток в JetBrains/IntelliJ IDEA
- 21. Интеграция CPanel с JetBrains PhpStorm
- 22. Копировать/вставить поведение JetBrains PyCharm
- 23. JetBrains PhpStorm TODO замедляет редактирования
- 24. JetBrains @Contract с использованием поля
- 25. JetBrains MPS Shapes ошибка учебник
- 26. JetBrains - равный Eclipse quick doc
- 27. Jetbrains Rider + Visual Studio WPF
- 28. Mate libGDX и Jetbrains MPS
- 29. Выполнение параллельных сеансов профилирования JetBrains
- 30. Официальный образец MEAN для JetBrains