Дэниэл Бернштейн обновил библиотеку Cdb

Дэниэл Бернштейн (Daniel J. Bernstein), известный эксперт в области криптографии и создания защищённого ПО, разработавший такие проекты, как qmail, djbdns, NaCl, Ed25519, Curve25519 и ChaCha20-Poly1305, опубликовал выпуск проекта cdb 20250121, предлагающего формат хранения данных и сопутствующую библиотеку для встраивания в приложения функций для работы с БД в форме ключ/значение. Выпуск сформирован спустя более 25 лет с момента прошлого обновления cdb 0.75, сформированного в феврале 2000 года.

В новой версии реализован формат cdb64, переведённый на структуры с 64-разрядными типами. На 64-разрядных платформах новый формат позволяет создавать БД размером до эксабайта (ранее размер БД не мог превышать 4 ГБ). БД очень компактная и использует 4096-байтовый заголовок и по 48 байт служебной информации на каждую запись (для 32-разрядного варианта заголовок 2048 и по 24 байта на запись). При обращении к БД выполняются всего две операции доступа к диску при наличии ключа и один – при отсутствии. Поддерживается атомарная замена БД, стойкая к аварийным завершениям и не блокирующая доступ на чтение.

Другие изменения:

  • Поддержка сборки с использованием скрипта configure и установки командой “make install”.
  • Убрана привязка тестовых сценариев к csh.
  • Все внутренние целые значения заменены на тип “num”, определённый как “long long”. Функции uint32, fmt и scan заменены на функции, работающие с типом num.
  • Программный интерфейс работы с буферами разделён на inbuf и outbuf. Проведена чистка интерфейса hier.
  • Из кода убраны определения неиспользуемых функций.
  • Прекращено использование обвязок, таких как str_len, alloc, uint32, exit, error и systype.
  • Код переделан для прекращения использования устаревших Си-конструкций, таких как старый стиль определения функций, пустые прототипы и старый стиль определения main().
  • Задействованы определения const и static.
  • При сборке активирован флаг “-Wall”, а код почищен для устранения предупреждений.
  • При компиляции включены опции -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing и -fno-strict-overflow.
Release. Ссылка here.