Rust 1.47 Programazio Lengoaia kaleratzea

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

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

Berrikuntza nagusiak:

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

fn main() {
izan bedi xs = [0; 34];
println!("{:?}", xs);
}

  • Aztarna laburragoen irteera (backtrace), irteera larrialdi egoeretan. Egoera gehienetan interesgarriak ez diren elementuak, baina irteera nahasten duten eta arazoaren arrazoi nagusietatik arreta kentzen dute, arrastotik kanpo geratzen dira. Aztarna osoa itzultzeko, "RUST_BACKTRACE=full" ingurune-aldagaia erabil dezakezu. Adibidez, kodearentzat

fn main() {
ikara!();
}

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

'main' haria izututa zegoen 'izu esplizituan', src/main.rs:2:5
pilatu atzerako ibilbidea:
0: std::panicking::begin_panic
/rustc/d…d75a/library/std/src/panicking.rs:497 helbidean
1: jolastokia::nagusia
helbidean./src/main.rs:2
2: core::ops::function::FnOnce::call_once
/rustc/d…d75a/library/core/src/ops/function.rs:227 helbidean

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ rustc ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½ Π΄ΠΎ сборки с использованиСм LLVM 11 (Rust ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ LLVM Π² качСствС бэкСнда для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°). ΠŸΡ€ΠΈ этом сохранСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сборки со старыми LLVM, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ вСрсии 8, Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π² rust-lang/llvm-project) Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ LLVM 11. Π Π΅Π»ΠΈΠ· LLVM 11 оТидаСтся Π² блиТайшиС Π΄Π½ΠΈ.
  • На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Windows Π² компиляторС rustc обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ цСлостности ΠΏΠΎΡ‚ΠΎΠΊΠ° выполнСния (Control Flow Guard), Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„Π»Π°Π³Π° Β«-C control-flow-guardΒ». На Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π»Π°Π³ ΠΏΠΎΠΊΠ° игнорируСтся.
  • Π’ разряд ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° новая порция API, Π² Ρ‚ΠΎΠΌ числС стабилизированы 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.
  • Metodoetan erabiltzen da "const" atributua, konstanteen ordez edozein testuingurutan erabiltzeko aukera zehazten duena:
    • berria zero ez den zenbaki oso guztietarako;
    • 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_whitspace eta is_ascii_control char eta u8 motetarako.
  • Для FreeBSD задСйствован инструмСнтарий ΠΈΠ· FreeBSD 11.4 (FreeBSD 10 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ LLVM 11).

Handik hartua opennet.ru

Iturria: linux.org.ru

Gehitu iruzkin berria