我正在为CS类整理一个OCaml简介项目,其中一部分涉及实现列表操作。我希望他们能够使用Pervasives,但不能使用List或任何其他标准库模块。有没有办法设置ocamlbuild,使其仅与标准库中的Pervasives链接?
我看到两个机会:要么直接从OCaml标准库中删除模块,要么通过重载具有不同(可能为空)签名的模块来隐藏它们。
第一个变体需要编辑OCaml分发Makefile。实际上,使用opam并没有那么可怕,因为您可以非常轻松地修补OCaml,并将每个修补的OCaml作为单独的编译器分发。从STDLIB删除模块存档,您将需要编辑stdlib/Makefile.shared
,stdlib/StdlibModules
和stdlib.mllib
。删除不必要的模块后,可以执行以下操作:
./configure
make world.opt
make install
另一种选择是(ab)使用的-open
命令行参数ocamlc
。当使用模块名称指定该选项时,该模块将在编译程序中自动打开。例如,您可以在具有以下接口(minimal.mli
)的标准库上编写自己的叠加层:
module List = sig end (* or whatever you want to expose *)
然后您可以使用ocamlc -open minimal ...
或进行编译ocamlbuild
:(ocamlbuild -cflags -open,minimal ...
您还可以使用_tags
file传递打开标志,或编写ocamlbuild插件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句