我正在寻找一种方法来记忆OCaml函数的结果,该函数f需要两个参数(或者更多,一般来说).另外(这是困难的部分),如果两个参数的任何一个值都是垃圾收集的话,我希望这个过程的底图完全忘记一个结果.
对于只接受一个参数的函数,可以通过Weak模块及其Make函数以简单的方式完成.为了将这一点概括为可以记忆更高级别的函数的东西,一个天真的解决方案是创建一个从值元组到结果值的弱映射.但是这对垃圾收集来说无法正常工作,因为值的元组只存在于memoization函数的范围内,而不是调用的客户端代码f.事实上,弱引用将是元组,它将在备忘录后立即进行垃圾收集(在最坏的情况下).
没有重新实现,有没有办法做到这一点Weak.Make?
Hash-consing与我的要求是正交的,事实上,我的价值观并不理想.
谢谢!
我找到了许多关于如何.o使用C源构建文件的指南ocamlbuild.但是,这些不适用于C++文件,它们ocamlbuild无法开箱即用.
我试图写一个myocamlbuild.ml提供从规则文件(请求后如下图所示).cpp,以.o和失败,ocamlc抱怨不知道该怎么做一个.cpp文件(即使当编译器设置为g++通过命令行标志).
open Ocamlbuild_plugin ;;
let ext_obj = !Options.ext_obj;;
let x_o = "%"-.-ext_obj;;
rule "ocaml C++ stubs: cpp -> o"
~prod:x_o
~dep:"%.cpp"
begin fun env _build ->
let c = env "%.cpp" in
let o = env x_o in
let comp =
if Tags.mem "native" (tags_of_pathname c) then !Options.ocamlopt else !Options.ocamlc in
let cc =
Cmd(S[comp; T(tags_of_pathname c++"c"++"compile"); A"-custom"; A"-cc"; A"g++"; A"-c"; …Run Code Online (Sandbox Code Playgroud)