Каковы основные различия между MPS Jetbrains и Eclipse Xtext? - PullRequest
50 голосов
/ 09 апреля 2010

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

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

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

Ответы [ 3 ]

56 голосов
/ 09 апреля 2010

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

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

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

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

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

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

15 голосов
/ 15 апреля 2011

На мой взгляд, MPS от Jetbrain поначалу легче выучить. Вам не нужно работать с файлами конфигурации, такими как Workflow-Files в xtext.

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

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

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

...