Mps jetbrains что такое

Обновлено: 03.07.2024

JetBrains MPS (MetaProgrammingSystem) - это языковая рабочая среда, разработанная JetBrains . MPS - это инструмент для разработки предметно-ориентированных языков (DSL). Он использует проекционное редактирование, которое позволяет пользователям преодолевать ограничения языковых парсеров и создавать редакторы DSL, например, с таблицами и диаграммами.
Он реализует языково-ориентированное программирование . MPS - это среда для определения языка, языковая рабочая среда и интегрированная среда разработки (IDE) для таких языков.

СОДЕРЖАНИЕ

Составные языки

Разработчики из разных областей могут получить выгоду от языковых расширений для конкретных предметных областей в языках программирования общего назначения. Например, разработчики Java, работающие с финансовыми приложениями, могут выиграть от встроенной поддержки денежных значений. Традиционные текстовые языки подвержены проблемам двусмысленности текста, что делает такие расширения проблематичными.

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

MPS решает проблемы грамматической двусмысленности, работая напрямую с абстрактным синтаксическим деревом . Для редактирования такого дерева используется текстовый проекционный редактор .

Многоразовая языковая инфраструктура

MPS предоставляет многоразовую языковую инфраструктуру, настроенную с использованием языков определения языков. MPS также автоматически предоставляет множество сервисов IDE: редактор, автозавершение кода , поиск использований и т. Д.

Существующие языки

  • Базовый язык - 99% Java с переопределением MPS. Есть много расширений этого языка
    • язык коллекций
    • язык дат
    • язык закрытия
    • язык регулярных выражений
    • язык структуры
    • язык редактора
    • язык ограничений
    • системный язык типа
    • язык генератора

    Приложения MPS

    Mbeddr

    mbeddr - это встроенная система разработки, основанная на MPS. В нем есть языки, адаптированные для встраиваемой разработки, и формальные методы :

    • Основной язык C
    • Компоненты
    • Физические единицы
    • Государственные машины

    YouTrack

    В октябре 2009 года JetBrains выпустила систему отслеживания ошибок YouTrack - первый коммерческий программный продукт, разработанный с помощью MPS.

    Редактор Realaxy

    В апреле 2010 года была выпущена бета-версия Realaxy ActionScript Editor , первая коммерческая IDE, основанная на платформе MPS.

    PEoPL

    PEoPL - это инструмент для разработки линейки программных продуктов, реализованный в MPS.

    Вступление

    Ладно, раз уж я начал целый пост писать на эту тему, попробую сначала объяснить что такое MPS. Расшифровывается это как MetaProgramming System (там может еще где-то тире было после Meta), но по сути дела система эта не для метапрограммирования вовсе, а для кодогенерации. Но это не важно – MPS уникальна в том, что позволяет определять структурированные языки – структурированные значит что вы с помощью MPSного DSL определяете ваш особый DSL.

    Ниже приведена последовательность шагов чтобы сделать минимальную DSL для формирования проектных планов. Внимание: в посте очень много скриншотов

    Создание проекта

    Создаем новый проект


    и создаем новый язык


    Далее идет вопрос о создании solution’а (по аналогии с Visual Studio это наверное скорее project чем solution, но не важно) в котором можно будет тестировать DSL. Заметьте что в отличии от DSL Tools, тестовый проект не вынесен в отдельный блок который мы изначально не видим. Ну и конечно в отличии от DSL Tools, весь наш DSL умещается в одном «проекте» (тут очень легко с терминологией запутаться) а не в двух.


    Жмем Finish и получаем вот это:

    Концепты

    Концепция – это просто сущность DSLи. В нашем случае, например, есть корневая концепция «проект». Сначала добавляем ее:

    С этого момента придется очень ловко работать клавиатурой. Четыре простых правила:

    • Tab позволяет прыгать между элементами
    • Enter добавляет что-то – например параметр или название чего-то
    • Ctrl+Space это просто эпичный shortcut т.к. он показывает варианты ввода (это фактически вызов IntelliSense)
    • Alt+Enter показывает подсказки в стиле контекстных подсказок ReSharper’а

    Насчет концепта – это почти как Java-класс. Мы реализуем INamedConcept (просто псевдодекоратор чтобы получить свойство name ), делаем концепт «корневым» и добавляем свойство startDate – заметьте что для свойств доступны только 3 типа – string , int и boolean .


    С концепцией пока всё. Теперь нам нужно описать редактор.

    Редактор

    Переходим на таб Editor для нашего концепта (или концепции – как правильно?) и кликаем прямо в пустое пространство:


    Далее начинается шаманство под заголовком node cell layout: – тут нужно определить структуру нашей DSLи. В принципе, Ctrl+Space решает, но следует помнить хотя бы горизонтальные и вертикальные layout’ы – это [/ и [> соответственно:


    Теперь внутренности определяются либо через constant (это фиксированный текст которые всегда будет в определении) либо через переменные в фигурных скобках – тут будет подсказка:


    Для нашего DSL конечным результатом (пока) будет вот это:


    Примерно на этом этапе можно нажать Ctrl+F9 и регенерировать проект.

    Генератор

    Генератор – это то, что создаст из DSL осмысленный код. Выбираем его из контекстного меню проекта:


    Даем генератору гламурненькое имя

    Теперь добавляем в него реализацию. Для начала, дабы не мудрить, спроецируем наш DSL на Java-класс:


    baseLanguage это Java, для тех кто не понял.

    В плане ввода для шаблона определяем наш концепт ( Project ). Дальше нужно добавить реализацию. Идем в секцию <<static methods>> и добавляем static void Main() . Внутри добавляем, например, выписку по проекту (пока что пример у нас простой):


    Причина, по которой я так странно описал строку, в том, что я последствии могу нажать Alt+Enter на тех строках которые нужно подменить, и заменить их макросами. Макрос – это то, что превращает из нашего концепта в нечто осмысленное. Вы уже догадались какие intentions к чему применить? Мне кажется тут всё понятно.

    Теперь последний штрих – нужно задать мэппинг с концепта на генератор. Для этого, редактируем нод main :


    Собственно, добавляем сюда мэппинг с нашей концепции Project на класс MyProject . По аналогии, можно наверное было бы замэпить концепцию на метод, поле, и т.д.


    Проверка

    Помните песочницу? Ну, это, проект EstimationDSL.sandbox ? Самое время ей воспользоваться. Сначала делаем Ctrl+F9 чтобы все перегенерировать. Теперь добавляем новую «модель» (тут с терминологией становится совсем плохо):


    Задаем название, плюс у меня почему-то есть соблазн прописать стереотип как generator, хотя я понятия не имею что это значит:

    Идем дальше и появляется вот такое окно – в этом окне можно настроить те фичи, которые будут использованы непосредственно для этого конкретного тестового скрипта:


    В плане языков выбираем наш новый язык, а также добавляем generator – он в принципе должен добавляться сам, но что-то в моей MPS «слетело» и теперь приходится его добавлять руками:


    В табе Advanced выбираем наш язык:


    Вот собственно и все. Теперь добавляем новый тестовый элемент (у нас это Project ):

    И получаем – ура! – редактор для нашего DSL:

    Чтобы быстренько протестировать DSL, вводим данные и выбираем в меню проекта Generate Text :

    Результат не заставит себя ждать:

    А это, собственно, именно то, что нам и хотелось получить.

    Заключение

    Еще посетила такая мысль: почему это не коммерческое ПО? Я бы сразу налепил на это ценник и записал бы 15 скринкастов для JetBrains TV. Ну да ладно, может это все впереди? :)

    Содержание

    Разработка языков

    MPS позволяет разрабатывать новые языки программирования и языковые расширения существующих языков.

    В MPS грамматическая двойственность решена работой непосредственно с абстрактным синтаксическим деревом, которое редактируется проекционным редактором в текстовой манере [2] [3] .

    Встроенные языки

    Языки описания языков:

    Применение

    Примечания

    Ссылки

    • Проставив сноски, внести более точные указания на источники.
    • Добавить иллюстрации.
    • Программное обеспечение по алфавиту
    • Интегрированные среды разработки
    • Свободные интегрированные среды разработки
    • Кроссплатформенное программное обеспечение
    • Свободное программное обеспечение, написанное на Java

    Wikimedia Foundation . 2010 .

    Полезное

    Смотреть что такое "JetBrains MPS" в других словарях:

    JetBrains — s.r.o. Тип … Википедия

    JetBrains — s.r.o. Rechtsform S.r.o. (Tschechien) Gründung 2000 Sitz … Deutsch Wikipedia

    JetBrains — Infobox Company company name = JetBrains s.r.o. company logo = company type = Private foundation = Czech Republic (2000) location = Czech Republic, Russia, Massachusetts key people = Sergey Dmitriev (JetBrains), Cofounder, CEO Valentin Kipiatkov … Wikipedia

    YouTrack — YouTrack … Википедия

    Metaprogramming — This article is about the computer programming technique. For the management technique, see Metaprogramming (management). Programming paradigms Agent oriented Automata based Component based … Wikipedia

    Extensible programming — is a term used in computer science to describe a style of computer programming that focuses on mechanisms to extend the programming language, compiler and runtime environment. Extensible programming languages, supporting this style of programming … Wikipedia

    Сравнение систем отслеживания ошибок — Эта страница содержит сравнение как систем отслеживания ошибок так и систем управления проектами. Содержание 1 Системы управления проектами 2 Системы отслеживания ошибок … Википедия

    JetBrains MPS (MetaProgrammingSystem) - это языковая рабочая среда, разработанная JetBrains . MPS - это инструмент для разработки предметно-ориентированных языков (DSL). Он использует проекционное редактирование, которое позволяет пользователям преодолевать ограничения языковых парсеров и создавать редакторы DSL, например, с таблицами и диаграммами. [3]
    Он реализует языково-ориентированное программирование [ необходима ссылка ] . MPS - это среда для определения языка, языковая рабочая среда и интегрированная среда разработки (IDE) для таких языков. [4] [5] [6]

    Разработчики из разных областей могут извлечь выгоду из языковых расширений для конкретных областей в языках программирования общего назначения. Например, разработчики Java, работающие с финансовыми приложениями, могут выиграть от встроенной поддержки денежных значений. К сожалению, традиционные текстовые языки подвержены проблемам двусмысленности текста, что делает такие расширения проблематичными.

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

    MPS решает проблемы грамматической двусмысленности, работая напрямую с абстрактным синтаксическим деревом . Для редактирования такого дерева используется текстовый проекционный редактор . [7] [8]

    MPS предоставляет многоразовую языковую инфраструктуру, настроенную с использованием языков определения языков. MPS также автоматически предоставляет множество сервисов IDE: редактор, автозавершение кода , поиск использований и т. Д.