การจัดการหน่วยความจำอัตโนมัติของ Rust ช่วยนักพัฒนาจากข้อผิดพลาดเมื่อจัดการพอยน์เตอร์ และป้องกันปัญหาที่เกิดขึ้นเนื่องจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงพื้นที่หน่วยความจำหลังจากที่ถูกปล่อยให้ว่าง การตัดการอ้างอิงพอยน์เตอร์ null บัฟเฟอร์โอเวอร์รัน ฯลฯ เพื่อกระจายไลบรารี ตรวจสอบการประกอบและจัดการการพึ่งพา โปรเจ็กต์จะพัฒนาตัวจัดการแพ็คเกจ
หลัก
- ดำเนินการรองรับประเภทต่างๆ
อาร์เรย์ ขนาดใดก็ได้ ก่อนหน้านี้ เนื่องจากไม่สามารถกำหนดฟังก์ชันทั่วไปสำหรับค่าจำนวนเต็มทั้งหมดได้ ไลบรารีมาตรฐานจึงให้การสนับสนุนคุณลักษณะในตัวสำหรับอาร์เรย์ที่มีขนาดไม่เกิน 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 (สนิมใช้ LLVM เป็นแบ็กเอนด์สำหรับการสร้างรหัส ). ในเวลาเดียวกัน ความสามารถในการสร้างด้วย LLVM รุ่นเก่าจนถึงเวอร์ชัน 8 ยังคงอยู่ แต่โดยค่าเริ่มต้น (ในสนิม-lang/llvm-โครงการ ) ขณะนี้ใช้ LLVM 11 คาดว่า LLVM 11 จะเปิดตัวในอีกไม่กี่วันข้างหน้า - บนแพลตฟอร์ม Windows คอมไพเลอร์rustc ให้การสนับสนุนสำหรับการเปิดใช้งานการตรวจสอบความสมบูรณ์ของโฟลว์การควบคุม (Control Flow Guard) ซึ่งเปิดใช้งานโดยใช้แฟล็ก "-C control-flow-guard" บนแพลตฟอร์มอื่น แฟล็กนี้จะถูกละเว้นในตอนนี้
- ส่วนใหม่ของ API ได้ถูกโอนไปยังหมวดหมู่เสถียร รวมถึงเสถียรด้วย
รหัสประจำตัว::new_raw,
ช่วง::is_empty,
ช่วงรวม::is_empty,
ผลลัพธ์::as_deref,
ผลลัพธ์::as_deref_mut,
Vec::รั่ว,
ตัวชี้::offset_from,
f32::TAU และ
f64::เอกภาพ. - แอตทริบิวต์ "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