mps что это такое

JetBrains MPS — IDE для разработки проблемно-ориентированных языков программирования

Введение

MPS — это среда разработки языков программирования на платформе Intellij Idea. Она предоставляет возможность моделировать языки программирования, описывать структуры, сосредотачиваясь конкретно на дизайне и бизнес-логике, не отвлекаясь на парсеры, лексеры и различные сторонние фичи языка. Что нужно сразу обозначить: язык, который разрабатывается с помощью MPS, не компилируется в рабочую программу. Чаще всего он генерируется в модели других языков либо в текстовую форму.

Почему я решил написать этот пост? Я считаю, что это очень недооцененная возможность, а недооценена она потому что порог вхождения очень высок, плюс это один из самых непопулярных продуктов JetBrains.

Документация очень подробная, описывает все возможности, но если нет осознания «что я делаю и зачем мне это делать», то она вряд ли будет полезна. Также есть серия уроков от JetBrains на YouTube, но опять же, я более-менее начал понимать, что происходит, только после двух просмотров всей серии и досканального изучения предлагаемых sample проектов.

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

Концепция

MPS (дальше — среда / MPS) предоставляет возможность создавать модули двух типов — Language и Solution. Первый является описанием языка и его аспектов, второй используется для разработки каких-либо проектов, тестирования языка / языков, расширений языков.

Я начну с Language.

Самое важное, что нужно понять с начала, — это процесс разработки языка и что с ним происходит потом.

Итак, 1 статья — 1 кусок конечного проекта.

Создаем проект в MPS

mps что это такое

На данном этапе мы выбираем название проекта и название языка, также можно создать Sandbox solution — модуль, в котором мы будем смотреть, как работает наш язык.

mps что это такое

У нас есть пустой проект. Совсем пустой. Но в языке WeatherPrediction есть вложенные директивы — structure, editor… Это аспекты языка — в них мы описываем поведение языка в разных ситуациях. Например, structure содержит основные концепты языка, а editor — то, как они будут отображаться в редакторе кода. Это должно звучать очень абстрактно, особенно если Вы еще не знакомы с MPS. Понимаю. Так что сразу в бой.

Сначала нам нужно объявить root концепт языка. В переводе на русский — мы создаем некую структуру, которая будет обобщать все другие структуры. В Java это был бы

mps что это такое

У концепта есть 3 типа данных, которые он может содержать:

mps что это такое

Что здесь происходит: Мы определяем концепт, называем его PredictionList, говорим, что его можно реализовать как root концепт и наследуемся от INamedConcept. Если посмотреть на его definition (Ctrl + B)

mps что это такое

то мы увидим, что это interface concept, у которого есть property name: string, что, собственно говоря, логично из названия

Обратите внимание, что синтаксис похож на язык программирования. Это так: этот код написан на языке jetbrains.mps.lang.structure, который описывает концепты языка.

Если мы сейчас соберем проект и захотим посмотреть, что получилось, то нам нужно будет создать модель в модуле WeatherPrediction.sandbox.

mps что это такое

mps что это такое

Заменим no name на Saint Petersburg

Бум! У нас есть дефолтная визуализация концепта. Чтобы посмотреть AST, нажмите на любое место в редакторе и нажмите хоткей Alt + X

mps что это такое

mps что это такое

Здесь мы можем описать то, как будет отображаться наш PredictionList в редакторе кода.
Пока не будем вдаваться в подробности, как тут это все сделано, просто пишем [- и у нас создается массив ячеек. Все просто: в каждой ячейке — какой то константный текст / property / reference / children. И да, отображение описывается другим языком — jetbrains.mps.lang.editor.
Мы хотим, чтобы наш список предсказаний погоды выглядел следующим образом:
Weather prediction rules for %name%.

mps что это такое

В первой ячейке — константный текст, во второй — , обращение к property по ключу name.

Пересобираем наш язык (Ctrl + F9) и смотрим в Sandbox solution, где мы до этого создали пустой PredicitonList по имени Saint Petersburg.

mps что это такое

Все работает, AST то же самое, что и до наших модификаций.

На этом я, наверное, остановлюсь пока что, чтобы получить фидбек. В следующем посте я планирую добавить еще парочку концептов, а так же генерацию кода на Java.

Спасибо за внимание! Пожалуйста, все пожелания, непонятки и вопросы и пишите в комменты. Если вопросы конкретные и простые, отвечу в комментариях, иначе добавлю в следующий пост.

Источник

Mps что это такое

Тематики

Тематики

микропроцессорная система

[Е.С.Алексеев, А.А.Мячев. Англо-русский толковый словарь по системотехнике ЭВМ. Москва 1993]

Тематики

минимальные требования к техническим характеристикам

[А.С.Гольдберг. Англо-русский энергетический словарь. 2006 г.]

Тематики

многопроцессорная система
мультипроцессорная система

[Е.С.Алексеев, А.А.Мячев. Англо-русский толковый словарь по системотехнике ЭВМ. Москва 1993]

Тематики

Синонимы

объемно-календарный план
1. Предполагаемый план производства изделий. Плановик составляет этот план, и он, в свою очередь, превращается в ряд плановых показателей, являющихся основой для дальнейшего планирования потребности в материальных ресурсах. Это строго производственный план компании (в отличие от прогноза и потребности), выраженный в определенном для производства ассортименте изделий, объемах и сроках их производства. При составлении объемно-календарных планов следует принимать во внимание прогноз, укрупненный производственный план, маркетинговые планы и планы замены продуктовых линий и другие исходные данные, такие как незавершенное производство готовой продукции, наличие материалов, производственных мощностей.
2. Результат процесса объемно-календарного планирования. План, регулирующий производство и закупку изделий, обусловленных данным методом планирования.
3. План более высокого порядка, чем производственный. Планирование осуществляется, как правило, в интервале от месяца до пяти лет. Может быть подготовлен как фактический, так и сценарный MPS.
[http://www.lexikon.ru/dict/uprav/index.html]

Тематики

основная система (релейной) защиты

[Я.Н.Лугинский, М.С.Фези-Жилинская, Ю.С.Кабиров. Англо-русский словарь по электротехнике и электроэнергетике, Москва, 1999]

Тематики

Тематики

система определения местоположения при подвижной связи

[Л.Г.Суменко. Англо-русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.]

Тематики

система с мультипрограммированием

[Е.С.Алексеев, А.А.Мячев. Англо-русский толковый словарь по системотехнике ЭВМ. Москва 1993]

Тематики

3.50 технические условия на технологию изготовления (Manufacturing Procedure Specification, MPS): Руководство, подготовленное изготовителем, регламентирующее способ достижения требуемых свойств и способ проверки в ходе предлагаемого технологического процесса.

Полезное

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

Mps.br — (Brazilian Improvement Software Process or Melhoria de Processos do Software Brasileiro in Portuguese) is at same time a program for software development improvement in Brazil (MPS.BR) as well a process (MPS Model). MPS is a Brazilian model for… … Wikipedia

MPS — may refer to: Robinson List, aka Mail Preference Service, direct mail opt out system Malmin Palloseura, association football club from Helsinki, Finland. Marginal propensity to save Master Production Schedule Ministry of Public Security of the… … Wikipedia

MPS — ist die Abkürzung für: Ma: Magnitude Prestigeskala, Berufsprestigeskala auf Basis der ISCO 88 Managed Print Service, eine System zur zentralen Steuerung von Netzwerkdruckern Master Production Schedule (Hauptproduktionsplan), ein Teil der… … Deutsch Wikipedia

MPS — son las siglas de: Escuelas Públicas de Montgomery Montgomery Public Schools MPS Records Esta página de desambiguación cataloga artículos relacionados con el mismo título. Si llegaste aquí a través de … Wikipedia Español

MPS — Abreviatura de mucopolisacaridosis. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS I — Abreviatura de mucopolisacaridosis I. Véase síndrome de Hurler. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS II — Abreviatura de mucopolisacaridosis II. Véase síndrome de Hunter. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS IV — Abreviatura de mucopolisacaridosis IV. Véase enfermedad de Morquio. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS — MPS: Abk. für Mucopolysaccharid[polysulfat] … Universal-Lexikon

MPS — (marginal propensity to save) rate of resources from each unit of available additional income that are set aside for savings (Economics) … English contemporary dictionary

MPS — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sigles d’une seule lettre Sigles de deux lettres > Sigles de trois lettres Sigles de quatre lettres … Wikipédia en Français

Источник

Mps что это такое

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

Mps.br — (Brazilian Improvement Software Process or Melhoria de Processos do Software Brasileiro in Portuguese) is at same time a program for software development improvement in Brazil (MPS.BR) as well a process (MPS Model). MPS is a Brazilian model for… … Wikipedia

MPS — may refer to: Robinson List, aka Mail Preference Service, direct mail opt out system Malmin Palloseura, association football club from Helsinki, Finland. Marginal propensity to save Master Production Schedule Ministry of Public Security of the… … Wikipedia

MPS — ist die Abkürzung für: Ma: Magnitude Prestigeskala, Berufsprestigeskala auf Basis der ISCO 88 Managed Print Service, eine System zur zentralen Steuerung von Netzwerkdruckern Master Production Schedule (Hauptproduktionsplan), ein Teil der… … Deutsch Wikipedia

MPS — son las siglas de: Escuelas Públicas de Montgomery Montgomery Public Schools MPS Records Esta página de desambiguación cataloga artículos relacionados con el mismo título. Si llegaste aquí a través de … Wikipedia Español

MPS — Abreviatura de mucopolisacaridosis. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS I — Abreviatura de mucopolisacaridosis I. Véase síndrome de Hurler. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS II — Abreviatura de mucopolisacaridosis II. Véase síndrome de Hunter. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS IV — Abreviatura de mucopolisacaridosis IV. Véase enfermedad de Morquio. Diccionario Mosby Medicina, Enfermería y Ciencias de la Salud, Ediciones Hancourt, S.A. 1999 … Diccionario médico

MPS — MPS: Abk. für Mucopolysaccharid[polysulfat] … Universal-Lexikon

MPS — (marginal propensity to save) rate of resources from each unit of available additional income that are set aside for savings (Economics) … English contemporary dictionary

MPS — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. Sigles d’une seule lettre Sigles de deux lettres > Sigles de trois lettres Sigles de quatre lettres … Wikipédia en Français

Источник

Управляемые сервисы печати MPS

mps что это такое

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

Что такое Managed Print Services (MPS)?

MPS – это аутсорсинговая услуга, благодаря которой заказчик получает оптимизированную печатную инфраструктуру, работающую без простоев и перебоев.

Рассмотрим реальный случай.

Клиент: логистическая компания.

Проблема: время загрузки машин регламентировано, но грузы нельзя отправить со склада без сопроводительных документов. Час простоя из-за невозможности распечатать документы и отправить автомобиль может обойтись в 5 млн рублей (данные реального кейса).

Решение: передача печати на аутсорсинг, оптимизация печатной инфраструктуры.

Какие проблемы решает MPS?

Как упорядочить процесс печати?

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

Обеспечение бесперебойной работы существующей инфраструктуры печати. На этом уровне мы помогаем с расходниками, ресурсными компонентами и инженерами, обслуживающими технику.

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

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

При всех трех вариантах сервиса вы получаете единую точку входа в виде одного поставщика услуги, единую точку ответственности, консолидированную отчетность и мониторинг инфраструктуры печати.

Не только печать, но еще и сканирование!

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

Помним про безопасность печати!

DLP-системы позволяют отслеживать действия пользователей, но они не способны обеспечить безопасность вывода на твердом носителе (бумага). Между тем, любой из сотрудников может вывести конфиденциальную информацию на бумагу и унести распечатку с собой. В зоне риска и сведения, которые выводились на печать для служебного пользования, но долго лежали невостребованными и могли быть скопированы посторонними лицами, не имеющими прав на доступ к этой информации.

Системы управления печатью, такие как MyQ, SafeQ, PaperCut, Ringdale FollowMe и др. позволяют контролировать этот источник потенциальной утечки информации, анализируя права пользователей на печать тех или иных данных.

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

И, конечно, следует помнить, что до 30% документов, отправленных на печать, остаются невостребованными.

Использование систем управления печатью имеет значительный экономический эффект:

Все вышеприведенные цифры подтверждены практикой. Средняя экономия по нашим клиентам после внедрения систем управления печатью составляет 15-20%.

Это интересно!

В практике нашей компании есть проект, при котором был реализован функционал платной печати в библиотеке по карточке с выделенным лимитом средств. Благодаря ему читатели получили возможность самостоятельно распечатывать документы, не прибегая к услугам сотрудников организации.

Коробочная услуга управляемой печати

Для небольших организаций и компаний, где объем печати не больше 100 тыс. отпечатков в месяц, мы запустили услугу «коробочного» аутсорсинга на новом оборудовании XEROX или HP Inc., позволяющую на длительный срок обеспечить бесперебойность печати заказчика.

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

Преимущества коробочной услуги управляемой печати:

Сервисы MPS компании Softline гарантируют высокий уровень надежности систем. Мы обеспечиваем безопасность и функционирование системы, если необходимо, то и в режиме 24/7.

Источник

MPS: изучаем метапрограммирование на примере ардуино

Современный мир разработки программного обеспечения разный и полон интересных решений. Какие-то из них популярны и де-факто стали стандартом. Предлагаю познакомиться с менее известным инструментом JetBrains MPS на примере ардуино: посмотрим демо и проверим, как можно написать симуляцию человеческим языком с минимумом затрат.

Немного теории и терминов

MPS — это аббревиатура для Meta Programming System, инструмента для метапрограммирования. Если уйти от деталей и попытаться дать простое определение, то метапрограммирование — это написание программ для написания программ. Можно тут вспомнить аналогию про метаданные, которые являются данными для описания других данных. А если ещё упростить, то метапрограммирование — это про создание DSL.

DSL, он же Domain-Specific Language, он же предметно-ориентированный язык — это язык, который использует термины определённого домена (области). По сути всё есть DSL, только домены отличаются. Например, для Java доменом является язык программирования и такие концепции, как «цикл», «метод», «переменная». Доменом для Gradle является сборка проектов, и там уже свои концепции: «зависимость», «задача», «артефакт». Поэтому под термин DSL можно притянуть почти всё что угодно. Тут могу порекомендовать статью от Federico Tomassetti под названием «The complete guide to (external) Domain Specific Languages».

Нам понадобится термин «модель» (model). DSL состоит из концепций, а пользователь создаёт их экземпляры. Вот эти экземпляры и образуют модели. Мне нравится, как это описано в материале от Microsoft «Understanding Models, Classes and Relationships».

На DSL можно посмотреть и с точки зрения инструмента, который позволяет научить общаться «говорящих» на разных языках. Например, человек на человеческом языке пишет: «У меня есть плата Arduino Uno, а на ней два LED и кнопка», а потом эти конструкции трансформируются в что-то другое, например в JSON-формат, который понятен какому-нибудь симулятору. Чем сложнее конструкции, тем применение DSL становится более оправданным.

Для наших целей подойдёт ресурс с эмулятором Arduino — wokwi. Этот ресурс позволит повторить действия из данной статьи, не устанавливая IDE для ардуино, и даже без него самого. Данный симулятор на вход принимает JSON-конфигурацию и использует её для симуляции. По схожей схеме могут работать и более сложные системы. Например, тестовый стенд для испытания реакции автомобиля под управлением компьютера.

Знакомимся с MPS

Цель этой статьи — продемонстрировать часть возможностей JetBrains MPS и того, как их можно применить. Поэтому писать код мы не будем, а посмотрим на уже готовый код небольшого демонстрационного проекта, подготовленного специально для данного материала. Прежде всего необходимо скачать JetBrains MPS и открыть проект из репозитория, mps-demo.

Открыв проект, мы увидим, что он состоит из разных «модулей». Подробнее про структуру проектов в MPS можно прочитать в разделе документации MPS project structure. MPS выделяет несколько типов модулей, но самые важные для нас — это Language (с иконкой L) и Solution (с иконкой S). Language-модули описывают DSL, а solution-модули используют Language-модули, чтобы в терминах того или иного языка создавать модели.

Каждая модель — своего рода обособленная область. По умолчанию они не видят ничего вокруг, однако можно импортировать объекты из других моделей и подключать разные языки. При подключении в модель языка мы можем создавать экземпляры концепций, которые добавляются данным языком. Например, раскроем в дереве проекта solution-модуль и перейдём курсором на модель sandbox (модели имеют иконку M). Из контекстного меню мы можем открыть Model Properties. Там на вкладке «Used Languages» мы увидим, какие языки подключены, а значит, термины из каких DSL мы можем использовать:

mps что это такое

Скетчи и концепты

Закроем окно настроек, вернёмся к модели sandbox и нажмём ALT+INSERT, чтобы увидеть варианты того, что мы можем создать:

mps что это такое

Например, воспользуемся WiringLang и создадим новый sketch. Прелесть JetBrains MPS в том, что MPS является своего рода фреймворком для написания DSL. Разработчику не нужно писать IDE, описывать работу выпадающих списков и прочее, а надо в правильном месте правильным образом описать тот или иной аспект языка. Благодаря этому мы можем воспользоваться CTRL+SPACE, чтобы открыть меню и увидеть, что нам доступно:

mps что это такое

В случае с коллекциями элементов нажатием Enter в конце элемента мы создадим следующий. Таким образом при помощи WiringLang мы можем написать какой-нибудь пример с сайта wiring.org.co, например Blink:

mps что это такое

Если мы встанем на любой объект, который мы создали, и откроем View→ Tool Windows → Inspector, то увидим информацию о том, какой концепт (описание концепции) отвечает за ту или иную фразу, которую мы наблюдаем:

mps что это такое

В данном случае описание задержки выражено концептом Delay. В правой части у нас есть ссылка Open Concept Declaration, которая позволяет перейти непосредственно к описанию концепта.

Концепт — это основа, которая описывает сам факт существования какого-то термина и его структуру (из каких полей и ссылок состоит термин). Вокруг концептов описываются другие аспекты, такие как Constraints (ограничение доступных значений, ограничения возможности создавать экземпляры в том или ином месте в модели и прочее) или Editor (как показывать пользователю концепт):

mps что это такое

При помощи Show Structure можно увидеть все описанные аспекты.

На примере аспекта Behavior важно сказать, что MPS — в первую очередь про Java. Концептам можно добавлять поведение и описывать это на Java, но с некоторыми дополнительными возможностями вроде своей обёртки над коллекциями (см. Collection Language) и других моментов:

mps что это такое

Генератор: и всё превращается в текст

Одним из аспектов языка является генератор. Генераторы позволяют превращать модели либо в текст, либо в модель на другом языке. Предлагаю посмотреть на этот аспект JetBrains MPS несколько подробнее.

Генерация — это процесс преобразования одних моделей в другие. Например, если мы откроем наш ранее написанный скетч Blink и в контекстном меню выберем Preview Generated Text, то мы запустим генераторы и увидим результат. В нашем случае мы увидим текст, соответствующий тому, что указали в модели. Однако это полностью зависит от того, как написан генератор. Модель и конечный результат могут быть очень разными, что станет очевидно чуть позже.

Генерация устроена так, что в конечном итоге всё превращается в текст по тем или иным правилам. Это описано в аспекте TextGen. Например:

mps что это такое

Как видно, генератор начнёт обрабатывать экземпляр концепта JSONDocument (см. выбранную вкладку), представляющий JSON-документ. В нём хранится JSON-объект, представленный концептом JsonObject, который является корневым элементом для JSON-структуры. Далее будет вызван TextGen-генератор для JsonObject. В свою очередь JsonObject будет вызывать TextGen для всего, что находится у него внутри. Таким образом, генераторы вызывают друг друга — получается своего рода матрёшка из результатов генераторов.

JSONSupport превращает модели в json-файлы, а WiringLang превращает модели в ino-файлы. Именно эти файлы использует симулятор ардуино wokwi.com. Но основной смысл в другом языке — MpsDemo. Этот язык превращает модели, написанные на нём, в модели JSON и Wiring. В этом случае используется специальный механизм шаблонов:

mps что это такое

Чтобы понимать, как это устроено, советую пройти все обучающие материалы MPS из раздела Generator Demos, а также урок Shapes — an introductory MPS tutorial.

Приведу небольшой пример того, как выглядит шаблон для генератора:

mps что это такое

Таким образом модель, написанная на MpsDemo, превращается в модели, написанные на JSON и Wiring DSL’ах. Те в свою очередь превратятся в текст.

Предлагаю на этом закончить краткий экскурс в то, как всё устроено изнутри, и рассмотреть один практический пример, ради которого вы читали весь этот текст =)

Симуляция с человеческим языком

Наша задача — описать следующую схему:

mps что это такое

Симуляция будет строиться на основе платы Arduino Uno. У нас есть две лампочки красного цвета и одна кнопка. Мы хотим настроить эту схему так, чтобы при нажатии кнопки лампочки загорались.

Чтобы это заработало, нам нужно подключить к земле (GND на плате) катоды и один из контактов кнопки. Аноды подключим к одному пину платы, а ещё один контакт кнопки — к другому пину на плате.

Писать это самому на Wiring и в JSON не очень приятно. Хочется иметь помощь от инструмента: выпадающие списки, фильтрацию, подсвечивание ошибок. Кроме того, хочется описать симуляцию на человеческом языке.

Посмотрим на пример StopSig_test:

mps что это такое

Как видно, описание сценария для симуляции написано понятным языком. Кроме того, в MPS можно реализовать перевод редакторов на разные языки (у нас есть английский и русский).

Дополнительные бонусы MPS

Кроме того, благодаря тому, что MPS — это фреймворк и IDE, мы можем воспользоваться различными средствами. Например, при помощи CTRL+SHIFT+I мы можем посмотреть информацию по тому объекту, где в данный момент установлен курсор. Например, тип создаваемых компонентов реализован при помощи специального концепта ComponentDefinition, экземпляры которого хранятся в аспекте, называемом Accessories Models. Это позволяет реализовать что-то вроде справочника. Встанем курсором на тип любого компонента (например, на LED) и нажмём CTRL+SHIFT+I:

mps что это такое

Как Вы могли уже догадаться, первая часть нашего описания должна будет стать JSON’ом. Описание же поведения из нижней части сценария станет скетчем из WiringLang.

Вообще генератор при выполнении Rebuild для модели сохраняет результат генерации туда, куда указал генератор. Но проще всего смотреть через контекстное меню и опцию Preview Generated Text. Если мы откроем превью для нашего сценария, то увидим следующее:

mps что это такое

Если мы создадим новую симуляцию на wokwi.com и вставим туда результаты генерации, то увидим работающую схему, где нажатие кнопки приводит к тому, что загораются LED.

Таким образом составитель этой схемы не писал ничего в JSON, не писал ничего на Wiring. Он просто написал человеческим текстом сценарий, а наш DSL превратил его в формат, который умеет читать симулятор. DSL выступил своего рода переводчиком между человеком и машиной, унифицировал способ описания сценария, а также предоставил удобный UI. Благодаря MPS нам доступна такая разработческая вещь, как интеграция с системой контроля версий. Кроме того, при необходимости мы можем написать собственный плагин для MPS, о чём подробно говорится в MPS User’s Guide: Plugin.

Стандартный компилятор vs. Wokwi

Вы спросите: а чем стандартный компилятор под ардуино не устраивает? Ведь описанную в статье историю с кнопкой и лампочкой можно написать в стандартном IDE. Так вот. Компилятор всем устраивает — wokwi просто позволяет, не имея ни ардуино, ни стандартного IDE, пощупать, как всё можно применить, и понять идею DSL. Это как онлайн-компиляторы под Java, которые помогают быстро посмотреть на код и что-нибудь быстро изучить, не устанавливая себе IDE.

Альтернатива DSL — визуальные редакторы, но они не являются частью данной статьи. При этом DSL — одно из возможных решений, и в качестве альтернативы ему можно предложить визуальный редактор. Например, такой. Выбор остаётся за потребителем и зависит напрямую от того, какой функционал и насколько качественно представлен в том или ином продукте.

Вывод

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

Из минусов — чем глубже погружаешься «в кишки» MPS, тем меньше документации. К MPS нужно привыкнуть, пройдя все стадии от отрицания до принятия. Надеюсь, вам как и мне, понравится этот путь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *