我有以下问题。我正在玩OCaml类型检查器,并正在测试来自另一个项目的文件。但是,这些文件依赖于某些先前编译器版本编译的cmi和cmo文件。因此,我无法使用我的编译器完全检查这些文件,因为它似乎无法识别那些cmo和cmi文件。有办法解决这个问题吗?
请注意,我无法切换到旧的编译器版本,并且我没有这些cmo和cmi文件的源代码。我想到查看OCaml文件,推断函数签名,并创建具有相同签名的新cmi和cmo文件。这可能会起作用,因为我只对类型检查感兴趣。但是,我认为可能有更好的方法。
答案 0 :(得分:2)
如果您对旧OCaml编译器编译模块的类型纯粹感兴趣,那么最好的选择是:
复制旧的cmo文件应该更加困难。我担心,将它们与固定的cmi文件链接应该会产生意想不到的结果。从理论上讲,可以将cmo文件反编译为ml源代码--- js_of_ocaml可以反编译cmo并创建(以某种方式)可读的JavaScript,但这是一项艰巨的任务。
答案 1 :(得分:1)
显而易见的是使用新编译器编译文件,而不是仅查看它们。也许这太明显了,对不起。
我不知道任何转储cmi文件接口的工具。最接近的是ocamlobjinfo,但它远远不够。您可以尝试将cmo文件加载到旧的顶层。顶层将告诉您值的类型。