MPS 2022.3 最新变化

MPS 2022.3 包含针对约束规则的改进、同步与 MPS Extensions 的迁移、适用于 JVM 的 Kotlin 存根等。

约束规则更新
客户赞助

约束规则语言的作用是解决约束语言的缺陷。 在这个版本中,约束规则在提高语言的实用性方面向前迈进了一步。

  • 约束规则定义现在可以从 NodeTestCases 引用。 此前,这不可行。
  • 实验性约束规则定义允许在 Inspector(检查器)窗口中指定日志记录消息,带来更出色的跟踪和调试。
  • 约束规则的错误消息可以针对特定节点的属性或引用。 它可以配置为仅高亮显示一个属性或引用,而不是高亮显示整个节点的错误。

改进了模块类加载

从试验语言的沙盒到改变 MPS 或 IntelliJ IDEA 平台行为的有效插件代码,MPS 模块具有多种用途。 在 MPS 2022.3 中,我们将这些都归到一处。 解决方案模块的 Java Facet 页面经过重做,存放所有相关设置并能识别通用场景,帮助语言设计者和用户轻松确定模块的预期用途。 IDEA Plugin Module Facet 已被完全弃用。 我们只公开了解决方案模块的设置 – 语言和生成器模块都采用相同的方式,但设置为隐式配置。 了解详情

同步与 MPS Extensions 的迁移

MPS 的活跃社区一直在为生态系统创造价值,我们也始终鼓励用户使用外部库来丰富产品功能。 Third-party libraries, such as MPS Extensions, have been key to improving the user experience for products built with MPS. 这为社区带来了很多好处,但也有一个显著缺点 – 用户需要等待第三方库的迁移才能更新 MPS 版本。 我们一直在与我们的官方合作伙伴和主要 MPS 扩展程序维护者 itemis 合作,同步我们的版本,使迁移到产品最新版本的过程更加顺利。

语言定义中的其他实用方法

语言设计者现在可以将重复代码提取到定义根节点内的帮助程序方法来减少重复代码的数量。 这些额外方法可以在以下位置定义:

  • 约束
  • 转换和替代行为
  • 推断和检查规则
  • 快速修复
  • 意图

意图还允许使用额外字段保留在 isApplicable 方法中计算的值,以在 execute 方法中使用。

适用于 JVM 的 Kotlin 存根

适用于 JVM 的 Kotlin 存根

现在,可以从已编译的 Kotlin/JVM 库导入存根,此前只能导入 Kotlin/Common 库。 借助这项改进,可以通过模块选项中的 Kotlin JVM 模型根使用编译为 JVM(Java、Kotlin 或混合)的库。 了解详情

Kotlin 版本改进

新版本的 MPS 捆绑了多项小幅更改和改进:

  • Kotlin 类现在是可设为根的节点并拥有自己的图标。
  • Kotlin 代码现在可以引用 Java 枚举条目。
  • this 表达式现在可以正确引用标签(例如 this@SomeClass)。
  • 构建脚本中的 withKotlin 标志现在要求 $kotlinc_home 宏,而不是先前硬编码的位置。
  • 存根已得到改进:
    • 在存根选项中排除/包含软件包的运作方式现在与在 Java 存根中相同。
    • 几种导致引用损坏的 ID 不稳定的方法已经得到修正。
从类型创建构造函数的转换

从类型创建构造函数的转换

现在,可以输入左圆括号,然后使用右转换为给定调用创建构造函数调用。 这适用于支持此操作的任何 Kotlin 类型(这对于用户类型可扩展),并且可以更好地为给定类型创建默认表达式,例如从函数式接口类型创建 lambda 时。

针对作用域中扩展函数的改进

针对作用域中扩展函数的改进

作用域中的扩展函数已更改为不排除作用域中的兼容方法。 代价是,由于当前类型系统实现的性能,作用域内的一些条目不适用。

函数引用的自动解析可以在选择不适用的函数时修正引用。

重置类路径和虚拟机选项的新意图

重置类路径和虚拟机选项的新意图

新增意图更新了 MPSStartupScript 节点,并将虚拟机选项和类路径值设为当前 MPS 值。 MPS 虚拟机选项和类路径值随每个新版本而变化。 此前,用户必须为独立 IDE 手动更新构建项目。

迁移指南

对于每一个主要版本,我们都会准备从旧版本 MPS 进行迁移的说明,以确保一切顺利。 请仔细查阅。