Как работает MPS?

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

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

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

Задача редактора MPS — визуализировать АСД в удобной форме и предоставить эффективные средства для его редактирования. В случае классических текстовых языков редактор должен предоставлять пользователю иллюзию редактирования текста, а при использовании графических языков работать как хороший редактор диаграмм.

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

В MPS используется генерационный подход. Вы можете создавать генераторы для преобразования пользовательского кода в компилируемый код, написанный на более привычном языке общего назначения. На данный момент MPS особенно хорошо генерирует Java-код. Можно также генерировать код на C, XML, FHTML, PDF, LaTeX, JavaScript и других языках.

Посмотреть демо

Что такое предметно-ориентированные языки?

«Языки программирования, выводящие уровень абстракции за рамки программирования, задавая решение, в котором непосредственно используются концепции и правила из конкретной предметной области».

Келли и Толванен (2008)

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

Проекционный редактор

Проекционный редактор позволяет эффективно редактировать код, представленный в виде абстрактного синтаксическго дерева (АСД). Он может имитировать поведение текстового редактора для текстовых нотаций, редактора диаграмм для графических языков, табличного редактора для редактирования таблиц и так далее. Пользователь взаимодействует с кодом через понятные визуальные представления и может переключаться между несколькими представлениями одного и того же кода.

Посмотреть демо

Среда разработки

Компания JetBrains известна своими производительным IDE и инструментами для разработки, и MPS не исключение.

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

Посмотреть демо

Генерация кода

Генератор MPS соединяет предметную область с конкретной реализацией.

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

В то время как DSL формализует экспертные знания в предметной области, генератор транслирует эти знания с помощью средств выбранной технологии. Генератор позволяет другим людям многократно использовать накопленные знания и опыт профессиональных разработчиков.

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

Создание DSL и расширение языков

MPS включает в себя готовый к использованию универсальный язык BaseLanguage, который является полнофункциональной реализацией Java. Со временем были добавлены другие языки: XML, C и JavaScript. Их можно использовать для создания программ. Однако настоящее преимущество MPS заключается в том, что с ее помощью можно расширять BaseLanguage и другие универсальные языки, а также создавать новые на основе существующих. MPS предоставляет специальные расширения BaseLanguage для работы со строками, коллекциями, датами, регулярными выражениями и т. д. Их также можно использовать в качестве основы для разработки новых языков. Таким образом, MPS обеспечивает необходимый инструментарий для создания предметно-ориентированных языков.

Где используется MPS

Aveco — DSL для описания распределенной архитектуры систем реального времени и генерации кода C++ для реализации серверного, клиентского и транспортного уровней

Расширяемый язык C и IDE с поддержкой формальной верификации, требований и PLE

die modellwerkstatt — простой способ разрабатывать бизнес-проложения

Meta R IDE — сочетание пользовательских интерфейсов и скриптов, помогающее биологам анализировать данные

PEoPL — IDE для разработки линеек программных продуктов на основе визуальных представлений