我查看了一些OCaml值的内部表示。空数组的表示是atom(0)
,即具有tag=0
和size=0
的块。空的浮点数也由atom(0)
表示。
是否有一个由tag > 0
原子表示的OCaml值?如果不是:为什么OCaml字节码集包含ATOM n
指令?
答案 0 :(得分:1)
标签> 0用于带参数的构造函数,这将使它们不是原子。另一方面,没有参数的构造函数存储为int而不是块,因此也不是原子。所以我认为不使用atom(0)。除了......
如果构造函数的内联记录为空?
# type t = A of int | B of { };;
Error: Syntax error
似乎不允许空记录。除了直接创建这样的块之外,我想不出用标签创建0大小块的另一种方法。但那不会使用ATOM指令。