ИздавањС Π½Π° програмскиот јазик Rust 1.75 ΠΈ unikernel Hermit 0.6.7

ОбјавСно Π΅ ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° програмскиот јазик Π·Π° ΠΎΠΏΡˆΡ‚Π° Π½Π°ΠΌΠ΅Π½Π° Rust 1.75, основан ΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Mozilla, Π½ΠΎ сСга Ρ€Π°Π·Π²ΠΈΠ΅Π½ ΠΏΠΎΠ΄ покровитСлство Π½Π° нСзависната Π½Π΅ΠΏΡ€ΠΎΡ„ΠΈΡ‚Π½Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Rust Foundation. ΠˆΠ°Π·ΠΈΠΊΠΎΡ‚ сС фокусира Π½Π° бСзбСдноста Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° срСдства Π·Π° ΠΏΠΎΡΡ‚ΠΈΠ³Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° висок ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·Π°ΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ мСста, ΠΏΡ€ΠΈΡ‚ΠΎΠ° ΠΈΠ·Π±Π΅Π³Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° собирач Π½Π° Ρ“ΡƒΠ±Ρ€Π΅ ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° (Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π΅ свСдСно Π½Π° основна ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° стандардната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°).

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° Ρ€Π°ΠΊΡƒΠ²Π°ΡšΠ΅ со ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° Rust Π³ΠΎ спасуваат Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΎΡ‚ ΠΎΠ΄ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΡšΠ΅ со ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅ ΠΈ Π³ΠΎ ΡˆΡ‚ΠΈΡ‚Π°Ρ‚ ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΡˆΡ‚ΠΎ сС Ρ˜Π°Π²ΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ€Π°ΠΊΡƒΠ²Π°ΡšΠ΅ со ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° ниско Π½ΠΈΠ²ΠΎ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС пристап Π΄ΠΎ мСмориската област ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ќС сС ослободи, Π΄Π΅Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π½ΡƒΠ»Π° ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΈ, ΠΏΡ€Π΅Ρ‡Π΅ΠΊΠΎΡ€ΡƒΠ²Π°ΡšΠ° Π½Π° Π±Π°Ρ„Π΅Ρ€ΠΎΡ‚ ΠΈΡ‚Π½. Π—Π° Π΄Π° сС дистрибуираат Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄Π°Ρ‚ Π³Ρ€Π°Π΄Π±ΠΈ ΠΈ Π΄Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Π°Ρ‚ со зависности, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π³ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π° ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΎΡ‚ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Cargo. Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ crates.io Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ Π·Π° Ρ…ΠΎΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

БСзбСдноста Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½Π° Π²ΠΎ Rust Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅ΠΊΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ, слСдСњС Π½Π° сопствСноста Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚, слСдСњС Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈΠΎΡ‚ Π²Π΅ΠΊ Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈΡ‚Π΅ (ΠΎΠ±Π΅ΠΌΠΈ) ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° исправноста Π½Π° пристапот Π΄ΠΎ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚. Rust исто Ρ‚Π°ΠΊΠ° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π·Π°ΡˆΡ‚ΠΈΡ‚Π° ΠΎΠ΄ ΠΏΡ€Π΅Π»Π΅Π²Π°ΡšΠ΅ Π½Π° Ρ†Π΅Π»ΠΈ Π±Ρ€ΠΎΠ΅Π²ΠΈ, Π±Π°Ρ€Π° Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π° ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° врСдноститС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ сС справува со Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π²ΠΎ стандардната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, стандардно Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΡ‚ Π½Π° Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π½ΡƒΠ΄ΠΈ силно статичко ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π·Π° Π΄Π° сС ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π°Ρ‚ Π»ΠΎΠ³ΠΈΡ‡ΠΊΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π“Π»Π°Π²Π½ΠΈΡ‚Π΅ ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ:

  • Π”ΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ моТност Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ β€žasync fnβ€œ ΠΈ ΠΎΠ·Π½Π°ΠΊΠ°Ρ‚Π° β€ž->impl Traitβ€œ Π²ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ карактСристики. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ β€ž->impl Traitβ€œ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° особина ΡˆΡ‚ΠΎ Π²Ρ€Π°ΡœΠ° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€: trait Container { fn items(&self) -> impl Iterator; } impl Container for MyContainer { fn items(&self) -> impl Iterator {self.items.iter().cloned() } }

    ΠœΠΎΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ карактСристики со помош Π½Π° β€žasync fnβ€œ: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // ќС сС ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈ Π½Π°: // fn fetch(&self, url: Url) -> impl Future; }

  • Π”ΠΎΠ΄Π°Π΄Π΅Π½ΠΎ Π΅ API Π·Π° ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π½Π° Π±Π°Ρ˜Ρ‚ΠΈ Π²ΠΎ однос Π½Π° ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΈΡ‚Π΅. Кога Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со Π³ΠΎΠ»ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΈ (β€ž*const Tβ€œ ΠΈ β€ž*mut Tβ€œ), ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° додавањС Π½Π° ΠΏΠΎΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡ΠΎΡ‚. ΠŸΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ, Π·Π° ΠΎΠ²Π° бСшС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС користи ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° ΠΊΠ°ΠΊΠΎ β€ž::add(1)β€œ, додавајќи Π³ΠΎ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π±Π°Ρ˜Ρ‚ΠΈ ΡˆΡ‚ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Π°Ρ‚ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° β€žsize_of::()β€œ. Новиот API ја поСдноставува ΠΎΠ²Π°Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΡšΠ΅ со ΠΏΠΎΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π½Π° Π±Π°Ρ˜Ρ‚ΠΈ Π±Π΅Π· ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π°Ρ‚ Ρ‚ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ Π½Π° β€ž*const u8β€œ ΠΈΠ»ΠΈ β€ž*mut u8β€œ.
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_add
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_offset
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_offset_from
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_sub
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::wrapping_byte_add
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::wrapping_byte_offset
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::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β€œ ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π° Π½Π° Андроид Π½ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π΄Π° ја Π½Π°ΠΌΠ°Π»ΠΈΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΎΡ‚ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° 5.5% ΠΈ Π΄Π° Π³ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΠΈΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ пСрформанси Π·Π° 1.8%, Π΄ΠΎΠ΄Π΅ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° самиот ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ со Π°Π»Π°Ρ‚ΠΊΠΈ рСчиси двојно сС Π·Π³ΠΎΠ»Π΅ΠΌΠΈ.

    ΠžΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Ρ“ΡƒΠ±Ρ€Π΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° врска (β€ž--gc-ΡΠ΅ΠΊΡ†ΠΈΠΈβ€œ) донСсС Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° пСрформанситС Π΄ΠΎ 1.9%, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° врска (LTO) Π΄ΠΎ 7.7% ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ (PGO) Π΄ΠΎ 19.8%. Π’ΠΎ Ρ„ΠΈΠ½Π°Π»Π΅Ρ‚ΠΎ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π±Π΅Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Ρ‚ΠΈ со помош Π½Π° Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° BOLT, ΡˆΡ‚ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° 24.7%, Π½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚ΠΎΡ‚ Π°Π»Π°Ρ‚ΠΊΠΈ сС Π·Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π° 10.9%.

    ИздавањС Π½Π° програмскиот јазик Rust 1.75 ΠΈ unikernel Hermit 0.6.7

  • Нов Π΄Π΅Π» ΠΎΠ΄ API Π΅ прСмСстСн Π²ΠΎ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° стабилни, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° карактСристикитС сС стабилизирани:
    • Атомски*::ΠΎΠ΄_ptr
    • FileTimes
    • FileTimesExt
    • Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°::set_modified
    • Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°::set_times
    • IpAddr::to_canonical
    • Ipv6Addr::to_canonical
    • ΠžΠΏΡ†ΠΈΡ˜Π°::as_slice
    • ΠžΠΏΡ†ΠΈΡ˜Π°::as_mut_slice
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_add
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_offset
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_offset_from
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::byte_sub
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::wrapping_byte_add
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::wrapping_byte_offset
    • ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Ρ‡::wrapping_byte_sub
  • Атрибутот β€žconstβ€œ, кој ја ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° моТноста Π΄Π° сС користи Π²ΠΎ кој Π±ΠΈΠ»ΠΎ контСкст намСсто константи, сС користи Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:
    • Ipv6Addr::to_ipv4_mapped
    • МоТСбиUninit::assume_init_read
    • МоТСби Uninit::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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€