Daniel Bernstein (Daniel J. Bernstein), renomado especialista em criptografia e desenvolvimento de software seguro, famoso por projetos como qmail, djbdns, NaCl, Ed25519, Curve25519 e ChaCha20-Poly1305, publicou a versão do projeto cdb 20250121, que oferece um formato de armazenamento de dados e uma biblioteca auxiliar para a integração em aplicativos de funções para operar com bancos de dados no formato chave/valor. Esta versão foi criada após mais de 25 anos desde a última atualização do cdb 0.75, lançada em fevereiro de 2000.
A nova versão implementa o formato cdb64, traduzido para estruturas com tipos de 64 bits. Nas plataformas de 64 bits, o novo formato permite criar bancos de dados com tamanho de até um exabyte (anteriormente, o tamanho do banco de dados não poderia exceder 4 GB). O banco de dados é muito compacto e utiliza um cabeçalho de 4096 bytes e 48 bytes de informações de metadados para cada entrada (para a versão de 32 bits, o cabeçalho é de 2048 e 24 bytes por entrada). Ao acessar o banco de dados, são realizadas apenas duas operações de acesso ao disco quando a chave está presente e uma quando está ausente. Suporta a substituição atômica do banco de dados, resistente a falhas e não bloqueia o acesso para leitura.
Outras alterações:
- Suporte para compilação utilizando o script configure e instalação via comando 'make install'.
- Removida a vinculação de scripts de teste ao csh.
- Todos os valores inteiros internos foram substituídos pelo tipo 'num', definido como 'long long'. As funções uint32, fmt e scan foram substituídas por funções que operam com o tipo num.
- A interface do programa para trabalhar com buffers foi dividida em inbuf e outbuf. A interface hier foi limpada.
- Definições de funções não utilizadas foram removidas do código.
- Interrupção do uso de wrappers, como str_len, alloc, uint32, exit, error e systype.
- O código foi reestruturado para interromper o uso de construções C obsoletas, como o estilo antigo de definição de funções, protótipos vazios e o estilo antigo de definição de main().
- Definições const e static foram ativadas.
- Durante a compilação, a flag '-Wall' foi ativada e o código foi limpo para eliminar avisos.
- As opções -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing e -fno-strict-overflow foram incluídas na compilação.
Fonte: opennet.ru
