背景资料(您无需重复上述步骤来回答这个问题,这只是给一些背景):剖析OCaml的编译器
我试图编译a rather large set of generated modules。这些文件是Modelica原型输出到OCaml编译器,并反映Modelica标准库的Modelica类结构。
主要特点是使用多态开放式递归:每种方法都采用包含最终超类层次结构的this
参数。因此,例如模型:
model A type T = Real type S = T end A;
被翻译成
let m_A = object
method m_T this = m_Modelica_Real
method m_S this = this#m_T this
end
,并于使用前被关闭:
let _ = m_A#m_T m_A
这似乎推迟了很多的类型检查,直到超类的层次结构实际上是固定的,这又使得不可能编译最终的联动模块(编辑后编辑ocamlbuild Linkage.cmo
在相应的文件中的意见,看看我的意思)。
不幸的是,由于代码库相当庞大并且使用了很多对象,因此类型结构毕竟不是根本原因,它可能是代码生成中的一些优化或缺陷(尽管我强烈怀疑typechecker)。所以我的问题是:有没有办法以某种方式对ocaml编译器进行配置,以便在某个阶段(类型检查,中间代码生成,优化)结束并需要多长时间时发出信号?任何进一步的见解我的特殊用例也是受欢迎的。
作为一个方面说明,在OCaml中以大写字母开始文件名被认为是不好的做法。 'linkage.cmo'会比'linkage.cmo'更好。 – PatJ
如果你想分析ocaml编译器,我可以建议你使用“ocp-memprof”。 ocp-memprof的主页:http://memprof.typerex.org/ – alifirat