0

我正在查看用于创建 LLVM IR 的 codegen.ml 文件。我对 Ocaml 不熟悉,所以只需要澄清一下

  let i32_t      = L.i32_type    context
  and float_t    = L.double_type context

  let ltype_of_typ = function
      A.Int   -> i32_t
    | A.Float -> float_t
  in

  let global_vars : L.llvalue StringMap.t =
    let global_var m (t, n) = 
      let init = match t with
          A.Float -> L.const_float (ltype_of_typ t) 0.0

所以对于这条线

 A.Float -> L.const_float (ltype_of_typ t) 0.0

“->”后面的东西是干什么的?是否将 0.0 转换为浮点数?

4

1 回答 1

1

该代码正在调用L.const_float带有两个参数的函数。代码读起来好像它正在设置从名称到值的全局映射。一些值似乎是固定浮点数的表示。除此之外,我无法帮助您,因为我不熟悉 LLVM。

但是 OCaml 中没有“类型转换”。标准库中有一些函数可以在数字类型之间进行转换(int_of_float例如)。但是没有用于转换类型的语言功能。OCaml 是一种强类型语言,类型转换(如在 C 或 C++ 中)几乎违反了这一点。

在专门讨论 LLVM 的论坛中提问可能会更有帮助。

于 2021-12-27T02:07:51.190 回答