Toleo la lugha ya programu ya kutu 2021 (1.56)

Kutolewa kwa lugha ya programu ya mfumo Rust 1.56, iliyoanzishwa na mradi wa Mozilla, lakini sasa imeendelezwa chini ya mwamvuli wa shirika huru lisilo la faida la Rust Foundation, imechapishwa. Kando na nambari ya toleo la kawaida, toleo pia limeteuliwa Rust 2021 na kuashiria uimarishaji wa mabadiliko yaliyopendekezwa katika miaka mitatu iliyopita. Rust 2021 pia itatumika kama msingi wa kuongeza utendaji katika miaka mitatu ijayo, sawa na jinsi kutolewa kwa Rust 2018 kuwa msingi wa ukuzaji wa lugha katika miaka mitatu iliyopita.

Ili kudumisha utangamano, wasanidi programu wanaweza kutumia lebo za "2015", "2018" na "2021" katika programu zao, kuruhusu programu kuunganishwa na vipande vya hali ya lugha vinavyolingana na matoleo yaliyochaguliwa ya Rust. Matoleo yalianzishwa ili kutenganisha mabadiliko yasiyooana na yanasanidiwa katika metadata ya vifurushi vya mizigo kupitia sehemu ya "toleo" katika sehemu ya "[kifurushi]". Kwa mfano, toleo la "2018" linajumuisha utendakazi ulioimarishwa hadi mwisho wa 2018 na pia linashughulikia mabadiliko yote zaidi ambayo hayavunji uoanifu. Toleo la 2021 pia linajumuisha vipengele vya kuvunja ushirikiano vilivyopendekezwa katika toleo la sasa la 1.56 na kuidhinishwa kwa utekelezaji wa siku zijazo. Mbali na lugha yenyewe, wahariri pia huzingatia hali ya zana na nyaraka.

Ukiukaji mkubwa uliorekodiwa katika Rust 2021:

  • Tenganisha Kinasa Katika Mifumo - Mifumo sasa inaweza kunasa majina ya sehemu mahususi badala ya kitambulishi kizima. Kwa mfano, "|| ax + 1" itakamata tu "shoka" badala ya "a".
  • Sifa ya IntoIterator ya safu: array.into_iter() hukuruhusu kurudia vipengee vya safu kulingana na maadili, badala ya marejeleo.
  • Uchakataji wa maneno ya "|" umebadilishwa katika macro_rules (Boolean AU) katika ruwaza - Kibainishi cha ":pat" kwenye mechi sasa kinaheshimu "A | B".
  • Kidhibiti cha kifurushi cha shehena ni pamoja na kwa chaguo-msingi toleo la pili la kisuluhishi cha kipengele, msaada ambao ulionekana katika Rust 1.51.
  • Sifa za TryFrom, TryInto na FromIterator zimeongezwa kwenye moduli ya utangulizi ya maktaba ya kawaida.
  • The panic!(..) and assert!(expr, ..) macros sasa hutumia format_args!(..) kuunda mifuatano, sawa na println!().
  • Semi kitambulisho#, kitambulishoΒ»..." na kitambulisho'...' zimehifadhiwa katika sintaksia ya lugha.
  • Umehamisha vitu_bare_trait na maonyo ya ellipsis_inclusive_range_patterns hadi kwenye hitilafu.

Mpya katika Rust 1.56:

  • Katika Cargo.toml, katika sehemu ya "[kifurushi]", uga wa toleo la kutu umeongezwa, ambapo unaweza kuamua toleo la chini kabisa la Rust linalotumika kwa kifurushi cha crate. Ikiwa toleo la sasa halilingani na parameta maalum, Cargo itaacha kufanya kazi na ujumbe wa hitilafu.
  • Wakati muundo unalingana kwa kutumia vielezi vya "binding @ pattern", usaidizi hutolewa kwa kubainisha vifungo vya ziada (kwa mfano, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
    • std::os::unix::fs::chroot
    • Seli isiyo salama::pata_mbichi
    • BufWriter::katika_sehemu
    • msingi::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::punguza_kwa
    • Kamba::punguza_kwa
    • OsString::punguza_kwa
    • PathBuf::punguza_kwa
    • BinaryHeap::punguza_kwa
    • VecDeque::shrink_to
    • HashMap::punguza_kwa
    • HashSet::punguza_kwa
  • Sifa ya "const", ambayo huamua uwezekano wa kutumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika kazi.
    • std::mem::badilisha
    • [T]::kwanza
    • [T]::gawanya_kwanza
    • [T]::mwisho
    • [T]::mgawanyiko_mwisho
  • Kikusanyaji kimebadilishwa ili kutumia toleo la 13 la LLVM.
  • Kiwango cha pili cha usaidizi kimetekelezwa kwa jukwaa la aarch64-apple-ios-sim na kiwango cha tatu kwa mifumo ya powerpc-unknown-freebsd na riscv32imc-esp-espidf. Kiwango cha tatu kinahusisha usaidizi wa kimsingi, lakini bila majaribio ya kiotomatiki, uchapishaji wa miundo rasmi, na uthibitishaji wa uwezo wa kujenga msimbo.

Kumbuka kwamba Rust inazingatia usalama wa kumbukumbu, hutoa usimamizi wa kumbukumbu moja kwa moja, na hutoa njia ya kufikia usawa wa juu katika utekelezaji wa kazi bila kutumia mtoza takataka au wakati wa kukimbia (muda wa kukimbia umepunguzwa kwa 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.

Chanzo: opennet.ru

Kuongeza maoni