Question

J'écris une bibliothèque OCAML qui a un code d'initialisation qui ne doit être exécuté qu'une seule fois pendant la durée de vie du programme à l'aide de la bibliothèque (et stocker un état qui persistera pour la durée de vie du programme, mais ne soyez utilisé que dans la bibliothèque elle-même ), et un code de nettoyage qui doit être exécuté uniquement sous forme de programme à l'aide de la bibliothèque quitte.

S'il est pertinent, ma bibliothèque est deux parties: une interface avec une bibliothèque C de bas niveau et des éléments de niveau supérieur pour faciliter la programmation. Puis-je faire ce dont j'ai besoin quelque part dans le C? Idéalement, mes utilisateurs ne s'en soucieraient pas comment Il a été mis en œuvre, ils ne verraient jamais les bits C.

Dans Python, je ferais cela en exécutant du code sur import Mais Ocaml open n'exécute rien, il sucre juste l'espace de noms du module, puis Python atexit, mais je ne trouve pas l'équivalent OCAML.

Une approche que j'ai considérée est de structurer ma bibliothèque comme un "cadre", mais je ne pense pas qu'il soit suffisamment important pour justifier une approche aussi surdimensionnée. Merci!

METTRE À JOUR: Ok l'a compris - je pense. J'utilise le code C pour gérer le nettoyage à la sortie et j'ai un peu de singe avec le code, donc il y a un pointeur vers l'état global du côté C

Il serait apparaître que dans ma bibliothèque j'ai maintenant

let global_env = env_create ()

Et quand c'est open'D par le programme principal, ce Est-ce que se faire courir ... mais comment?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top