TL;DR:我知道 MPS 2017.2 不会更新字段引用。问题是如何正确处理,以便 DSL 用户不必重新键入所有程序,以防发生单个“变量类型更改”
这是 MPS 的基本语言的示例:
public class Foo {
public int x;
public int y;
}
public class Bar {
public long x;
public long z;
}
public void test() {
Foo a;
a.x = 1; // "x" points to the field of class Foo
a.y = 1;
}
如果我Foo
用Bar
in更新Foo a;
,那么测试代码看起来是一样的
public void test() {
Bar a;
a.x = 1; // "x" still points to the field of class Foo
a.y = 1; // Of course this reference is now invalid, however MPS does not underline that
}
如果我将变量的类型更新a
为Bar
,则test
方法中的代码仍将引用Foo
. 当然,check model
识别损坏的参考,但是我想知道在 MPS 中解决这类 DSL 问题的预期方法是什么?
“更新”脚本是否应该找到所有“字段用法”并相应地更新模型?是否应该禁止“字段类型更新”并要求用户确认?(例如某种重构或任何意图)
我正在 MPS 中构建 61131 ST 语言,所以我正在研究“静态类型语言”类型的 DSL。