การจัดการหน่วยความจำอัตโนมัติของ Rust ช่วยให้นักพัฒนาเป็นอิสระจากการจัดการพอยน์เตอร์ และป้องกันปัญหาที่เกิดจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงหน่วยความจำหลังจากว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ null บัฟเฟอร์โอเวอร์รัน และอื่นๆ ที่คล้ายกัน ตัวจัดการแพ็คเกจกำลังได้รับการพัฒนาเพื่อแจกจ่ายไลบรารี ตรวจสอบการประกอบและจัดการการพึ่งพาโดยโปรเจ็กต์
หลัก
-
มีเสถียรภาพ ไวยากรณ์การเขียนโปรแกรมแบบอะซิงโครนัสใหม่ที่ใช้ฟังก์ชัน "async" บล็อก async move { ... } และตัวดำเนินการ ".await" ซึ่งช่วยให้เขียนตัวจัดการที่ไม่บล็อกโฟลว์คำสั่งหลักได้ง่ายขึ้น เมื่อเปรียบเทียบกับ API ที่นำเสนอก่อนหน้านี้สำหรับ I/O แบบอะซิงโครนัส โครงสร้าง async/.await นั้นเข้าใจง่าย อ่านได้สูง และช่วยให้คุณสามารถปรับใช้การโต้ตอบแบบอะซิงโครนัสที่ซับซ้อนได้โดยใช้เทคนิคการควบคุมโฟลว์ที่คุ้นเคยโดยอิงตามลูป คำสั่งแบบมีเงื่อนไข และข้อยกเว้นไวยากรณ์รอแบบ Async ช่วยให้คุณสร้างฟังก์ชันที่สามารถหยุดการดำเนินการชั่วคราว คืนการควบคุมไปยังเธรดหลัก และจากนั้นดำเนินการดำเนินการต่อจากจุดที่ค้างไว้ ตัวอย่างเช่น จำเป็นต้องหยุดชั่วคราวเมื่อประมวลผล I/O ซึ่งงานอื่นสามารถทำได้ในขณะที่รอข้อมูลชิ้นต่อไปมาถึง ฟังก์ชั่นและบล็อกที่กำหนดด้วย "async fn" และ "async move" จะส่งคืนลักษณะ
อนาคต ซึ่งกำหนดการแสดงการคำนวณแบบอะซิงโครนัสที่เลื่อนออกไป คุณสามารถเริ่มการคำนวณแบบเลื่อนออกไปได้โดยตรงและรับผลลัพธ์โดยใช้ตัวดำเนินการ ".await" ไม่มีการดำเนินการหรือการวางแผนล่วงหน้าจนกว่าจะมีการเรียก .await ทำให้สามารถสร้างโครงสร้างที่ซ้อนกันที่ซับซ้อนได้โดยไม่มีค่าใช้จ่ายเพิ่มเติมasync fn first_function() -> u32 { .. }
...
ให้อนาคต = first_function();
...
ให้ผลลัพธ์: u32 = Future.await; -
มีเสถียรภาพ "#![feature(bind_by_move_pattern_guards)]" ช่วยให้สามารถใช้ตัวแปรที่มีประเภทการเชื่อมโยง "โดย-ย้าย " ในเทมเพลตและใช้การอ้างอิงถึงตัวแปรเหล่านี้ในส่วน "if" ของนิพจน์ "การจับคู่ ". ตัวอย่างเช่น ขณะนี้อนุญาตให้มีการก่อสร้างต่อไปนี้:fnmain() {
ให้อาร์เรย์: กล่อง<[u8; 4]> = กล่อง::ใหม่([1, 2, 3, 4]);จับคู่อาร์เรย์ {
เลข
ถ้า nums.iter().sum::() == 10=> {
หล่น (ตัวเลข);
}
_ => ไม่สามารถเข้าถึงได้!(),
}
} - อนุญาตให้บ่งชี้ได้
คุณลักษณะ เมื่อกำหนดพารามิเตอร์ฟังก์ชัน การปิด และตัวชี้ฟังก์ชัน รองรับแอตทริบิวต์การคอมไพล์แบบมีเงื่อนไข (cfg, cfg_attr) ที่ควบคุมการวินิจฉัยผ่าน Lint (อนุญาต เตือน ปฏิเสธ และห้าม) และแอตทริบิวต์การเรียกมาโครเสริมได้รับการสนับสนุนFN เลน(
#[cfg(windows)] ชิ้น: &[u16], // ใช้พารามิเตอร์บน Windows
#[cfg(not(windows))] Slice: &[u8], // ใช้ในระบบปฏิบัติการอื่น
) -> ใช้ {
ชิ้น.len()
} - คำเตือนเกี่ยวกับปัญหาที่ระบุเมื่อตรวจสอบการยืมตัวแปร (ตัวตรวจสอบการยืม) โดยใช้เทคนิค NLL (Non-Lexical Lifetimes)
แปลแล้ว อยู่ในหมวดหมู่ของข้อผิดพลาดร้ายแรง ให้เราระลึกว่าระบบการตรวจสอบที่ใช้กลไกใหม่ในการพิจารณาอายุการใช้งานของตัวแปรที่ยืมมาทำให้สามารถระบุปัญหาบางอย่างที่รหัสยืนยันเก่าไม่มีใครสังเกตเห็นได้ เนื่องจากเอาต์พุตข้อผิดพลาดสำหรับการตรวจสอบดังกล่าวอาจส่งผลต่อความเข้ากันได้กับโค้ดที่ทำงานก่อนหน้านี้ จึงมีการออกคำเตือนตั้งแต่แรกแทนข้อผิดพลาด คำเตือนได้ถูกแทนที่ด้วยข้อผิดพลาดเมื่อทำงานในโหมด Rust 2018 ในรุ่นถัดไป เอาต์พุตข้อผิดพลาดจะถูกนำมาใช้ในโหมด Rust 2015 ซึ่งในที่สุดจะกำจัดตัวตรวจสอบการยืมแบบเก่าออกไป - คุณลักษณะ “const” ซึ่งกำหนดความเป็นไปได้ของการใช้งานในบริบทใดๆ แทนค่าคงที่ ใช้สำหรับฟังก์ชัน Vec::new, String::new, LinkedList::new, str::len, [T]::len , STR::as_bytes,
เอบีเอส, wrap_abs และล้น_abs; - ส่วนใหม่ของ API ได้ถูกถ่ายโอนไปยังหมวดหมู่ที่เสถียร รวมถึงวิธีการที่ได้รับความเสถียรด้วย
ปักหมุด::into_inner, Instant::checked_duration_since และ Instant::saturating_duration_since; - ขณะนี้ตัวจัดการแพ็คเกจสินค้าสามารถใช้นามสกุล “.toml” สำหรับไฟล์การกำหนดค่าได้แล้ว เพิ่มการสนับสนุนเบื้องต้นสำหรับการสร้างห้องสมุดมาตรฐานโดยตรงจาก Cargo เพิ่มแฟล็ก "--พื้นที่ทำงาน" โดยแทนที่แฟล็ก "--ทั้งหมด" ที่เป็นที่ถกเถียงกัน มีการเพิ่มฟิลด์ใหม่ลงในข้อมูลเมตา "
ประกาศ “ ซึ่งช่วยให้คุณสามารถเผยแพร่การอ้างอิงโดยระบุแท็ก git และหมายเลขเวอร์ชัน เพิ่มตัวเลือกการทดสอบ "-Ztimings" เพื่อสร้างรายงาน HTML ของเวลาดำเนินการของขั้นตอนการคอมไพล์ต่างๆ - ในคอมไพเลอร์สนิม ข้อความวินิจฉัยรวมถึงการตัดแต่งส่วนท้ายของโค้ดที่ไม่พอดีกับเทอร์มินัล ให้การสนับสนุนระดับที่สามสำหรับแพลตฟอร์มเป้าหมาย
i686-unknown-uefi และ sparc64-unknown-openbsd. ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติและการเผยแพร่งานสร้างอย่างเป็นทางการ
ที่มา: opennet.ru