1

According to the Rascal documentation, the language is statically typed. However the type errors are only reported on runtime.

For example, when I create this module, I expect a type error because I am assigning a real to an int variable:

module Example

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

When I import the module on the REPL, and finally run the function:

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

2 回答 2

3

文档比 Rascal 的计划提前运行。Rascal 有一个可以静态检查的类型系统,但类型检查器尚未集成。

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

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

于 2013-04-23T09:00:54.940 回答
1

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

于 2013-04-23T08:45:31.463 回答