Novedades de MPS 2022.3

MPS 2022.3 incluye mejoras en las reglas de restricción, migración de sincronización con extensiones MPS, stubs de Kotlin para JVM y mucho más.

Actualización de las reglas de restricción
Petición de nuestros clientes

Hemos creado el lenguaje de las reglas de restricción para solucionar las deficiencias del lenguaje de restricciones. Para esta versión, hemos mejorado las reglas de restricción respecto de la usabilidad del lenguaje.

  • Ahora, es posible hacer referencia a las definiciones de las reglas de restricción desde NodeTestCases; algo que antes no era posible.
  • La definición experimental de las reglas de restricción permite especificar mensajes de registro en la ventana Inspector para mejorar el seguimiento y la depuración.
  • El mensaje de error de las reglas de restricción puede dirigirse a propiedades o referencias de nodos específicos. En lugar de que el error resalte todo el nodo, puede configurarse para que resalte solo una propiedad o una referencia.

Mejora de la carga de las clases de los módulos

Los módulos de MPS tienen varias funciones, que van desde un entorno donde hacer pruebas con el lenguaje hasta un complemento de código activo para alterar el comportamiento de MPS o de la plataforma IntelliJ IDEA. En MPS 2022.3, las hemos reunido todas bajo un mismo paraguas. Se ha modificado la página Java Facet del módulo Solution para que pueda albergar todas las configuraciones relevantes e identificar escenarios comunes para que los diseñadores y usuarios de lenguajes reconozcan fácilmente el uso previsto de un módulo. El complemento de IDEA Module Facet ha quedado obsoleto y ya no se utilizará. Hemos expuesto los ajustes solo para los módulos Solution. Los módulos Language y Generator tienen el mismo enfoque, pero con los ajustes configurados de forma implícita. Más información.

Sincronización de la migración con extensiones de MPS

MPS siempre ha contado con una comunidad activa que aporta valor al ecosistema y siempre hemos animado a los usuarios a utilizar bibliotecas externas para enriquecer la funcionalidad del producto. Third-party libraries, such as MPS Extensions, have been key to improving the user experience for products built with MPS. Aunque esto ha aportado muchos beneficios a la comunidad, hay un inconveniente importante: el usuario tiene que esperar a la migración de la biblioteca de terceros para actualizar la versión de MPS. Hemos estado trabajando con itemis, nuestro socio oficial y principal mantenedor de extensiones de MPS, para sincronizar nuestras versiones y facilitar la migración a la versión más reciente del producto.

Métodos de utilidad adicionales en la definición del lenguaje

Ahora, los diseñadores de lenguajes pueden reducir la cantidad de código repetitivo extrayéndolo en métodos de ayuda dentro del nodo raíz de la definición. Estos métodos adicionales pueden definirse en:

  • Restricciones
  • Acciones de transformación y sustitución
  • Reglas de inferencia y comprobación
  • Arreglos rápidos
  • Intenciones

Las intenciones también permiten que los campos adicionales conserven los valores calculados en el método isApplicable para utilizarlos en el método execute.

Stubs de Kotlin para JVM

Stubs de Kotlin para JVM

Ahora, es posible importar stubs de bibliotecas compiladas de Kotlin/JVM, mientras que antes solo era posible importar bibliotecas de Kotlin/Common. Con esta mejora, es posible usar bibliotecas compiladas en JVM (Java, Kotlin o mixtas) a través de la raíz del modelo Kotlin JVM en las opciones del módulo. Más información.

Mejoras en la edición de Kotlin

Con esta nueva versión de MPS, hemos incluido varios cambios menores y mejoras:

  • Ahora, las clases de Kotlin son nodos enraizables y tienen sus propios iconos.
  • Ahora, el código Kotlin puede hacer referencia a las entradas de enumeración de Java.
  • Ahora, la expresión this puede referirse correctamente a una etiqueta (por ejemplo, this@SomeClass).
  • Ahora, los indicadores withKotlin en los scripts de compilación solicitan una macro $kotlinc_home en lugar de una ubicación previamente codificada.
  • Se han mejorado los stubs:
    • Ahora, la exclusión o la inclusión de paquetes en las opciones del stub funciona como con los stubs de Java.
    • Se han corregido varios métodos con ID inestables, que daban lugar a referencias rotas.
Transformación para crear un constructor a partir de un tipo

Transformación para crear un constructor a partir de un tipo

Ahora, es posible crear una llamada a un constructor a partir de un tipo con una transformación a la derecha escribiendo paréntesis a la izquierda. Esto funciona para cualquier tipo de Kotlin compatible con esta operación (esto es extensible para tipos de usuario) y facilita la creación de una expresión por defecto para un tipo dado, como cuando se crea una lambda a partir de un tipo de interfaz funcional.

Mejoras en las funciones de extensión de los ámbitos

Mejoras en las funciones de extensión de los ámbitos

Se han cambiado las funciones de extensión de los ámbitos para no excluir métodos compatibles en estos, a costa de que haya algunos elementos en ámbitos que no son aplicables debido al rendimiento del tipo actual de implementación del sistema.

La resolución automática de referencias a funciones puede solucionar las referencias en caso de que se seleccione una función no aplicable.

Nueva intención para restablecer la ruta de clase y las opciones de la máquina virtual

Nueva intención para restablecer la ruta de clase y las opciones de la máquina virtual

Una nueva intención actualiza el nodo MPSStartupScript y establece las opciones de la máquina virtual y los valores de la ruta de clase a los valores actuales de MPS. Las opciones de la máquina virtual y los valores de la ruta de clase de MPS cambian con cada nueva versión. Antes, el usuario tenía que actualizar de forma manual los proyectos de compilación para un IDE independiente.

Guía de migración

En cada uno de nuestros grandes lanzamientos, elaboramos instrucciones para migrar desde versiones más antiguas de MPS y asegurar que todo funciona correctamente. Léalas atentamente.