Даниел Бернщтайн (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.
- Кодът е преработен, за да се спре използването на остарели C конструкции, като стар стил на дефиниране на функции, празни прототипи и стар стил на дефиниране на main().
- Използват се определения на const и static.
- При изграждане е активиран флагът „-Wall“, а кодът е почистен, за да се отстранят предупрежденията.
- При компилация са включени опциите -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing и -fno-strict-overflow.
Източник: opennet.ru
