Daniel J. Bernstein, expert en cryptographie et en développement de logiciels sécurisés, connu pour avoir conçu des projets tels que qmail, djbdns, NaCl, Ed25519, Curve25519 et ChaCha20-Poly1305, a publié une nouvelle version du projet cdb 20250121, qui propose un format de stockage des données et une bibliothèque associée pour intégrer des fonctions de base de données sous forme de clé/valeur dans les applications. Cette mise à jour survient plus de 25 ans après la dernière mise à jour de cdb 0.75, publiée en février 2000.
La nouvelle version introduit le format cdb64, adapté aux structures avec des types de 64 bits. Sur les plateformes 64 bits, ce nouveau format permet de créer des bases de données d'une taille allant jusqu'à un exaoctet (auparavant, la taille maximale était de 4 Go). La base de données est très compacte et utilise un en-tête de 4096 octets avec 48 octets d'informations de gestion par enregistrement (pour la version 32 bits, l'en-tête fait 2048 octets avec 24 octets par enregistrement). Lors de l'accès à la base de données, seules deux opérations d'accès disque sont effectuées en cas de clé et une en son absence. La mise à jour atomique de la base de données est supportée, résistant aux pannes et ne bloquant pas l'accès en lecture.
Autres changements :
- Prise en charge de la compilation utilisant le script configure et l'installation par la commande « make install ».
- La liaison des scénarios de test à csh a été supprimée.
- Tous les entiers internes ont été remplacés par le type « num », défini comme « long long ». Les fonctions uint32, fmt et scan ont été remplacées par des fonctions traitant le type num.
- L'interface de travail avec les buffers a été séparée en inbuf et outbuf. L'interface hier a été nettoyée.
- Les définitions de fonctions non utilisées ont été supprimées du code.
- L'utilisation de wrappers tels que str_len, alloc, uint32, exit, error et systype a été arrêtée.
- Le code a été révisé pour cesser d'utiliser des constructions C obsolètes, telles que l'ancienne définition des fonctions, des prototypes vides et l'ancienne définition de main().
- Des définitions const et static ont été mises en œuvre.
- Lors de la compilation, le flag « -Wall » a été activé et le code a été nettoyé pour éliminer les avertissements.
- Lors de la compilation, les options -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing et -fno-strict-overflow ont été incluses.
Source : opennet.ru
