为什么此示例代码中的静态类型错误仅在运行时由Rascal报告?

时间:2013-04-23 08:45:31

标签: rascal

根据Rascal documentation,语言是静态类型的。但是,类型错误仅在运行时报告。

例如,当我创建这个模块时,我期望一个类型错误,因为我正在为一个int变量赋值:

module Example

void example() {
  int x = 1.0;
  println(x);
}

当我在REPL上导入模块时,最后运行函数:

rascal>import Example;
ok
rascal>example()
|project://Test/src/Example.rsc|(39,7,<4,6>,<4,13>): Expected int, but got real
☞ Advice

2 个答案:

答案 0 :(得分:3)

文档在Rascal计划之前运行。 Rascal有一个可以静态检查的类型系统,但类型检查器还没有集成。

目前,解释器正在运行时检查类型。请注意,它报告的错误消息仅包含“静态类型”。解释器同时进行抽象解释和具体解释(运行)代码。这使我们能够快速发展语言,因为解释的代码和每个构造的类型检查紧密地编织在一起。

当我们介绍类型检查阶段时,我们希望使用类型和已解析的名称来提高解释器的速度,并再次简化解释器的代码,当然也可以更快地将错误传递给程序员。 / p>

答案 1 :(得分:1)

Rascal确实有一个静态类型检查器,它是用Rascal本身编写的。它涵盖了大多数语言(唯一的,当前不受支持的功能是关键字参数)。要使用它,右键单击Eclipse中打开的Rascal文件(使用Rascal插件),选择“Experimental”,然后选择“Run static checker”。正如菜单名称所示,这是实验性的,所以如果您发现问题,请告诉我们。