背景資料(您無需重複上述步驟來回答這個問題,這只是給一些背景):剖析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