การจัดการหน่วยความจำอัตโนมัติของ Rust ช่วยให้นักพัฒนาเป็นอิสระจากการจัดการพอยน์เตอร์ และป้องกันปัญหาที่เกิดจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงหน่วยความจำหลังจากว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ null บัฟเฟอร์โอเวอร์รัน และอื่นๆ ที่คล้ายกัน ตัวจัดการแพ็คเกจกำลังได้รับการพัฒนาเพื่อแจกจ่ายไลบรารี ตรวจสอบการประกอบและจัดการการพึ่งพาโดยโปรเจ็กต์
หลัก
- ในคอมไพเลอร์rustc
ที่ให้ไว้ รองรับการปรับให้เหมาะสมตามผลลัพธ์การทำโปรไฟล์โค้ด (PGO, Profile-Guided Optimization)
ช่วยให้คุณสร้างโค้ดที่เหมาะสมที่สุดมากขึ้นโดยอาศัยการวิเคราะห์สถิติที่สะสมระหว่างการทำงานของโปรแกรม ในการสร้างโปรไฟล์จะมีการจัดเตรียมแฟล็ก "-C profile-generate" และเพื่อใช้โปรไฟล์ระหว่างการประกอบ - "-Cprofile-use" (เริ่มแรกโปรแกรมจะประกอบเข้ากับแฟล็กแรกรันไปรอบ ๆ และหลังจากสร้าง โปรไฟล์ประกอบใหม่ด้วยแฟล็กที่สอง) - เมื่อดำเนินการคำสั่ง “cargo run” ซึ่งสะดวกต่อการใช้งานสำหรับการทดสอบแอปพลิเคชันคอนโซลอย่างรวดเร็ว ความสามารถในการเลือกไฟล์ปฏิบัติการเพื่อรันจะถูกเพิ่มโดยอัตโนมัติหากมีไฟล์ปฏิบัติการหลายไฟล์ในแพ็คเกจ ไฟล์เริ่มต้นที่จะดำเนินการถูกกำหนดผ่านคำสั่งการทำงานเริ่มต้นในส่วน [แพ็คเกจ] พร้อมด้วยพารามิเตอร์แพ็คเกจ ซึ่งช่วยให้คุณหลีกเลี่ยงการระบุชื่อไฟล์อย่างชัดเจนผ่านแฟล็ก "-bin" ทุกครั้งที่คุณเรียกใช้ "cargo run";
- คำสั่ง “ผู้ขายสินค้า” ที่ให้มาก่อนหน้านี้เป็น
แพคเกจแยกต่างหาก . คำสั่งช่วยให้คุณสามารถจัดระเบียบงานด้วยสำเนาการพึ่งพาในเครื่อง - หลังจากดำเนินการ "ผู้จำหน่ายสินค้า" ซอร์สโค้ดทั้งหมดของการอ้างอิงของโครงการจะถูกดาวน์โหลดจาก crates.io ไปยังไดเร็กทอรีในเครื่องซึ่งสามารถใช้เพื่อทำงานโดยไม่ต้องเข้าถึงลัง io (หลังจากดำเนินการคำสั่งแล้ว คำแนะนำในการเปลี่ยนการกำหนดค่าจะแสดงขึ้นเพื่อใช้ไดเร็กทอรีสำหรับบิลด์) คุณลักษณะนี้ใช้เพื่อจัดระเบียบการจัดส่งคอมไพเลอร์rustcพร้อมแพ็กเกจการขึ้นต่อกันทั้งหมดในไฟล์เก็บถาวรเดียวพร้อมกับรีลีส - ขณะนี้ คุณสามารถสร้างลิงก์ไปยังตัวเลือกแจงนับโดยใช้นามแฝงประเภทได้ (ตัวอย่างเช่น ในเนื้อความของฟังก์ชัน “fn increament_or_zero(x: ByteOption) คุณสามารถระบุ “ByteOption::None => 0”) พิมพ์โครงสร้างการคำนวณ (‹ MyType‹.. ››::option => N) หรือการเข้าถึงด้วยตนเอง (ในบล็อก c &self คุณสามารถระบุ “Self::Quarter => 25”);
- เพิ่มความสามารถในการสร้างค่าคงที่ที่ไม่มีชื่อในมาโคร แทนที่จะกำหนดชื่อองค์ประกอบใน "const" ตอนนี้คุณสามารถใช้อักขระ "_" เพื่อเลือกตัวระบุที่ไม่ซ้ำแบบไดนามิก หลีกเลี่ยงความขัดแย้งของชื่อเมื่อเรียกมาโครอีกครั้ง
- เพิ่มความสามารถในการใช้แอตทริบิวต์ "#[repr(align(N))" พร้อมด้วย enums โดยใช้ไวยากรณ์ที่คล้ายกับการกำหนดโครงสร้าง AlignN‹T› ด้วยการจัดตำแหน่ง จากนั้นใช้ AlignN‹MyEnum›;
- ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ที่เสถียร รวมถึง BufReader::buffer, BufWriter::buffer และ
เซลล์::from_mut,
เซลล์::as_slice_of_cells,
DoubleEndedIterator::nth_back,
ตัวเลือก::xor
{i,u}{8,16,64,128,ขนาด}::reverse_bits, การตัด::reverse_bits และ
ชิ้น::copy_within
นอกจากนี้ยังสามารถสังเกตได้
ที่มา: opennet.ru