Ede siseto Rust 1.93, ti o da nipasẹ iṣẹ akanṣe Mozilla ṣugbọn ni bayi ni idagbasoke labẹ awọn atilẹyin ti ominira Rust Foundation ti kii ṣe èrè, ti tu silẹ. Ede naa dojukọ aabo iranti ati pese awọn irinṣẹ lati ṣaṣeyọri isọdọkan giga ti ipaniyan iṣẹ-ṣiṣe, lakoko ṣiṣe laisi lilo agbasọ idoti ati akoko asiko (akoko asiko naa dinku si ipilẹṣẹ ipilẹ ati itọju ile-ikawe boṣewa).
Awọn ọna mimu iranti Rust ṣe igbala awọn olupilẹṣẹ lati awọn aṣiṣe nigbati o ba ni ifọwọyi awọn itọka ati daabobo lodi si awọn iṣoro ti o dide nitori mimu iranti ipele kekere, gẹgẹbi iraye si agbegbe iranti lẹhin ti o ti ni ominira, piparẹ awọn itọka asan, awọn ifasilẹ ifipamọ, ati bẹbẹ lọ. Lati kaakiri awọn ile-ikawe, pese awọn kikọ ati ṣakoso awọn igbẹkẹle, iṣẹ akanṣe n ṣe idagbasoke oluṣakoso package Ẹru. Ibi ipamọ crates.io jẹ atilẹyin fun awọn ile-ikawe alejo gbigba.
Ailewu iranti ti pese ni ipata ni akoko iṣakojọ nipasẹ ṣiṣe ayẹwo itọkasi, ṣiṣe itọju ohun-ini ohun, titọju awọn igbesi aye ohun (awọn iwọn), ati iṣiro deede wiwọle iranti lakoko ṣiṣe koodu. Ipata tun pese aabo lodi si ṣiṣan odidi odidi, nilo ipilẹṣẹ dandan ti awọn iye oniyipada ṣaaju lilo, mu awọn aṣiṣe dara julọ ni ile-ikawe boṣewa, lo imọran ti awọn itọkasi ailagbara ati awọn oniyipada nipasẹ aiyipada, nfunni titẹ aimi to lagbara lati dinku awọn aṣiṣe ọgbọn.
Awọn imotuntun akọkọ:
- Ilé ìkàwé C boṣewa Musl, èyí tí a kọ́ sínú ìpínkiri Rust tí a sì lò fún ìsopọ̀ static fún àwọn ìpele ìfọkànsí "*-linux-musl" (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ) lórí àwọn ètò tí kò ní Musl, ni a ti ṣe àtúnṣe sí ẹ̀yà 1.2.5. Ẹ̀yà Musl tí ó kéré jùlọ tí a ti ṣe àtìlẹ́yìn fún fún ìsopọ̀ dynamic ni a tún ti gbé kalẹ̀ sí 1.2.5. Rust ti lo Musl 1.2.3 tẹ́lẹ̀, èyí tí ó ní àwọn ìṣòro pẹ̀lú ìmúṣẹ DNS resolver. Nínú Musl 1.2.4, a ṣe àtúnṣe DNS resolver láti ṣe àtìlẹ́yìn fún fífi ìbéèrè TCP ránṣẹ́ tí ìbéèrè UDP bá kùnà, èyí tí ó yanjú ìṣòro pẹ̀lú ìbéèrè DNS ńlá àti ìbáramu tó dára síi pẹ̀lú àwọn olupin DNS recursive tí kò ṣe àtìlẹ́yìn fún dídá àwọn àbájáde díẹ̀ padà nínú àwọn ìdáhùn UDP tí a gé kúrú. Musl 1.2.5 ń ṣe àgbékalẹ̀ ìtọ́jú àwọn ìdáhùn pẹ̀lú àwọn ìtẹ̀lé CNAME gígùn nínú DNS resolver ó sì ń yanjú ìṣòro kan tí ó mú kí àwọn ìdáhùn ńlá tí a gbé sórí TCP jáwọ́.
- A ti ṣe àtúnṣe ìkàwé boṣewa láti yanjú àwọn ìṣòro ìtúnpadà pẹ̀lú iṣẹ́ std::thread_local! macro àti std::thread::current nínú àwọn allocators memory global tí a kọ sínú Rust, èyí tí ó yọrí sí ìyípadà àìlópin. Láti dènà std::thread_local! àti std::thread::current láti pe allocator kan náà tí a lò nígbà tí a bá ń gbìyànjú láti pín ìrántí, wọ́n ń lo ẹ̀rọ ìpín ìrántí ètò náà ní tààrà báyìí.
- Lílo àwọn ànímọ́ cfg ni a gbà láàyè nísinsìnyí nínú àwọn búlọ́ọ̀kì "asm!" tí ó ní kódù ìṣàkójọ. Èyí fúnni láàyè, fún àpẹẹrẹ, ṣíṣàkóso lílo àwọn ìlànà CPU tí a fẹ̀ síi ní àyíká àwọn gbólóhùn kọ̀ọ̀kan nínú búlọ́ọ̀kì asm kan (ní tẹ́lẹ̀, àwọn ànímọ́ cfg le jẹ́ pàtó fún gbogbo búlọ́ọ̀kì asm). asm!( // tàbí global_asm! tàbí naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // a lo lórí sse2 nìkan);
- Apa tuntun ti API ni a ti gbe si ẹka ti iduroṣinṣin, pẹlu awọn ọna ati awọn imuse ti awọn abuda ti jẹ imuduro:
- <[Bóyá Yuninítì ]>::asume_init_drop
- <[Bóyá Yuninítì ]>::assume_init_ref
- <[Bóyá Yuninítì ]>::assume_init_mut
- <[Bóyá Yuninítì ]>::kọ_àwòkọ_ti_ẹ̀yà_ẹ̀yà
- <[Bóyá Yuninítì ]>::kọ_ẹ̀rọ_ìtàn_ẹ̀rọ_ìtàn_ẹ̀rọ
- Okùn::into_raw_parts
- Àwọn ẹ̀yà ara Vec::sínú_àwọ̀_àwọn
- ::a kò ṣàyẹ̀wò_neg
- ::unchecked_shl
- ::unchecked_shr
- ::unchecked_shl
- ::unchecked_shr
- <[T]>::as_array
- <[T]>::as_array_mut
- <*const [T]>::as_array
- <*mut [T]>::as_mut_array
- VecDeque::pop_front_if
- VecDeque::pop_back_if
- Àkókò::lati_nanos_u128
- àmì::MAX_LEN_UTF8
- àmì::MAX_LEN_UTF16
- std::fmt::lati_fn
- std::fmt::LatiFn
- Pẹpẹ àfojúsùn "riscv64a23-unknown-linux-gnu" ti ni a ti gbe lọ si ipele atilẹyin keji, eyiti o ni idaniloju ikole ṣugbọn ko si idaniloju pe o kọja ninu idanwo naa.
Ni afikun, ọpọlọpọ awọn iṣẹ akanṣe ti o ni ibatan Rust jẹ tọ lati mẹnuba:
- Fún mojuto Linux развивается фреймворк Rex, позволяющий создавать дополнения для ядра Linux на языке Rust, которые можно использовать для расширения функциональности ядра вместо eBPF. Rex предоставляет те же гарантии безопасности, что и eBPF, но использует для изоляции и обеспечения безопасности возможности языка Rust и легковесный Runtime. Для подобных программ не применяется верификатор, а программы компилируются в нативный код компилятором Rust.
Àwọn ètò Rex gba ààyè láti lo ẹ̀yà kan nínú èdè Rust tó ń fúnni ní ìdánilójú ààbò. Lọ́wọ́lọ́wọ́, àwọn irú ètò eBPF márùn-ún ni a ń ṣe àtìlẹ́yìn fún: kprobe, perf_event, tracepoint, xdp, àti tc. Ó ṣeé ṣe láti pe àwọn iṣẹ́ ìrànlọ́wọ́ eBPF, láti bá àwọn ètò máàpù eBPF ṣe àjọṣepọ̀, láti ṣàkóso àwọn ohun èlò kernel, láti bójútó àwọn ìyọ̀ǹda, àti láti lo àwọn wrappers àti abstractions lórí àwọn ètò kernel.
- Fjall 3, ilé ìtajà pàtàkì tí a kọ sínú Rust, ti wà nílẹ̀ báyìí. A ń tọ́jú dátà ní fọ́ọ̀mù log nípa lílo igi Log-Structured-Merge (LSM), tí ó jọ RocksDB, níbi tí a ti ń kọ àwọn àyípadà nípa fífi dátà kún òpin fáìlì náà. A pèsè API BTreeMap-style fún wíwọlé sí ibi ìpamọ́ dátà. Àwọn ẹ̀yà ara tí a lè ṣe àtìlẹ́yìn pẹ̀lú àwọn ibi orúkọ, àwọn àwárí ìpele iwájú àti ìyípadà, ìfúnpọ̀ tí a ṣe sínú rẹ̀, àwọn ìṣòwò tí a lè ṣe àtẹ̀léra, ibi ìpamọ́ àwọn kọ́kọ́rọ́ àti àwọn iye ńlá tí ó sopọ̀ mọ́ wọn, àti ìtọ́jú ibi ìpamọ́ dátà láìdáwọ́dúró. Kóòdù náà ṣí sílẹ̀ lábẹ́ ìwé àṣẹ Apache 2.0.
- Iṣẹ́ Tor Project ti tú Arti 1.9.0 jáde, ìlò Rust ti ohun èlò Tor. Nígbà tí ìpìlẹ̀ koodu Arti bá dé ìpele tí ó lè rọ́pò ìlò C pátápátá, àwọn olùgbékalẹ̀ Tor fẹ́ sọ Arti di olùgbékalẹ̀ Tor àkọ́kọ́ kí wọ́n sì dín ìtọ́jú ìlò C kù díẹ̀díẹ̀. Ẹ̀yà tuntun náà ń tẹ̀síwájú láti ṣe iṣẹ́ fún àwọn relays àti apèsè àwọn àkójọ ìwé (Àṣẹ Àkójọ ìwé), àtìlẹ́yìn tó dára síi fún ṣíṣiṣẹ́ pẹ̀lú àwọn ibùdó tí a yàn lọ́nà tí ó yàtọ̀ (proxy.socks_listen = "auto"), fi API ìdánilójú kún un fún ṣíṣàkóso àwọn kọ́kọ́rọ́ fún iṣẹ́ àlùbọ́sà.
orisun: opennet.ru
