私は、ライブラリを使用するプログラムの存続期間中に1回だけ実行する必要がある初期化コードを持つOCamlライブラリを作成しています(そして、プログラムの存続期間中持続するが、ライブラリ自体の中でのみ使用される状態を保存します)、およびライブラリを使用するプログラムが終了するときにのみ実行する必要があるいくつかのクリーンアップコード。
関連性がある場合、私のライブラリは2つの部分に分かれています。低レベルのCライブラリへのインターフェイスと、それを使用したプログラミングを容易にするための高レベルのものです。Cのどこかで必要なことを実行できますか?理想的には、私のユーザーはそれがどのように実装されているかを気にせず、Cビットを見ることはありません。
Pythonでは、コードを実行してこれを行いますimport
が、OCamlopen
は実際には何も実行せず、モジュールの名前空間、次にPythonの名前空間をatexit
シュガーしますが、Ocamlに相当するものが見つかりません。
私が検討したアプローチの1つは、ライブラリを「フレームワーク」として構造化することですが、そのような過剰に設計されたアプローチを正当化するほど重要ではないと思います。ありがとう!
更新:わかりました-わかりました-私は思います。終了時のクリーンアップを処理するためにCコードを使用していますが、コードを少し操作したので、C側にグローバル状態へのポインターがあります。
私の図書館には今持っているように見えます
let global_env = env_create ()
そして、それがopen
メインプログラムによって実行されると、これは実行されます...しかし、どのように?