根据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
答案 0 :(得分:3)
文档在Rascal计划之前运行。 Rascal有一个可以静态检查的类型系统,但类型检查器还没有集成。
目前,解释器正在运行时检查类型。请注意,它报告的错误消息仅包含“静态类型”。解释器同时进行抽象解释和具体解释(运行)代码。这使我们能够快速发展语言,因为解释的代码和每个构造的类型检查紧密地编织在一起。
当我们介绍类型检查阶段时,我们希望使用类型和已解析的名称来提高解释器的速度,并再次简化解释器的代码,当然也可以更快地将错误传递给程序员。 / p>
答案 1 :(得分:1)
Rascal确实有一个静态类型检查器,它是用Rascal本身编写的。它涵盖了大多数语言(唯一的,当前不受支持的功能是关键字参数)。要使用它,右键单击Eclipse中打开的Rascal文件(使用Rascal插件),选择“Experimental”,然后选择“Run static checker”。正如菜单名称所示,这是实验性的,所以如果您发现问题,请告诉我们。