Каковы основные различия между MPS Jetbrains и Eclipse Xtext?

Я использовал Eclipse Xtext в нескольких проектах. Мне нравилась простота определения грамматики поверх (мета)модели Ecore и возможность генерировать все для вас, включая потрясающий редактор плагинов Eclipse, но мне было очень некомфортно с базовым фреймворк EMF со всем, что жестко привязано к статическим полям.

Недавно я наткнулся на MPS (систему метапрограммирования) от Jetbrains. Он основан на совершенно другой философии. В то время как Xtext предназначен для создания текстовых DSL, генерирующих парсер для вас (и инстанцирующих эти EObject), в языке, созданном MPS, редактируется непосредственно базовая структура модели. Пока я понимаю.

Есть ли у кого-нибудь опыт работы с обоими этими инструментами DSL, чтобы указать на основные различия с точки зрения работы с ними, предполагаемые варианты использования и аудиторию, сложность, кривую обучения (честно говоря, чтобы начать использовать Xtext, нужно довольно много знать о внутренностях EMF) , генерация кода и т.д.?


person Karel Smutný    schedule 08.04.2010    source источник


Ответы (3)


Xtext — это традиционный подход, основанный на анализаторе, который работает с обычными текстовыми файлами. Их можно отправлять по почте, сохранять и сравнивать с любой системой контроля версий и даже изменять вне редактора с помощью вашего любимого инструмента командной строки. Он тесно интегрируется в Eclipse EMF и довольно хорошо работает с целой кучей инструментов, которые вы можете найти в экосистеме Eclipse. В последнее время он превратился (и продолжает развиваться) в своего рода «набор инструментов для разработки языков программирования», где он позволяет вам поддерживать все виды дополнительных инструментов.

С другой стороны, MPS работает с проекционным редактором, который просто «выглядит» как текст, пока вы работаете в среде. Базовый формат хранения зависит от инструмента (читай: непригоден для использования без специальных программ) и не анализирует текстовые файлы. Это дает некоторые большие преимущества, такие как встраивание произвольных языков (например, Regex внутри SQL внутри Java). Цепочка инструментов позволяет генерировать в форме модели преобразования модели, которые, как редактор, поначалу кажутся необычными, но также мощными.

Оба инструмента каким-то образом запирают вас в своем мире (MPS/Eclipse). Несмотря на то, что вы можете запустить оба в автономном режиме, нельзя легко запустить редактор Xtext внутри другой IDE. То же самое справедливо и для МПС. Я бы сказал, что Xtext «более открыт», поскольку, с одной стороны, он работает с обычными текстовыми файлами, а с другой стороны, хорошо работает с установленными инструментами (в целом EMF и Eclipse).

Отвечает ли это на ваш вопрос? Я постараюсь дать вам более точные ответы, если у вас есть более подробные вопросы.

person Heiko Behrens    schedule 09.04.2010
comment
Спасибо, Хейко, теперь у меня есть лучшее понимание :) Я получил материал, основанный на тексте и проекции, и его последствия для контроля версий, различий и т. Д. Что я хотел бы знать дальше, так это различия в типичном использовании инструментов и в их наборы инструментов. С Xtext я получаю много Java-кода, сгенерированного из базовой модели Ecore, который я могу мгновенно использовать в любой Java-программе. Что меня напугало при чтении официального руководства по MPS, так это шаблоны генерации кода, которые заняли довольно много места. Могу ли я каким-то образом пройтись по модели, созданной из того, что я пишу на своем языке... легко, как с EMF? - person Karel Smutný; 09.04.2010
comment
На самом деле, люди, стоящие за Xtext, прикладывают много усилий, чтобы сделать возможным использование языков Xtext в других средах помимо Eclipse, например, в веб-редакторах с помощью проекта Orion и поддержки IntelliJ IDEA. Подробнее об этом можно прочитать на eclipse.org/Xtext/news.html. - person Miguel Jiménez; 31.07.2015
comment
Все это верно, однако MPS поддерживает пользовательское хранилище. Хотя по умолчанию он сохраняет файл в своем собственном формате (на основе XML), вы можете предоставить собственную сериализацию/десериализацию. - person Federico Tomassetti; 24.04.2016
comment
Xtext на данный момент также может генерировать плагины для редакторов Eclipse, IntelliJIdea и веб-браузеров! - person idichekop; 29.09.2017
comment
Во-вторых, Xtext имеет веб-интеграцию. Я могу запустить Xtext (с проверкой и завершением кода) в своем собственном веб-приложении, и, хотя не очень очевидно, как это сделать, это также не очень сложно, если вы потратите день или два, чтобы понять это. Что касается MPS - я даже не уверен, что это возможно. - person mvmn; 18.12.2018

По моему мнению, Jetbrain MPS поначалу легче освоить. Вам не нужно работать с файлами конфигурации, такими как файлы рабочего процесса в xtext.

Основное отличие состоит в том, что в MPS вы редактируете модель напрямую, и эта модель отображается вам в представлении синтаксиса/редактора. В xtext вы редактируете синтаксис, и модель генерируется/анализируется.

На мой взгляд MPS мощнее. Вы можете гораздо проще комбинировать языки и расширять их. Большим преимуществом проекционных редакторов является то, что вы можете скрыть информацию или показать дополнительную информацию, полученную из модели. Вы также можете использовать различные представления, такие как таблицы или графики (появляется в MPS 2.1).

Контроль версий может осуществляться с помощью MPS. Есть инструмент слияния / сравнения, который работает с древовидной моделью.

person Michael Brunner    schedule 15.04.2011

Основная идея MPS не в том, чтобы использовать проекционный редактор вместо текстового. Это языковая совместимость. Например, вы можете расширить Java с помощью кортежей, а другой человек может расширить Java с помощью асинхронных вызовов методов. В текстовых инструментах (таких как XText) невозможно гарантировать, что два расширения будут хорошо работать вместе, поскольку результирующая грамматика может быть неоднозначной. МПС делает это возможным. Вы просто добавляете язык в свой проект так же, как добавляете библиотеки.

person Konstantin Solomatov    schedule 26.11.2010