Kutolewa kwa lugha ya programu ya kutu 1.58

Kutolewa kwa lugha ya madhumuni ya jumla ya programu Rust 1.58, iliyoanzishwa na mradi wa Mozilla, lakini ambayo sasa imeendelezwa chini ya mwamvuli wa shirika huru lisilo la faida la Rust Foundation, imechapishwa. Lugha inazingatia usalama wa kumbukumbu, hutoa usimamizi wa kumbukumbu otomatiki, na hutoa njia za kufikia usawa wa juu wa kazi bila kutumia mtoza takataka au wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa msingi na matengenezo ya maktaba ya kawaida).

Udhibiti wa kumbukumbu otomatiki wa Rust huokoa msanidi programu kutokana na hitilafu wakati wa kuchezea viashiria na hulinda dhidi ya matatizo yanayotokea kutokana na uchezaji wa kumbukumbu ya kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa rejeleo la viashiria visivyofaa, ongezeko la 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.

Ubunifu kuu:

  • Katika vizuizi vya uundaji wa mstari, pamoja na uwezo uliopatikana hapo awali wa kubadilisha vigeu vilivyoorodheshwa wazi baada ya mstari kwa nambari na jina, uwezo wa kubadilisha vitambulishi vya kiholela kwa kuongeza usemi "{kitambulisho}" kwenye mstari unatekelezwa. Kwa mfano: // Miundo iliyotumika hapo awali: println!("Hujambo, {}!", get_person()); println!("Hujambo, {0}!", get_person()); println!("Hujambo, {mtu}!", mtu = get_person()); // sasa unaweza kutaja acha mtu = get_person(); println!("Hujambo, {mtu}!");

    Vitambulishi vinaweza pia kubainishwa moja kwa moja katika chaguo za uumbizaji. acha (upana, usahihi) = get_format(); kwa (jina, alama) katika get_scores() { println!("{name}: {score:width$.precision$}"); }

    Ubadilishaji mpya unafanya kazi katika makro zote zinazotumia ufafanuzi wa umbizo la kamba, isipokuwa jumla ya "hofu!". katika matoleo ya 2015 na 2018 ya lugha ya Rust, ambapo hofu!("{ident}") inachukuliwa kama mfuatano wa kawaida (katika Rust 2021 ubadilishaji hufanya kazi).

  • Tabia ya std::process::Muundo wa amri kwenye jukwaa la Windows umebadilishwa ili kwamba wakati wa kutekeleza amri, kwa sababu za kiusalama, haitafuti tena faili zinazoweza kutekelezwa katika saraka ya sasa. Saraka ya sasa haijajumuishwa kwa sababu inaweza kutumika kutekeleza msimbo hasidi ikiwa programu zinaendeshwa katika saraka zisizoaminika (CVE-2021-3013). Mantiki mpya ya ugunduzi inayoweza kutekelezwa inahusisha kutafuta saraka za Kutu, saraka ya programu, saraka ya mfumo wa Windows, na saraka zilizobainishwa katika utofauti wa mazingira wa PATH.
  • Maktaba ya kawaida imepanua idadi ya chaguo za kukokotoa zilizoalamishwa "#[lazima_utumie]" ili kutoa onyo ikiwa thamani ya kurejesha itapuuzwa, ambayo husaidia kutambua hitilafu zinazosababishwa na kuchukulia kuwa chaguo la kukokotoa litabadilisha thamani badala ya kurejesha thamani mpya.
  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
    • Metadata::is_symlink
    • Njia::ni_symlink
    • {integer}::saturating_div
    • Chaguo::unwrap_haijachaguliwa
    • Matokeo::unwrap_haijachunguzwa
    • Matokeo::unwrap_err_haijachunguzwa
  • Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika kazi:
    • Muda::mpya
    • Muda::imechaguliwa_ongeza
    • Muda::kueneza_kuongeza
    • Muda::checked_sub
    • Muda::ndogo_ya_kueneza
    • Muda::checked_mul
    • Muda::kueneza_mul
    • Muda::checked_div
  • Inaruhusiwa kuondoa urejeleaji wa viashiria vya "*const T" katika miktadha ya "const".
  • Katika kidhibiti kifurushi cha Cargo, sehemu ya rust_version imeongezwa kwenye metadata ya kifurushi, na chaguo la "--message-format" limeongezwa kwa amri ya "kusakinisha mizigo".
  • Mkusanyaji anatumia usaidizi wa utaratibu wa ulinzi wa CFI (Control Flow Integrity), ambayo huongeza ukaguzi kabla ya kila simu isiyo ya moja kwa moja ili kugundua aina fulani za tabia ambazo hazijabainishwa ambazo zinaweza kusababisha ukiukaji wa agizo la kawaida la utekelezaji (mtiririko wa kudhibiti) kama matokeo ya matumizi ya matumizi ambayo hubadilisha viashiria vilivyohifadhiwa kwenye kumbukumbu kwenye vitendaji.
  • Mkusanyaji ameongeza usaidizi kwa matoleo ya 5 na 6 ya umbizo la ulinganisho wa chanjo ya LLVM, inayotumika kutathmini ufunikaji wa misimbo wakati wa majaribio.
  • Katika kikusanyaji, mahitaji ya toleo la chini kabisa la LLVM yanapandishwa hadi LLVM 12.
  • Kiwango cha tatu cha usaidizi kwa jukwaa la x86_64-halijulikani-hakuna limetekelezwa. Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, au kuangalia ikiwa msimbo unaweza kutengenezwa.

Zaidi ya hayo, tunaweza kutambua uchapishaji wa Microsoft wa kutolewa kwa maktaba ya Rust kwa Windows 0.30, ambayo hukuruhusu kutumia lugha ya Rust kutengeneza programu za Windows OS. Seti inajumuisha vifurushi viwili vya crate (madirisha na windows-sys), ambayo unaweza kupata API ya Win katika programu za Rust. Msimbo wa usaidizi wa API huzalishwa kwa nguvu kutoka kwa metadata inayoelezea API, ambayo inakuruhusu kutekeleza usaidizi sio tu kwa simu zilizopo za Win API, lakini kwa simu ambazo zitaonekana katika siku zijazo. Toleo jipya linaongeza usaidizi kwa jukwaa lengwa la UWP (Universal Windows Platform) na kutekeleza aina za Kushughulikia na Utatuzi.

Chanzo: opennet.ru

Kuongeza maoni