Daniel J. Bernstein, noto esperto nel campo della crittografia e nello sviluppo di software sicuro, che ha realizzato progetti come qmail, djbdns, NaCl, Ed25519, Curve25519 e ChaCha20-Poly1305, ha pubblicato la versione del progetto cdb 20250121, che offre un formato di archiviazione dei dati e una libreria associata per l'integrazione di funzioni per la gestione dei database in forma chiave/valore nelle applicazioni. Questa versione è stata elaborata dopo oltre 25 anni dall'ultimo aggiornamento del cdb 0.75, rilasciato nel febbraio 2000.
Nella nuova versione è stato implementato il formato cdb64, convertito per strutture con tipi a 64 bit. Sulle piattaforme a 64 bit, il nuovo formato consente di creare database fino a un exabyte (precedentemente, la dimensione del database non poteva superare i 4 GB). I database sono molto compatti e utilizzano un'intestazione di 4096 byte e 48 byte di informazioni ausiliarie per ciascun record (per la versione a 32 bit, l'intestazione è di 2048 byte e 24 byte per record). Durante l'accesso al database vengono eseguite solo due operazioni di accesso al disco in presenza di una chiave e una in assenza. È supportata la sostituzione atomica del database, resistente ai crash e non blocca l'accesso in lettura.
Altre modifiche:
- Supporto per la compilazione utilizzando lo script configure e installazione con il comando «make install».
- Rimossa la dipendenza degli scenari di test dal csh.
- Tutti i valori interi interni sono stati sostituiti con il tipo «num», definito come «long long». Le funzioni uint32, fmt e scan sono state sostituite con funzioni che lavorano con il tipo num.
- L'interfaccia di programmazione per i buffer è stata suddivisa in inbuf e outbuf. Eseguita una pulizia dell'interfaccia hier.
- Definizioni di funzioni inutilizzate rimosse dal codice.
- Interrotto l'uso di wrapper come str_len, alloc, uint32, exit, error e systype.
- Il codice è stato ristrutturato per interrompere l'uso di costrutti C obsoleti, come il vecchio stile di definizione delle funzioni, prototipi vuoti e il vecchio stile di definizione di main().
- Introduzione di definizioni const e static.
- Durante la compilazione è stato attivato il flag «-Wall» e il codice è stato ripulito per rimuovere gli avvisi.
- Durante la compilazione sono state incluse le opzioni -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing e -fno-strict-overflow.
Fonte: opennet.ru
