Выпуск Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ встраиваСмой Π‘Π£Π‘Π” libmdbx 0.10.4 ΠΈ libfpta 0.3.9

Бостоялся выпуск Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ libmdbx 0.10.4 (MDBX) с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠΉ встраиваСмой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… класса ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ связанной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libfpta 0.3.9 (FPTA), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ²Π΅Ρ€Ρ… MDBX Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ… с Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ составными индСксами. ОбС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ лицСнзиями ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ OSI. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ российский Π­Π»ΡŒΠ±Ρ€ΡƒΡ 2000.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ libmdbx являСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π‘Π£Π‘Π” LMDB ΠΈ прСвосходит своСго прародитСля ΠΏΠΎ надёТности, Π½Π°Π±ΠΎΡ€Ρƒ возмоТностСй ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ сравнСнии с LMDB, Π² libmdbx большоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся качСству ΠΊΠΎΠ΄Π°, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ API, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ автоматичСским ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌ. ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности структуры Π‘Π” с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ возмоТностями восстановлСния.

ВСхнологичСски libmdbx ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ACID, ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ядрам ЦПУ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ автокомпактификация, автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π‘Π”, ΠΎΡ†Π΅Π½ΠΊΠ° ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ (range query estimation). Π‘ 2016 Π³ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ финансируСтся ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Positive Technologies ΠΈ c 2017 Π³ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π΅Ρ‘ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ….

Для libmdbx прСдлагаСтся C++ API, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ энтузиастами привязки ΠΊ языкам Rust, Haskell, Python, NodeJS, Ruby, Go, Nim. Для libfpta ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описаниС API Π² Π²ΠΈΠ΄Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° C/C++.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°, Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ исправлСния, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ послС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ новости ΠΎΡ‚ 9 мая:

  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ воспроизводимых сборок.
  • УстранСна ошибка, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎΠΌ стСчСнии ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π² Π² Ρ…ΠΎΠ΄Π΅ фиксации Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅/зависаниС. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° выявлСна спСциалистами Positive Tecnologies ΠΏΡ€ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ тСстировании собствСнных ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ².
  • Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ тСсты ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ тСстовыС сцСнарии для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ всСх достиТимых Π½Π΅ ΠΈΠ·ΠΎΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… состояний Π΄Π΅Ρ€Π΅Π²Π° страниц ΠΈ содСрТимого GC Π²Π½ΡƒΡ‚Ρ€ΠΈ Π‘Π”.
  • Π’ C++ API исправлСн лишний «noexcept», Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° «cursor::erase()», рСализация Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΈΠ·Π±Π°Π²Π»Π΅Π½Π° ΠΎΡ‚ использования «std::string» для обСспСчСния выравнивания (Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для CLANG libstdc++).
  • Устранён рСгрСсс Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ спиллинга грязных страниц (ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ вытСснСниС ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Ρ… страниц Π‘Π”) ΠΏΡ€ΠΎΡΠ²Π»ΡΠ²ΡˆΠ΅ΠΉΡΡ Ρ€Π΅Π΄ΠΊΠΎΠΉ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΉ ошибкой MDBX_PROBLEM ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… транзакциях.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ„Π°Π·ΠΈΠ½Π³ΠΎΠΌ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ряда ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ для обСспСчСния ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ Π‘Π”.
  • УстранСны Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прСдупрСТдСния UndefinedBehaviorSanitizer ΠΈ Coverity Scan issues.
  • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΈ ΡƒΠΆΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Ρ„Π»Π°Π³Π° «P_DIRTY» Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… страницах Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π‘Π” созданных старыми вСрсиями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Π’ скриптах CMake Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½ поиск ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² компилятора Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для LTO (link-time optimization).
  • МаксимальноС ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π΄ΠΎ 32767.
  • УскорСна Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΈ использовании Valgrind ΠΈ AddressSanitizer.
  • На Windows устранСно рСкурсивноС использованиС SRW-lock ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ MDBX_NOTLS (Π±Π΅Π· использования thread local storage), исправлСна гСнСрация bootid Π² случаС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ систСмного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ WSL1 ΠΈ WSL2, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ открытия Π‘Π” Π½Π° Plan 9 смонтированной посрСдством DrvFS.
  • Π‘ΡƒΠΌΠΌΠ°Ρ€Π½ΠΎ внСсСно Π±ΠΎΠ»Π΅Π΅ 160 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² 57 Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ~5000 строк, ΡƒΠ΄Π°Π»Π΅Π½ΠΎ ~2500.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ хочСтся ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Erigon (экосистСма Ethereum) Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² тСстировании Π² ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… сцСнариях использования. ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π° ΠΏΡΡ‚ΡŒ мСсяцСв с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° libmdbx v0.10.0, ΠΏΡ€ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ Π‘Π” 1-2 Π’Π± Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ инсталляции Erigon (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° 7% ΡƒΠ·Π»ΠΎΠ² Ethereum), поступило Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ сообщСния ΠΎ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ Π‘Π”, всС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ΠΈΠ·-Π·Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½, Π° Π½Π΅ ошибок ПО: Π² Π΄Π²ΡƒΡ… случаях ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π±Ρ‹Π»ΠΈ сбои ΠžΠ—Π£, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ошибка обнулСния Π΄Π°Π½Π½Ρ‹Ρ… Π² спСцифичСской ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ подсистСмы хранСния с использованиСм BTRFS.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru