Lugha ya programu ya madhumuni ya jumla Rust 1.64, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa shirika huru lisilo la faida la Rust Foundation, imetolewa. Lugha inazingatia usimamizi salama wa kumbukumbu na hutoa njia za kufikia usawa wa juu wa kazi huku ikiepuka matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa kimsingi na matengenezo ya maktaba ya kawaida).
Mbinu za utunzaji wa kumbukumbu za kutu huokoa msanidi programu kutokana na hitilafu wakati wa kuendesha viashiria na kulinda dhidi ya matatizo yanayotokea kutokana na utunzaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria visivyofaa, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, kutoa miundo na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.
Usalama wa kumbukumbu hutolewa katika Rust wakati wa kukusanya kupitia kukagua marejeleo, kufuatilia umiliki wa kitu, kufuatilia muda wa maisha ya kitu (wigo), na kutathmini usahihi wa ufikiaji wa kumbukumbu wakati wa utekelezaji wa nambari. Kutu pia hutoa ulinzi dhidi ya mafuriko kamili, inahitaji uanzishaji wa lazima wa maadili tofauti kabla ya matumizi, hushughulikia makosa vyema katika maktaba ya kawaida, hutumia dhana ya marejeleo yasiyobadilika na vigeu kwa chaguo-msingi, hutoa uchapaji thabiti wa tuli ili kupunguza makosa ya kimantiki.
Ubunifu kuu:
- Mahitaji yaliyoongezeka kwa mazingira Linux katika kikusanyaji, meneja wa kifurushi cha Cargo, na maktaba ya kawaida libstd, mahitaji ya chini kabisa ya Glibc yameongezwa kutoka toleo la 2.11 hadi 2.17, na kernels Linux Kuanzia toleo la 2.6.32 hadi 3.2. Vizuizi pia vinatumika kwa programu zinazoweza kutekelezwa za Rust zilizojengwa kwa libstd. RHEL 7, SLES 12-SP5, na usambazaji mwingine unazingatia mahitaji mapya. Debian 8 na Ubuntu 14.04. Usaidizi wa RHEL 6, SLES 11-SP4 utasitishwa, Debian 7 na Ubuntu 12.04. Kwa watumiaji wanaotumia vitendakazi vilivyojengwa kwa mnyororo wa zana za Rust katika mazingira yenye kiini cha zamani Linux, inashauriwa kuboresha mifumo yao, kubaki na matoleo ya zamani ya mkusanyaji, au kudumisha tawi lao la libstd lenye tabaka tofauti ili kudumisha utangamano.
Miongoni mwa sababu za mwisho wa usaidizi kwa wazee Linux-systems hutaja rasilimali chache kwa ajili ya kuendelea kudumisha utangamano na mazingira ya zamani. Usaidizi kwa Glibc ya zamani unahitaji matumizi ya zana za zamani wakati wa kuangalia katika mfumo endelevu wa ujumuishaji, kutokana na mahitaji ya toleo yaliyoongezeka kwa LLVM na zana za ujumuishaji mtambuka. Mahitaji ya toleo la kernel yaliyoongezeka yanatokana na uwezo wa kutumia simu mpya za mfumo katika libstd bila hitaji la kudumisha wapatanishi ili kuhakikisha utangamano na kernel za zamani.
- Sifa ya IntoFuture imeimarishwa, ambayo inafanana na IntoIterator, lakini inatofautiana na ya pili kwa kutumia “.wait” badala ya “kwa ... katika ...” loops. Ikiunganishwa na IntoFuture, neno kuu la ".await" linaweza kutarajia sio sifa ya Baadaye tu, bali pia aina zingine zozote zinazoweza kubadilishwa kuwa Wakati Ujao.
- Huduma ya kuchanganua kutu imejumuishwa katika mkusanyiko wa huduma zinazotolewa na matoleo ya Rust. Huduma pia inapatikana kwa usanikishaji kwa kutumia rustup (sehemu ya rustup ongeza kichanganuzi cha kutu).
- Kidhibiti cha kifurushi cha Cargo kinajumuisha urithi wa nafasi ya kazi ili kuondoa kurudiwa kwa thamani za uga za kawaida kati ya vifurushi, kama vile matoleo ya Rust na URL za hazina. Usaidizi wa kujenga kwa majukwaa kadhaa lengwa mara moja pia umeongezwa (sasa unaweza kubainisha zaidi ya kigezo kimoja katika chaguo la "--lengo").
- Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
- siku zijazo::IntoFuture
- nambari::NonZero*::checked_mul
- nambari::NonZero*::checked_pow
- nambari::NonZero*::kueneza_mul
- nambari::NonZero*::kushiba_pow
- nambari::NonZeroI*::abs
- nambari::NonZeroI*::checked_abs
- nambari::NonZeroI*::abs_inayofurika
- nambari::NonZeroI*::saturating_abs
- nambari::NonZeroI*::abs_isiyotiwa saini
- nambari::NonZeroI*::kufunga_abs
- nambari::NonZeroU*::imechaguliwa_ongeza
- nambari::NonZeroU*::imeangaliwa_nguvu_ifuatayo_ya_mbili
- nambari::NonZeroU*::kueneza_ongeza
- os::unix::process::CommandExt::process_group
- os::windows::fs::FileTypeExt::is_symlink_dir
- os::windows::fs::FileTypeExt::is_symlink_file
- Aina zinazoendana na C, zilizoimarishwa hapo awali katika moduli ya std::ffi, zimeongezwa kwenye msingi na maktaba ya alloc:
- msingi::ffi::CStr
- msingi::ffi::FromBytesWithNulError
- alloc::ffi::CSstring
- alloc::ffi::FromVecWithNulError
- alloc::ffi::IntoStringError
- alloc::ffi::NulError
- Aina C zilizoimarishwa hapo awali katika std::os::moduli mbichi zimeongezwa kwa moduli za msingi::ffi na std::ffi (kwa mfano, aina za c_uint na c_ulong zimependekezwa kwa aina za uint na ulong C):
- ffi::c_char
- ffi::c_mara mbili
- ffi::c_elea
- ffi::c_int
- ffi::c_refu
- ffi::c_refu
- ffi::c_schar
- ffi::c_fupi
- ffi::c_char
- ffi::c_uint
- ffi::c_ulong
- ffi::c_ulonglong
- ffi::c_ufupi
- Vishikizi vya kiwango cha chini vimeimarishwa kwa matumizi na utaratibu wa Kura (katika siku zijazo imepangwa kutoa API iliyorahisishwa ambayo haihitaji matumizi ya miundo ya kiwango cha chini kama vile Vuta na Bani):
- siku zijazo::poll_fn
- kazi:: tayari!
- Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika kazi ya kipande::kutoka_raw_parts.
- Ili kuhifadhi data kwa ushikamanifu zaidi, mpangilio wa kumbukumbu wa miundo ya Ipv4Addr, Ipv6Addr, SocketAddrV4 na SocketAddrV6 imebadilishwa. Kunaweza kuwa na suala la uoanifu na vifurushi vya crate moja vinavyotumia std::mem::transmute kwa upotoshaji wa kiwango cha chini wa miundo.
- Katika ujenzi wa kikusanyaji cha kutu kwa jukwaa Windows Uboreshaji wa PGO (uboreshaji unaoongozwa na wasifu) ulitumika, ambao uliruhusu kuongeza utendaji wa mkusanyiko wa msimbo kwa 10-20%.
- Mkusanyaji ametekeleza onyo jipya kuhusu sehemu ambazo hazijatumiwa katika miundo fulani.
Zaidi ya hayo, unaweza kutambua ripoti ya hali ya maendeleo ya utekelezaji mbadala wa mkusanyaji wa lugha ya Rust, iliyotayarishwa na mradi wa gccrs (GCC Rust) na kuidhinishwa kujumuishwa katika GCC. Baada ya kuunganisha sehemu ya mbele, zana za kawaida za GCC zinaweza kutumika kukusanya programu katika lugha ya Rust bila hitaji la kusakinisha kikusanya rustc, kilichojengwa kwa kutumia maendeleo ya LLVM. Maadamu uendelezaji unaendelea, na ukizuia matatizo yoyote yasiyotarajiwa, eneo la Rust litaunganishwa katika toleo la GCC 13 lililopangwa kufanyika Mei mwaka ujao. Utekelezaji wa GCC 13 wa Rust utakuwa katika hali ya beta, bado haujawezeshwa kwa chaguomsingi.
Chanzo: opennet.ru
