我正在编写一个 OCaml 库,它有一些初始化代码,在使用该库的程序生命周期内只需要运行一次(并存储一些将在程序生命周期内持续存在的状态,但只能在库本身中使用),以及一些仅在使用该库的程序退出时才需要运行的清理代码。
如果它是相关的,我的库是两部分:一个低级 C 库的接口,以及一些更高级的东西,使编程更容易。我可以在 C 的某个地方做我需要的事情吗?理想情况下,我的用户不会关心它是如何实现的,他们永远不会看到 C 位。
在 Python 中,我会通过运行代码来做到这一点,import
但 OCamlopen
实际上并没有运行任何东西,它只是对模块命名空间加糖,然后是 Python 的atexit
,但我找不到 Ocaml 的等价物。
我考虑过的一种方法是将我的库构建为一个“框架”,但我认为这不足以保证这种过度设计的方法。谢谢!
更新:好的,我想。我正在使用 C 代码来处理退出时的清理,并且我对代码进行了一些修改,因此在 C 端有一个指向全局状态的指针
看来,在我的图书馆里,我现在有
let global_env = env_create ()
当它被open
主程序运行时,它确实会运行......但是如何?