A partire da 4D 20 R10, gli UUID sono ora generati direttamente con un algoritmo interno, invece di affidarsi alle funzioni di sistema, per un migliore controllo del loro formato e comportamento. Inoltre, con questo aggiornamento è possibile optare per gli UUID della versione 7, che supportano l’ordinamento cronologico. Vediamo cosa significa per le vostre applicazioni.
Capire le versioni UUID
Tutti gli UUID condividono lo stesso formato: 128 bit rappresentati da 32 caratteri esadecimali (0-9 + A-F). Tuttavia, possono codificare diversi tipi di informazioni. L’RFC 9562 definisce attualmente otto versioni di UUID. Internamente un UUID è memorizzato in due interi a 64 bit, rendendo estremamente efficienti le operazioni di confronto, interrogazione e ordinamento sulle CPU a 64 bit. I caratteri esadecimali sono solo un formato di visualizzazione, internamente non vengono utilizzati.
Finora, 4D si affidava alle funzioni di sistema per generare gli UUID. Queste funzioni non consentivano di scegliere o di sapere quale versione fosse utilizzata. In pratica, producevano tipicamente UUID della versione 4, completamente casuali.
Con la recente evoluzione dell’RFC, è stata introdotta la versione 7. Questa versione incorpora un timestamp, un’etichetta e un’icona. Essa incorpora un timestamp, rendendo gli UUID ordinabili in base all’ora di creazione. Molti di voi hanno richiesto il supporto per UUIDv7 nel forum delle richieste di funzionalità di 4D e siamo lieti di fornirlo in 4D 20 R10!
La versione 4 è ancora predefinita
Per garantire coerenza e compatibilità, 4D continua a utilizzare gli UUID della versione 4 per impostazione predefinita. Tuttavia, 4D non si affida più alle funzioni di sistema per generare gli UUID, ma li calcola internamente. In questo modo si evitano cambiamenti imprevisti dovuti a futuri aggiornamenti del sistema.
Inoltre, se si desidera sfruttare l’ordinamento cronologico della versione 7, è possibile attivarlo attraverso le impostazioni o il codice.
Cosa rende speciale la versione 7?
Gli UUID della versione 7 iniziano con un timestamp Unix Epoch, che consente di ordinarli cronologicamente. Questo è particolarmente utile durante lo sviluppo o il debug, quando si vuole che i record appena creati appaiano in cima (o in fondo) a un elenco.
Poiché la versione 7 utilizza la precisione del microsecondo, offre una granularità più fine rispetto al comando tradizionale Timestamp che è limitato ai millisecondi.
Nota: se più record vengono creati nello stesso microsecondo, condivideranno la stessa porzione di timestamp. Tuttavia, i loro UUID saranno comunque unici grazie a byte casuali aggiuntivi. L’ordinamento di questi record specifici potrebbe non essere significativo, ma l’ordinamento insieme agli altri rimane utile. In pratica, la creazione di un record richiede di solito più di un microsecondo, quindi questo caso limite è raro.
Nuova impostazione per gli UUID automatici della versione 7
Attivare la versione 7 per gli UUID generati automaticamente è semplice. Basta aprire la finestra di dialogo Impostazioni struttura, andare alla pagina Database > Archiviazione dati e selezionare la versione UUID desiderata.

Una volta impostata la versione 7, tutti gli UUID generati automaticamente, come quelli usati per le chiavi primarie, seguiranno il nuovo formato.
Gli UUID esistenti nel database non vengono modificati per preservare la coerenza. Poiché la differenza tra la versione 4 e la 7 è interna (non strutturale), i due formati possono coesistere senza problemi.
Generare UUID versione 7 in codice
Anche il comando Generate UUID è stato aggiornato per supportare la versione 7. È sufficiente specificare la versione come parametro! Molto semplice, no?
E se manca il parametro, la versione utilizzata di default è sempre la 4, per mantenere il codice coerente.
var $uuid : Text
$uuid :=Generate UUID // v4: 578BFEC987BD4C11AE8AB9CD3DC12DD0
$uuid :=Generate UUID(4) // v4: C2BE4B6723634DBE9F4387B1226A4B4F
$uuid :=Generate UUID(7) // v7: 0198C7A4E41A7B6CB39F460873165D30
$uuid :=Generate UUID(7) // v7: 0198C7A543557F89AA7D83563AB5C97E
Ecco un rapido confronto dei risultati di cui sopra:
- Gli UUID della versione 4 sono completamente casuali.
- Gli UUID della versione 7 condividono un prefisso comune (timestamp), con la casualità alla fine.
Ci auguriamo che questa nuova funzione vi offra maggiore flessibilità e controllo sui vostri sviluppi. Come sempre, ascoltiamo il vostro feedback ed evolviamo 4D per soddisfare le vostre esigenze.
Buona codifica!
Al momento non è possibile lasciare commenti su questo post.