Sto lavorando alla scrittura di un passaggio del compilatore in LLVM; come parte del pass, ho bisogno di creare identificatori univoci per certe istruzioni. Voglio che questo sia prevedibile e coerente, in modo tale che se compilo un programma due volte le stesse istruzioni ottengano le stesse istruzioni.
Ho anche bisogno che gli identificatori siano unici su l'intero programma , il che significa mantenere l'unicità tra più moduli / unità di compilazione / file. Poiché ogni compilazione è una chiamata separata del compilatore (a.k.a. un nuovo processo), l'unico modo che conosco per mantenere questo stato - l'identificatore univoco - è tramite il filesystem. In poche parole:
- Crea un file che conserva l'ID utilizzato più di recente, a partire da 0.
- All'inizio del passaggio, leggi questo ID dal file.
- Incremento secondo necessità durante il mio passaggio.
- Alla fine del passaggio, scrivi l'ID sul file.
Tra compilazioni dello stesso programma, dovrò reimpostare questo file su 0 (per garantire lo stesso ID iniziale ogni volta).
Sembra un po 'goffo, se possibile. Ho pensato di usare numeri casuali a 64 bit come UID, ma il problema dell'intero programma di unicità rimane (dovrei mantenere il seed e usare un seed nuovo ma prevedibile / coerente per ogni unità di compilazione).
La mia domanda quindi - posso evitare di mantenere un file temporaneo per mantenere lo stato tra le chiamate di processo? C'è un trucco / paradigma di programmazione che posso usare per evitare questo?