Выпуск языка программирования Rust 1.75 ΠΈ unikernel Hermit 0.6.7

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· языка программирования ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния Rust 1.75, основанного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Mozilla, Π½ΠΎ Π½Ρ‹Π½Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΏΠΎΠΊΡ€ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ нСзависимой нСкоммСрчСской ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Rust Foundation. Π―Π·Ρ‹ΠΊ сфокусирован Π½Π° бСзопасной Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ прСдоставляСт срСдства для достиТСния высокого ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° выполнСния Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ…ΠΎΠ΄ΡΡΡŒ Π±Π΅Π· использования сборщика мусора ΠΈ runtime (runtime сводится ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ).

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Rust ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ указатСлями ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Ρ‚.ΠΏ. Для распространСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, обСспСчСния сборки ΠΈ управлСния зависимостями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ развиваСтся ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Cargo. Для размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ поддСрТиваСтся Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ crates.io.

БСзопасная Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ обСспСчиваСтся Π² Rust Π²ΠΎ врСмя компиляции Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ссылок, отслСТиваниС владСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΡƒΡ‡Ρ‘Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (области видимости) ΠΈ ΠΎΡ†Π΅Π½ΠΊΡƒ коррСктности доступа ΠΊ памяти Π²ΠΎ врСмя выполнСния ΠΊΠΎΠ΄Π°. Rust Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт срСдства для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ цСлочислСнных ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ использованиСм, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ошибки Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, примСняСт ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ нСизмСняСмости (immutable) ссылок ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ логичСских ошибок.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования «async fn» ΠΈ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ «->impl Trait» Π² ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°ΠΆΠ°Ρ…. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ «->impl Trait» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚ΠΈΠΏΠ°ΠΆΠ°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€: trait Container { fn items(&self) -> impl Iterator<Item = Widget>; } impl Container for MyContainer { fn items(&self) -> impl Iterator<Item = Widget> { self.items.iter().cloned() } }

    Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ°ΠΆΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ «async fn»: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎ Π²: // fn fetch(&self, url: Url) -> impl Future<Output = HtmlBody>; }

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ API для расчёта Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… смСщСний ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π³ΠΎΠ»Ρ‹ΠΌΠΈ указатСлями («*const T» ΠΈ «*mut T») ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния смСщСния ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ. Π Π°Π½Π΅Π΅ для этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π° «<*const T>::add(1)», Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ число Π±Π°ΠΉΡ‚ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ «size_of::()». Новый API ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π΄Π°Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ смСщСниями Π² Π±Π°ΠΉΡ‚Π°Ρ… Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ привСдСния Ρ‚ΠΈΠΏΠΎΠ² ΠΊ «*const u8» ΠΈΠ»ΠΈ «*mut u8».
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ компилятора rustc. Π’ состав Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ BOLT, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° стадии послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ свСдСния ΠΈΠ· Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ профиля выполнСния. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ BOLT позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ компилятора ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 2% Π·Π° счёт измСнСния раскладки ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ librustc_driver.so для Π±ΠΎΠ»Π΅Π΅ эффСктивного использования процСссорного кэша.

    Π’ΠΊΠ»ΡŽΡ‡Π΅Π½Π° сборка компилятора rustc с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ «-Ccodegen-units=1», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ качСство ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² LLVM. ΠŸΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ тСсты ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² случаС со сборки «-Ccodegen-units=1» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 1.5%. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ x86_64-unknown-linux-gnu.

    Π Π°Π½Π΅Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π½Ρ‹ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google для сокращСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сборки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Android, написанных Π½Π° языкС Rust. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ «-C codegen-units=1» ΠΏΡ€ΠΈ сборкС Android ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ инструмСнтария Π½Π° 5.5% ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° 1.8%, ΠΏΡ€ΠΈ этом врСмя сборки самого инструмСнтария ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π°.

    Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сборки мусора Π²ΠΎ врСмя ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ («—gc-sections») Π΄Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ довСсти прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎ 1.9%, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° этапС связывания (LTO) — Π΄ΠΎ 7.7%, Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π° основС профиля выполнСния ΠΊΠΎΠ΄Π° (PGO) — Π΄ΠΎ 19.8%. Π’ Ρ„ΠΈΠ½Π°Π»Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ BOLT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ довСсти прирост скорости сборки Π΄ΠΎ 24.7%, Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ инструмСнтария ΠΏΡ€ΠΈ этом вырос Π½Π° 10.9%.

    Выпуск языка программирования Rust 1.75 ΠΈ unikernel Hermit 0.6.7

  • Π’ разряд ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° новая порция API, Π² Ρ‚ΠΎΠΌ числС стабилизированы ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ:
    • Atomic*::from_ptr
    • FileTimes
    • FileTimesExt
    • File::set_modified
    • File::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • Option::as_slice
    • Option::as_mut_slice
    • pointer::byte_add
    • pointer::byte_offset
    • pointer::byte_offset_from
    • pointer::byte_sub
    • pointer::wrapping_byte_add
    • pointer::wrapping_byte_offset
    • pointer::wrapping_byte_sub
  • ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ «const», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π² любом контСкстС вмСсто констант, ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π² функциях:
    • Ipv6Addr::to_ipv4_mapped
    • MaybeUninit::assume_init_read
    • MaybeUninit::zeroed
    • mem::discriminant
    • mem::zeroed
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd ΠΈ mipsel-unknown-netbsd. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Π±Π΅Π· Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСстирования, ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сборок ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ возмоТности сборки ΠΊΠΎΠ΄Π°.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Hermit, Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ спСциализированноС ядро (unikernel), написанноС Π½Π° языкС Rust, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ инструмСнтарий для сборки самодостаточных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, способных Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π° ΠΈΠ»ΠΈ Π³ΠΎΠ»ΠΎΠ³ΠΎ оборудования Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… прослоСк ΠΈ Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠŸΡ€ΠΈ сборкС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ статичСски связываСтся с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, которая ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡΡΡŒ ΠΊ ядру ОБ ΠΈ систСмным Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ лицСнзиями Apache 2.0 ΠΈ MIT. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ сборка для обособлСнного выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, написанных Π½Π° языках Rust, Go, Fortran, C ΠΈ C++. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ развиваСтся собствСнный Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Hermit ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ QEMU ΠΈ KVM.

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