ΠΠ·ΠΈΠΊΡΡ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Rust 1.75, ΠΎΡΠ½ΠΎΠ²Π°Π½ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Mozilla, Π½ΠΎ ΡΠ΅Π³Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΏΠΎΠ΄ Π΅Π³ΠΈΠ΄Π°ΡΠ° Π½Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ°ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Ρ Π½Π΅ΡΡΠΎΠΏΠ°Π½ΡΠΊΠ° ΡΠ΅Π» Rust Foundation, Π±Π΅ΡΠ΅ ΠΏΡΡΠ½Π°Ρ. ΠΠ·ΠΈΠΊΡΡ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ° Π²ΡΡΡ Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΠ΅Π΄ΡΡΠ²Π°ΡΠ° Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° Π²ΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ ΠΈΠ·Π±ΡΠ³Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ±ΠΈΡΠ°Ρ Π½Π° ΠΎΡΠΏΠ°Π΄ΡΡΠΈ ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ Π΄ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°).
ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° Rust ΡΠΏΠ°ΡΡΠ²Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΡ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΏΠ°Π·Π²Π°Ρ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ, ΠΊΠ°ΡΠΎ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΎΠ±Π»Π°ΡΡ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡ Π΅ Π±ΠΈΠ»Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π°, Π΄Π΅ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½ΡΠ»Π΅Π²ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡΡΠ΅Ρ ΠΈ Ρ.Π½. ΠΠ° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Cargo. Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ crates.io ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π·Π° Ρ ΠΎΡΡΠ²Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π΅ ΠΎΡΠΈΠ³ΡΡΠ΅Π½Π° Π² Rust ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ°, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΆΠΈΠ²ΠΎΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° (ΠΎΠ±Ρ Π²Π°ΡΠΈ) ΠΈ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎΡΡΡΠ° Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π°. Rust ΡΡΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π·Π°ΡΠΈΡΠ° ΡΡΠ΅ΡΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½ΠΈ ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½ΠΈΡ, ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΠΏΠΎΡΡΠ΅Π±Π°, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΈΠ»Π½ΠΎ ΡΡΠ°ΡΠΈΡΠ½ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° βasync fnβ ΠΈ Π½ΠΎΡΠ°ΡΠΈΡΡΠ° β->impl Traitβ Π² ΡΠ°ΡΡΠ½ΠΈ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ β->impl Traitβ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° trait, ΠΊΠΎΠΉΡΠΎ Π²ΡΡΡΠ° ΠΈΡΠ΅ΡΠ°ΡΠΎΡ: trait Container { fn items(&self) -> impl Iterator; } impl ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° 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β ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Android Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠ° Ρ 5.5% ΠΈ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Ρ 1.8%, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°ΠΌΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ ΠΏΠΎΡΡΠΈ ΡΠ΅ ΡΠ΄Π²ΠΎΠΈ.
ΠΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° (β--gc-sectionsβ) Π΄ΠΎΠ½Π΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π΄ΠΎ 1.9%, Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° Π²ΡΡΠ·ΠΊΠ° (LTO) Π΄ΠΎ 7.7% ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈΡΠ΅, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈ (PGO) Π΄ΠΎ 19.8%. ΠΠ° ΡΠΈΠ½Π°Π»Π° Π±ΡΡ Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° BOLT, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π΄ΠΎ 24.7%, Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠ° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ Ρ 10.9%.
- ΠΠΎΠ²Π° ΡΠ°ΡΡ ΠΎΡ API Π΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½Π° Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° Π½Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ ΡΠ° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ:
- Atomic*::from_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
- MaybeUninit::zeroed
- mem::Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½Ρ
- mem :: Π½ΡΠ»ΠΈΡΠ°Π½
- Π’ΡΠ΅ΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈΡΠ΅ 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