Domanda

Sto scrivendo una libreria OCAML che ha un codice di inizializzazione che deve essere eseguito solo una volta durante la vita del programma usando la biblioteca (e memorizza alcuni stati che persisteranno per la vita del programma, ma verranno utilizzate solo all'interno della biblioteca stessa ) e del codice di pulizia che deve essere eseguito solo come il programma utilizzando la libreria.

Se è rilevante, la mia libreria è due parti: un'interfaccia per una libreria C di basso livello e alcune cose di livello superiore per semplificare la programmazione con esso. Posso fare ciò di cui ho bisogno da qualche parte nella C? Idealmente ai miei utenti non importa come È stato implementato, non avrebbero mai visto i bit C.

In Python lo farei eseguendo il codice import Ma Ocaml's open In realtà non esegue nulla, zucchera solo lo spazio dei nomi dei moduli, e poi quello di Python atexit, ma non riesco a trovare l'equivalente OCAML.

Un approccio che ho considerato è strutturare la mia biblioteca come un "framework" ma non credo sia abbastanza importante da giustificare un approccio così troppo ingegnerizzato. Grazie!

AGGIORNARE: Ok ho capito - penso. Sto usando il codice C per gestire la pulizia all'uscita e ho un po 'le scimmie con il codice, quindi c'è un puntatore allo stato globale sul lato C

Sarebbe apparire che nella mia biblioteca ora ho

let global_env = env_create ()

E quando lo è openDal programma principale, questo fa Ottieni correre ... ma come?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top