Что нового в MPS 2022.3

В MPS 2022.3 вас ждут улучшения правил ограничений, синхронизация времени миграции с расширениями MPS, Kotlin-заглушки для JVM и многое другое.

Изменение правил ограничений
Спонсировано клиентом

Язык ограничений на основе правил призван устранить недостатки языка ограничений. В этой версии мы обновили правила, чтобы использовать язык было удобнее.

  • На определения правил ограничений теперь можно ссылаться из NodeTestCases. Раньше это было невозможно.
  • Экспериментальные определения правил ограничений позволяют показывать журнальные сообщения в окне Inspector для упрощения трассировки и отладки.
  • Сообщение об ошибке в правилах ограничений может быть направлено на определенные свойства или ссылки узлов. Вместо того чтобы подсвечивался весь узел, можно настроить выделение только определенного свойства или ссылки.

Улучшенная загрузка классов модулей

Модули MPS используются для различных целей, начиная от песочницы, в которой можно поэкспериментировать с вашим языком, и заканчивая написанием рабочего плагина для изменения поведения MPS или платформы IntelliJ IDEA. В MPS 2022.3 модули собраны воедино. Мы переработали страницу Java Facet для модуля Solution, и теперь на ней можно найти все важные настройки и определения общих сценариев, чтобы разработчикам и пользователям языка было проще понять, для чего предназначается модуль. IDEA Plugin Module Facet признан устаревшим и больше использоваться не будет. Мы показываем настройки только для модулей Solution: для модулей Language и Generator применяется тот же подход, но их параметры настраиваются неявно. Подробнее

Синхронизация миграции с расширениями MPS

У MPS активное сообщество пользователей, которое постоянно обогащает экосистему, и мы всегда поощряли использование внешних библиотек для расширения функциональности продукта. Third-party libraries, such as MPS Extensions, have been key to improving the user experience for products built with MPS. И хотя это приносит огромную пользу сообществу, есть один недостаток: пользователям приходится ждать миграции внешней библиотеки, прежде чем обновлять MPS. Вместе с itemis, нашим официальным партнером, занимающимся поддержкой расширений для MPS, мы работаем над синхронизацией релизов для более плавного перехода на новую версию.

Дополнительные служебные методы в определении языка

Разработчики языков теперь могут сократить количество повторяющегося кода, извлекая его во вспомогательные методы прямо внутри корневого узла определения. Эти дополнительные методы могут быть определены в:

  • ограничениях;
  • действиях преобразования и замещения;
  • правилах вывода и проверки;
  • быстрых исправлениях;
  • intention-действиях.

Intention-действия также позволяют сохранять в дополнительных полях значения, вычисленные в методе isApplicable, для использования в методе execute.

Kotlin-заглушки для JVM

Kotlin-заглушки для JVM

Теперь можно импортировать заглушки из скомпилированных библиотек Kotlin/JVM, тогда как раньше импорт был возможен только из библиотек Kotlin/Common. Благодаря этому стало возможным использовать библиотеки, скомпилированные под JVM (Java, Kotlin или смешанные) через корень модели Kotlin JVM в опциях вашего модуля. Подробнее

Улучшения для Kotlin

В новую версию MPS вошло несколько небольших изменений и улучшений:

  • Kotlin-классы теперь могут быть корневыми узлами и имеют собственные значки.
  • Kotlin-код теперь может ссылаться на записи перечислений Java.
  • Выражение this теперь может корректно ссылаться на метку (например, this@SomeClass).
  • Флаги withKotlin в билд-скриптах теперь запрашивают макрос $kotlinc_home, а не жестко запрограммированное местоположение, как было раньше.
  • Улучшения для работы с заглушками:
    • Исключение/включение пакетов в опциях заглушки теперь работает так же, как в Java-заглушках.
    • Исправлено несколько методов с нестабильными идентификаторами, из-за которых не работали ссылки.
Преобразование для создания конструктора из типа

Преобразование для создания конструктора из типа

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

Улучшения функций расширения в Scopes

Улучшения функций расширения в Scopes

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

Автоматическое разрешение ссылок поможет исправить ссылки в случае выбора неприменимой функции.

Новое действие для сброса значений classpath и параметров виртуальной машины

Новое действие для сброса значений classpath и параметров виртуальной машины

Новое intention-действие обновляет узел MPSStartupScript и устанавливает параметры виртуальной машины и значения classpath в соответствии с текущими значениями MPS. В MPS параметры виртуальной машины и значения classpath меняются с каждым релизом. Раньше пользователем приходилось вручную обновлять проекты сборки для автономной IDE.

Руководство по миграции

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