Daniel J. Bernstein, un reconocido experto en criptografía y desarrollo de software seguro, creador de proyectos como qmail, djbdns, NaCl, Ed25519, Curve25519 y ChaCha20-Poly1305, ha publicado una nueva versión del proyecto cdb 20250121, que ofrece un formato de almacenamiento de datos y una biblioteca asociada para integrar funciones de bases de datos en aplicaciones en forma de clave/valor. Esta versión se ha creado más de 25 años después de la última actualización cdb 0.75, realizada en febrero de 2000.
La nueva versión implementa el formato cdb64, traducido a estructuras con tipos de 64 bits. En plataformas de 64 bits, el nuevo formato permite crear bases de datos de hasta un exabyte (anteriormente, el tamaño de la base de datos no podía exceder los 4 GB). La base de datos es muy compacta y utiliza un encabezado de 4096 bytes y 48 bytes de información de control por cada entrada (para la variante de 32 bits, el encabezado es de 2048 bytes y 24 bytes por entrada). Al acceder a la base de datos, se realizan solo dos operaciones de acceso al disco cuando hay clave y una si no la hay. Se admite la sustitución atómica de la base de datos, resistente a fallos y que no bloquea el acceso a la lectura.
Otros cambios:
- Soporte para la compilación utilizando un script de configuración e instalación con el comando 'make install'.
- Se eliminó la vinculación de los guiones de prueba a csh.
- Todos los valores enteros internos se han reemplazado por el tipo 'num', definido como 'long long'. Las funciones uint32, fmt y scan han sido reemplazadas por funciones que trabajan con el tipo num.
- La interfaz de programación para trabajar con búferes se ha dividido en inbuf y outbuf. Se ha realizado una limpieza de la interfaz hier.
- Se han eliminado del código las definiciones de funciones no utilizadas.
- Se ha detenido el uso de envoltorios, como str_len, alloc, uint32, exit, error y systype.
- El código se ha reescrito para dejar de usar construcciones de C obsoletas, como el antiguo estilo de definición de funciones, prototipos vacíos y el antiguo estilo de definición de main().
- Se han activado las definiciones const y static.
- En la compilación se ha activado la opción '-Wall', y se ha limpiado el código para eliminar advertencias.
- Al compilar se han incluido las opciones -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing y -fno-strict-overflow.
Fuente: opennet.ru
