编译 OCaml .cmm 文件

问题描述 投票:0回答:1

我编写了简单的 OCaml 代码,例如:

let rec fib(n: int) = 
  match n with
  | 0 -> 0
  | 1 -> 1
  | _ -> fib(n-1) + fib(n-2)

使用

-dcmm
选项
ocamlopt
,我可以生成以下
.cmm
文件:


cmm:
(data)
(data int 3063 "camlTest__1": addr "camlTest__fib_267" int 72057594037927941)
(data int 1792 global "camlTest" "camlTest": int 1)
(data
 global "camlTest__gc_roots"
 "camlTest__gc_roots":
 addr "camlTest"
 int 0)
(function{test.ml:1,11-88} camlTest__fib_267 (n/268: val)
 (if (!= n/268 1)
   (if (!= n/268 3)
     (+
       (+ (app{test.ml:5,9-17} "camlTest__fib_267" (+ n/268 -2) val)
         (app{test.ml:5,20-28} "camlTest__fib_267" (+ n/268 -4) val))
       -1)
     3)
   1))

(function camlTest__entry ()
 (let clos/271 "camlTest__1" (store val(root-init) "camlTest" clos/271)) 1)

(data)

ocamlopt
可以将OCaml代码(
.ml
)编译为机器代码,那么我可以直接从
.cmm
文件生成机器代码吗?

我在

.cmm
中没有找到任何将
ocamlopt
文件编译为机器代码的选项,所以我尝试在
Asmgen
模块中使用
ocaml-base-compiler

但是,

Asmgen
功能需要
Cmm.phrase
类型,但没有找到如何将
.cmm
文件转换为
Cmm.phrase
类型。

ocaml
1个回答
1
投票

-d...

 开头的 
OCaml 编译器标志是主要针对编译器开发人员的调试标志。
-dcmm
也不例外,它的输出无法被编译器读回(并且可能不完整)。

© www.soinside.com 2019 - 2024. All rights reserved.