Des*_*PRG 0 compiler-construction static interpreter ocaml type-systems
在各种来源中提到OCaml具有静态和强类型系统,并且它也是解释语言.
Wikepedia声明静态类型检查是在编译时完成的.现在,如果OCaml不是编译语言,那么静态类型检查如何应用于它?
在某些地方还提到OCaml有一个字节码编译器和一个VM.然后,OCaml如何确定何时表现为解释语言以及何时表现为编译语言?
OCaml附带一个解释器和两个编译器.当您一次输入一个表达式时,解释器会非常忠实地再现编译器的行为.它对每个表达式进行静态类型分析.如果输入正常,则评估表达式.
因此,OCaml不必决定何时成为编译器以及何时成为解释器.用户通过运行解释器(通常称为"顶层")来决定他们想要做什么.或者,如果他们想要生成稍后运行的代码,他们会运行其中一个编译器.
其中一个编译器为一组受支持的机器生成本机代码(机器代码).另一个编译器为在更多环境中工作的虚拟机生成字节码.这两种代码之间存在权衡; 通常,本机代码更快,但字节码更便携,并支持更有趣的调试类型(包括在反向时间运行程序).