我在编组数据结构时失败(错误抽象类型(自定义)).有一种已知的抽象类型,即Big_int.然而那个法警很好.应用程序中没有自定义C代码.除了Nums之外,还使用了Unix库(但我不相信有任何类型的活动对象).我们是关闭闭锁的元帅.
正在使用两个(仅)第三方库:OCS Scheme(Scheme解释器,纯Ocaml)和Dypgen(可扩展GLR解析器,也是纯Ocaml).问题在于Dypgen的一个新功能,它保存了一个动态扩展的解析器.
Ocaml错误消息旁边是无用的(它不能识别哪个抽象类型与Custom标签是罪魁祸首).
我们怀疑Lexbuf是罪魁祸首,因为它包含一个Ocaml通道上的封闭,并且不能被元帅,但似乎这不是问题所在.所以我的问题是:
哪个标准库组件不能马歇尔?
弱阵列无法编组.我不熟悉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)
Run Code Online (Sandbox Code Playgroud)
EDIT2:正如ygrek所指出的,自定义方法块中有一个名称空间.我还应该澄清弱数组不是自定义值,因为我的回答似乎暗示了这一点.弱数组具有Abstract标记,并使用数据的第一个字链接,以便垃圾收集器可以在收集周期的特殊弱指针相关阶段中遍历它们.