Umhlwa 1.47 Ukukhutshwa koLwimi lweNkqubo

ipapashiwe Ρ€Π΅Π»ΠΈΠ· 1.47 языка систСмного программирования Ukugqithisa, основанного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Mozilla. Π―Π·Ρ‹ΠΊ сфокусирован Π½Π° бСзопасной Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, обСспСчиваСт автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ прСдоставляСт срСдства для достиТСния высокого ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° выполнСния Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ…ΠΎΠ΄ΡΡΡŒ Π±Π΅Π· использования сборщика мусора ΠΈ ixesha lokuqalisa (runtime сводится ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ).

АвтоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Rust избавляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ указатСлями ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ области памяти послС Π΅Ρ‘ освобоТдСния, Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ Ρ‚.ΠΏ. Для распространСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, обСспСчСния сборки ΠΈ управлСния зависимостями ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ развиваСтся ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Cargo. Для размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ поддСрТиваСтся Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ iikhreyithi.io.

Siseko ezintsha:

  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ для массивов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π Π°Π½Π΅Π΅, ΠΈΠ·-Π·Π° нСвозмоТности ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ generic-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для всСх Ρ†Π΅Π»Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляла Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для массивов, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π» 32 элСмСнта (Ρ‚ΠΈΠΏΠ°ΠΆΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ статичСски). Благодаря созданию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ константных Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² (Β«const genericsΒ») появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния generic-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Π»ΡŽΠ±Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² массива, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² состав ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… возмоТностСй языка, хотя Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² компиляторС ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ задСйствованы Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ для Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ массивов любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

    НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конструкция Π² Rust 1.47 ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ содСрТимого массива, хотя Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π»Π° Π±Ρ‹ ΠΊ ошибкС:

    fn eyona () {
    vumela xs = [0; 34];

    println!(Β«{:?}Β», xs);
    }

  • Kubonelelwe ngemveliso yolandelelwano olufutshane (umva), imveliso kwiimeko zonxunguphalo. Izinto ezingenamdla kwiimeko ezininzi, kodwa zidibanise umphumo kwaye ziphazamise ingqalelo kwizinto eziphambili zengxaki, azibandakanywa kumkhondo. Ukubuyisela umkhondo opheleleyo, ungasebenzisa imeko-bume eguquguqukayo "RUST_BACKTRACE=igcwele". Umzekelo, kwikhowudi

    fn eyona () {
    ukuphaphazela!();
    }

    Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ трассировка Π² 23 этапа, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ свСдСна ΠΊ
    3 этапам, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ сразу ΡƒΠ»ΠΎΠ²ΠΈΡ‚ΡŒ ΡΡƒΡ‚ΡŒ:

    Umsonto 'ongundoqo' wothuke 'uloyiko olucacileyo', src/main.rs:2:5
    isitaki esingasemva:
    0: std::panic::qalisa_uvalo
    apha /rustc/d…d75a/library/std/src/panicking.rs:497
    1: ibala lokudlala::ingundoqo
    apha ./src/main.rs:2
    2: undoqo::ops::umsebenzi::FnOnce::call_kanye
    apha /rustc/d…d75a/library/core/src/ops/function.rs:227

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ rustc ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ Π΄ΠΎ сборки с использованиСм I-LLVM 11 (Rust isebenzisa LLVM Π² качСствС бэкСнда для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°). ΠŸΡ€ΠΈ этом сохранСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сборки со старыми LLVM, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ вСрсии 8, Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π² rust-lang/llvm-project) Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ LLVM 11. Π Π΅Π»ΠΈΠ· LLVM 11 оТидаСтся Π² блиТайшиС Π΄Π½ΠΈ.
  • На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows Π² компиляторС rustc обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ цСлостности ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния (Control Flow Guard), Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„Π»Π°Π³Π° Β«-C control-flow-guardΒ». На Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π»Π°Π³ ΠΏΠΎΠΊΠ° игнорируСтся.
  • Inxalenye entsha ye-APIs idluliselwe kwinqanaba elizinzile, kubandakanywa nokuzinza
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Result::as_deref,
    Result::as_deref_mut,
    Vec::leak,
    pointer::offset_from,
    f32::TAU ΠΈ
    f64::TAU.

  • Uphawu "const", olumisela ukuba kunokwenzeka ukulisebenzisa kuyo nayiphi na imeko endaweni yesigxina, lisetyenziswa kwiindlela:
    • entsha kuzo zonke ii-integer ngaphandle kuka-zero;
    • checked_add, checked_sub, checked_mul,checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub ΠΈ saturating_mul для всСх Ρ†Π΅Π»Ρ‹Ρ…;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace kwaye is_ascii_ucontrol.
  • Для FreeBSD ababandakanyekayo инструмСнтарий ΠΈΠ· FreeBSD 11.4 (FreeBSD 10 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ LLVM 11).

umthombo: opennet.ru

Yongeza izimvo