我在编组数据结构时遇到了错误(错误抽象类型(自定义))。有一种已知的抽象类型,即Big_int。然而那个法警很好。应用程序中没有自定义C代码。除了Nums之外,还使用了Unix库(但我不相信有任何类型的活动对象)。我们是闭锁的元帅。
正在使用两个(仅)第三方库:OCS Scheme(Scheme解释器,纯Ocaml)和Dypgen(可扩展GLR解析器,也是纯Ocaml)。问题在于Dypgen的一个新功能,它保存了一个动态扩展的解析器。
Ocaml错误消息旁边没用(它不能识别哪个抽象类型带有Custom标签是罪魁祸首)。
我们怀疑Lexbuf是罪魁祸首,因为它包含一个Ocaml通道的封闭,并且不能成为元帅,但似乎这不是问题所在。所以我的问题是:
哪些标准库组件不能马歇尔?
答案 0 :(得分:7)
弱阵列无法编组。我不熟悉OCS Scheme,但是我希望用OCaml编写的垃圾收集语言的解释器使用弱指针(它们可以让你捎带OCaml的内存管理)。
在OCaml的辩护中,我不认为Custom方法块包含该类型的名称(回顾性地,这似乎是一件好事)。
编辑:是的:
$ grep Weak ~/Downloads/ocs-1.0.3/src/*.ml
/Users/pascal/Downloads/ocs-1.0.3/src/ocs_sym.ml:module SymTable = Weak.Make (HashSymbol)
EDIT2: 正如ygrek所指出的,自定义方法块中有一个名称空间。我还应该澄清弱数组不是自定义值,因为我的回答似乎暗示了这一点。弱数组具有Abstract标记,并使用数据的第一个字链接,以便垃圾收集器可以在收集周期的特定弱指针相关阶段中遍历它们。