Programmēšanas valodas Rust 1.59 izlaišana ar montāžas ieliktņu atbalstu

Publicēts vispārējas nozīmes programmēšanas valodas Rust 1.59 izlaidums, kas dibināts ar Mozilla projektu, bet tagad izstrādāts neatkarīgās bezpeļņas organizācijas Rust Foundation paspārnē. Valoda koncentrējas uz atmiņas drošību un nodrošina līdzekļus, lai sasniegtu augstu darba paralēlismu, vienlaikus izvairoties no atkritumu savācēja un izpildlaika izmantošanas (izpildlaiks tiek samazināts līdz standarta bibliotēkas pamata inicializēšanai un uzturēšanai).

Rust atmiņas apstrādes metodes pasargā izstrādātāju no kļūdām, manipulējot ar rādītājiem, un aizsargā pret problēmām, kas rodas zema līmeņa atmiņas apstrādes dēļ, piemēram, piekļūšana atmiņas apgabalam pēc tā atbrīvošanas, nulles rādītāju atsauču atcelšana, bufera pārtēriņi utt. Lai izplatītu bibliotēkas, nodrošinātu būvējumus un pārvaldītu atkarības, projekts izstrādā Cargo pakotņu pārvaldnieku. Crates.io repozitorijs tiek atbalstīts bibliotēku mitināšanai.

Atmiņas drošība tiek nodrošināta Rust kompilēšanas laikā, pārbaudot atsauces, sekojot līdzi objekta īpašumtiesībām, sekojot līdzi objektu kalpošanas laikam (tvērumam) un novērtējot atmiņas piekļuves pareizību koda izpildes laikā. Rūsa arī nodrošina aizsardzību pret veselu skaitļu pārpildīšanu, pieprasa obligātu mainīgo vērtību inicializāciju pirms lietošanas, labāk apstrādā kļūdas standarta bibliotēkā, pēc noklusējuma piemēro nemainīgu atsauču un mainīgo jēdzienu, piedāvā spēcīgu statisko rakstīšanu, lai samazinātu loģiskās kļūdas.

Galvenie jauninājumi:

  • Ir iespējams izmantot montāžas valodas ieliktņus, kas ir pieprasīti lietojumprogrammās, kurām ir jākontrolē izpilde zemā līmenī vai jāspēj izmantot specializētas mašīnu instrukcijas. Montāžas ieliktņi tiek pievienoti, izmantojot makro "asm!" un "global_asm!" izmantojot virknes formatēšanas sintaksi reģistru nosaukšanai, kas ir līdzīga tai, ko izmanto virkņu aizstāšanai programmā Rust. Kompilators atbalsta montāžas instrukcijas x86, x86-64, ARM, AArch64 un RISC-V arhitektūrām. Ievietošanas piemērs: izmantojiet std::arch::asm; // Reiziniet x ar 6, izmantojot maiņas un saskaitiet let mut x: u64 = 4; nedrošs {asm!("mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Pievienots atbalsts destrukturētiem (paralēliem) uzdevumiem, kuros izteiksmes kreisajā pusē ir norādītas vairākas pazīmes, slāņi vai struktūras. Piemēram: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struktūra { e, .. } = struktūra { e: 5, f: 3}; Assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Const generics ir iespējams norādīt noklusējuma vērtības: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Cargo pakotņu pārvaldnieks nodrošina brīdinājumus par nederīgu struktūru izmantošanu atkarībās, kuras tiek apstrādātas kompilatora kļūdu dēļ (piemēram, kļūdas dēļ iepakotu struktūru laukus bija atļauts aizņemties drošos blokos). Nākamajā Rust versijā šādas konstrukcijas vairs netiks atbalstītas.
  • Cargo un rustc ir iebūvēta iespēja ģenerēt izpildāmos failus, kuros nav atkļūdošanas datu (sloksne = "debuginfo") un simboli (josla = "simboli"), bez nepieciešamības izsaukt atsevišķu utilītu. Tīrīšanas iestatījums tiek ieviests, izmantojot Cargo.toml parametru “sloksne”: [profile.release] strip = “debuginfo”, “symbols”
  • Inkrementālā kompilācija pēc noklusējuma ir atspējota. Tiek apgalvots, ka iemesls ir pagaidu risinājums kompilatora kļūdai, kas izraisa avārijas un deserializācijas kļūdas. Kļūdas labojums jau ir sagatavots un tiks iekļauts nākamajā laidienā. Lai atgrieztu pakāpenisku kompilāciju, varat izmantot vides mainīgo RUSTC_FORCE_INCREMENTAL=1.
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
    • std::thread::available_parallelism
    • Rezultāts::kopēts
    • Rezultāts::klonēts
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • TryFrom par u8
    • char::TryFromCharError (Klons, Atkļūdošana, Displejs, PartialEq, Kopēšana, Eq, Kļūda)
    • iter::zip
    • NonZeroU8::ir_power_of_wo
    • NonZeroU16::ir_power_of_wo
    • NonZeroU32::ir_power_of_wo
    • NonZeroU64::ir_power_of_wo
    • NonZeroU128::ir_power_of_wo
    • DoubleEndedIterator mazo burtu struktūrai
    • DoubleEndedIterator ToUppercase struktūrai
    • TryFrom [T; N]
    • UnwindSafe vienreizējai struktūrai
    • RefUnwindSafe vienreiz
    • armv8 neona atbalsta funkcijas, kas iebūvētas aarch64 kompilatorā
  • Atribūts "const", kas nosaka iespēju to izmantot jebkurā kontekstā konstantu vietā, tiek izmantots funkcijās:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Avots: opennet.ru

Pievieno komentāru