为什么在构建OCaml和OCaml代码时总是需要C编译器环境?

Enz*_*ojz 1 ocaml compilation

这是我头脑中的一个问题,我在Windows下使用OCaml,当我构建每个OCaml发行版本时,我需要一个C编译器,MSVC或MingGW,我必须在Cygwin下完成.

当我手头有我的OCaml,当我需要编译我的代码时,我还需要用于编译我的OCaml的c链接器.对我来说这很奇怪.为什么OCaml不能使用较旧版本的OCaml而不是某些C编译器自动引导?

ivg*_*ivg 5

OCaml工具链依赖于外部工具来组装和链接二进制文件.后者可能比汇编程序更重要,因为汇编程序或多或少稳定.但链接器通常与操作系统深度集成,并且每个版本都不同.将它们捆绑在一起会增加支持负担并使OCaml程序的可移植性降低,整个OCaml分发更加脆弱.因此,取决于汇编程序/链接器抽象是一种甜点,它可以最大限度地减少依赖关系和支持负担,并最大限度地提高可移植性.

其他语言通常采用相同的方法.即使是依赖于LLVM的那些,因为LLVM实际上使用了GNU工具链链接器.

为了构建OCaml本身,C编译器是绝对必要的.OCaml本身并不完全用OCaml编写.实际上,OCaml运行时是用纯C编写的,例如垃圾收集器.此外,许多函数,特别是定义系统接口(例如,Unix)的函数也用C语言编写.该sloccount工具给出了粗略估计,15%的OCaml源代码(45,000 LOC)用C语言编写.