การเปิดตัวภาษาการเขียนโปรแกรม Rust 1.47

ภาษาการเขียนโปรแกรมระบบ Rust 1.47 ซึ่งก่อตั้งโดยโครงการ Mozilla ได้รับการเผยแพร่แล้ว ภาษามุ่งเน้นไปที่ความปลอดภัยของหน่วยความจำ ให้การจัดการหน่วยความจำอัตโนมัติ และจัดเตรียมวิธีการเพื่อให้บรรลุการทำงานแบบขนานในระดับสูงโดยไม่ต้องใช้ตัวรวบรวมขยะหรือรันไทม์ (รันไทม์ลดลงเหลือเพียงการเริ่มต้นขั้นพื้นฐานและการบำรุงรักษาไลบรารีมาตรฐาน)

การจัดการหน่วยความจำอัตโนมัติของ Rust กำจัดข้อผิดพลาดเมื่อจัดการพอยน์เตอร์และป้องกันปัญหาที่เกิดขึ้นจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงพื้นที่หน่วยความจำหลังจากที่ถูกปล่อยว่างแล้ว การยกเลิกการอ้างอิงพอยน์เตอร์ null การโอเวอร์รันบัฟเฟอร์ ฯลฯ เพื่อกระจายห้องสมุด ตรวจสอบการประกอบและจัดการการพึ่งพา โปรเจ็กต์กำลังพัฒนาตัวจัดการแพ็คเกจ Cargo พื้นที่เก็บข้อมูล crates.io ได้รับการรองรับสำหรับการโฮสต์ไลบรารี

นวัตกรรมหลัก:

  • ดำเนินการสนับสนุนคุณลักษณะสำหรับอาร์เรย์ที่มีขนาดที่กำหนดเอง ก่อนหน้านี้ เนื่องจากไม่สามารถกำหนดฟังก์ชันทั่วไปสำหรับค่าจำนวนเต็มทั้งหมดได้ ไลบรารีมาตรฐานจึงให้การสนับสนุนคุณลักษณะในตัวสำหรับอาร์เรย์ที่มีขนาดไม่เกิน 32 องค์ประกอบเท่านั้น (คุณลักษณะสำหรับแต่ละขนาดถูกกำหนดไว้แบบคงที่) ด้วยการสร้างฟังก์ชัน const generics ทำให้สามารถกำหนดฟังก์ชันทั่วไปสำหรับอาเรย์ขนาดใดก็ได้ แต่ฟังก์ชันเหล่านี้ยังไม่รวมอยู่ในคุณลักษณะที่เสถียรของภาษา แม้ว่าฟังก์ชันเหล่านี้จะถูกนำไปใช้ในคอมไพเลอร์ และตอนนี้ใช้ในไลบรารีมาตรฐานแล้ว สำหรับอาร์เรย์ประเภทต่างๆ ทุกขนาด
    ตัวอย่างเช่น โครงสร้างต่อไปนี้ใน Rust 1.47 จะพิมพ์เนื้อหาของอาร์เรย์ แม้ว่าก่อนหน้านี้จะส่งผลให้เกิดข้อผิดพลาด:

fnmain() {
ให้ xs = [0; 34];
println!("{:?}", xs);
}

  • ให้เอาต์พุตของการติดตามที่สั้นกว่า (backtrace) เอาต์พุตในสถานการณ์ฉุกเฉิน องค์ประกอบที่ไม่สนใจในสถานการณ์ส่วนใหญ่ แต่ทำให้ผลลัพธ์ยุ่งเหยิงและหันเหความสนใจไปจากสาเหตุหลักของปัญหา จะถูกแยกออกจากการติดตาม หากต้องการส่งคืนการติดตามแบบเต็ม คุณสามารถใช้ตัวแปรสภาพแวดล้อม "RUST_BACKTRACE=full" ตัวอย่างเช่นสำหรับรหัส

fnmain() {
ตื่นตกใจ!();
}

ก่อนหน้านี้ร่องรอยถูกส่งออกใน 23 ด่าน แต่ตอนนี้จะลดลงเหลือ 3 ด่าน ทำให้คุณเข้าใจแก่นแท้ได้ทันที:

เธรด 'main' ตื่นตระหนกกับ 'ความตื่นตระหนกอย่างชัดเจน', src/main.rs:2:5
สแต็กย้อนรอย:
0: มาตรฐาน::ตื่นตระหนก::begin_panic
ที่ /rustc/d…d75a/library/std/src/panicking.rs:497
1: สนามเด็กเล่น::main
ที่ ./src/main.rs:2
2: แกนหลัก :: ops :: ฟังก์ชั่น :: FnOnce :: call_once
ที่ /rustc/d…d75a/library/core/src/ops/function.rs:227

  • คอมไพเลอร์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, RangeInclude::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU และ f64:: TAU
  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใด ๆ แทนที่จะเป็นค่าคงที่จะถูกใช้ในวิธีการ:
    • ใหม่สำหรับจำนวนเต็มทั้งหมดที่ไม่ใช่ศูนย์
    • ตรวจสอบ_เพิ่ม, ตรวจสอบ_sub, ตรวจสอบ_mul, ตรวจสอบ_neg, ตรวจสอบ_shl, ตรวจสอบ_shr, saturating_add, saturating_sub และ saturating_mul สำหรับจำนวนเต็มทั้งหมด;
    • is_ascii_letteric, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace และ is_ascii_control สำหรับประเภท char และ u8
  • สำหรับ FreeBSD จะใช้ชุดเครื่องมือจาก FreeBSD 11.4 (FreeBSD 10 ไม่รองรับ LLVM 11)

เอามาจาก opennet.ru

ที่มา: linux.org.ru

เพิ่มความคิดเห็น