作者:所谓-旧 | 来源:互联网 | 2022-12-09 19:16
这是我头脑中的一个问题,我在Windows下使用OCaml,当我构建每个OCaml发行版本时,我需要一个C编译器,MSVC或MingGW,我必须在Cygwin下完成.
当我手头有我的OCaml,当我需要编译我的代码时,我还需要用于编译我的OCaml的c链接器.对我来说这很奇怪.为什么OCaml不能使用较旧版本的OCaml而不是某些C编译器自动引导?
1> ivg..:
OCaml工具链依赖于外部工具来组装和链接二进制文件.后者可能比汇编程序更重要,因为汇编程序或多或少稳定.但链接器通常与操作系统深度集成,并且每个版本都不同.将它们捆绑在一起会增加支持负担并使OCaml程序的可移植性降低,整个OCaml分发更加脆弱.因此,取决于汇编程序/链接器抽象是一种甜点,它可以最大限度地减少依赖关系和支持负担,并最大限度地提高可移植性.
其他语言通常采用相同的方法.即使是依赖于LLVM的那些,因为LLVM实际上使用了GNU工具链链接器.
为了构建OCaml本身,C编译器是绝对必要的.OCaml本身并不完全用OCaml编写.实际上,OCaml运行时是用纯C编写的,例如垃圾收集器.此外,许多函数,特别是定义系统接口(例如,Unix)的函数也用C语言编写.该sloccount
工具给出了粗略估计,15%的OCaml源代码(45,000 LOC)用C语言编写.