Daniel Bernstein, znany ekspert w dziedzinie kryptografii i tworzenia zabezpieczonego oprogramowania, autor projektów takich jak qmail, djbdns, NaCl, Ed25519, Curve25519 i ChaCha20-Poly1305, opublikował wydanie projektu cdb 20250121, które oferuje format przechowywania danych oraz towarzyszącą bibliotekę do wbudowywania w aplikacje funkcji do pracy z bazami danych w formie klucz/wartość. Wydanie to zostało opracowane po ponad 25 latach od ostatniej aktualizacji cdb 0.75, stworzonej w lutym 2000 roku.
W nowej wersji wprowadzono format cdb64, przetłumaczony na struktury z 64-bitowymi typami. Na platformach 64-bitowych nowy format pozwala na tworzenie baz danych o rozmiarze do eksabajta (wcześniej rozmiar bazy danych nie mógł przekraczać 4 GB). Baza danych jest bardzo kompaktowa i wykorzystuje nagłówek o rozmiarze 4096 bajtów oraz 48 bajtów informacji pomocniczej na każdy wpis (dla 32-bitowej wersji nagłówek ma 2048 bajtów i 24 bajty na wpis). Przy dostępie do bazy danych wykonywane są tylko dwie operacje dostępu do dysku przy posiadaniu klucza i jedna — w przypadku jego braku. Wspierana jest atomowa wymiana bazy danych, odporna na awarie i nie blokująca dostępu do odczytu.
Inne zmiany:
- Wsparcie dla kompilacji z użyciem skryptu configure i instalacji za pomocą polecenia „make install”.
- Usunięto powiązanie scenariuszy testowych z csh.
- Wszystkie wewnętrzne wartości całkowite zostały zastąpione typem „num”, zdefiniowanym jako „long long”. Funkcje uint32, fmt i scan zostały zastąpione funkcjami działającymi z typem num.
- Interfejs programowania do pracy z buforami został podzielony na inbuf i outbuf. Przeprowadzono czyszczenie interfejsu hier.
- Usunięto definicje nieużywanych funkcji z kodu.
- Zaprzestano używania powiązań, takich jak str_len, alloc, uint32, exit, error i systype.
- Kod został przerobiony, aby zaprzestać używania przestarzałych konstrukcji C, takich jak stary styl definiowania funkcji, puste prototypy i stary styl definiowania main().
- Wykorzystano definicje const i static.
- Podczas kompilacji aktywowany jest flaga „-Wall”, a kod został oczyszczony w celu usunięcia ostrzeżeń.
- Podczas kompilacji włączono opcje -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing i -fno-strict-overflow.
Źródło: opennet.ru
