Я пишу библиотеку OCaml, в которой есть некоторый код инициализации, который должен быть запущен только один раз за время существования программы с использованием библиотеки (и хранит некоторое состояние, которое будет сохраняться в течение всего срока действия программы, но использоваться только внутрисамой библиотеки) и некоторый код очистки, который необходимо запускать только при выходе из программы, использующей библиотеку.
Если это уместно, моя библиотека состоит из двух частей: интерфейса с низкоуровневой библиотекой C и некоторых высокоуровневых вещей, облегчающих программирование.Могу ли я сделать то, что мне нужно где-то в C?В идеале моим пользователям было бы все равно, как это реализовано, они никогда не увидят биты C.
В Python я бы сделал это, запустив код на import
, но на open
в OCaml.на самом деле ничего не запускается, он просто подслащивает пространство имен модуля, а затем Python atexit
, но я не могу найти эквивалент Ocaml.
Один из подходов, который я рассмотрел, - это структурирование моей библиотеки как "фреймворка"«Но я не думаю, что это достаточно важно, чтобы оправдать такой чрезмерно продуманный подход.Спасибо!
ОБНОВЛЕНИЕ : ОК, понял - думаю.Я использую код C для обработки очистки при выходе, и я немного манипулировал кодом, чтобы на стороне C был указатель на глобальное состояние
Это будет , чтов моей библиотеке у меня теперь есть
let global_env = env_create ()
И когда оно open
d основной программой, это запускается ... Но как?