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

ไปยังสถานที่ การเปิดตัวภาษาโปรแกรมระบบ สนิม 1.34พัฒนาโดยโครงการ Mozilla ภาษามุ่งเน้นไปที่ความปลอดภัยของหน่วยความจำ ให้การจัดการหน่วยความจำอัตโนมัติ และจัดเตรียมวิธีการเพื่อให้บรรลุการทำงานแบบขนานที่มีงานสูงโดยไม่ต้องใช้ตัวรวบรวมขยะหรือรันไทม์

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

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

  • ตัวจัดการแพ็คเกจ Cargo ได้เพิ่มเครื่องมือเพื่อทำงานกับการลงทะเบียนแพ็คเกจทางเลือกที่สามารถอยู่ร่วมกับการลงทะเบียนสาธารณะ crates.io ตัวอย่างเช่น นักพัฒนาแอปพลิเคชันที่เป็นกรรมสิทธิ์สามารถใช้รีจิสตรีส่วนตัวของตนเองได้ ซึ่งสามารถใช้เพื่อแสดงรายการการขึ้นต่อกันใน Cargo.toml และใช้โมเดลการกำหนดเวอร์ชันที่คล้ายกับ crates.io สำหรับผลิตภัณฑ์ของตน ตลอดจนอ้างอิงการขึ้นต่อกันของทั้งสองลัง io และไปยังรีจิสทรีของคุณเอง

    หากต้องการเพิ่มการลงทะเบียนภายนอกให้กับ .cargo/config (อยู่ใน $HOME หรือในไดเร็กทอรีแพ็คเกจ)
    ที่ให้ไว้ ส่วน “[รีจิสทรี]” และหากต้องการใช้รีจิสทรีภายนอก ตัวเลือก “รีจิสทรี” จะปรากฏในคำอธิบายของการขึ้นต่อกันแต่ละรายการใน Cargo.toml หากต้องการเชื่อมต่อกับรีจิสทรีเพิ่มเติม เพียงวางโทเค็นการรับรองความถูกต้องในไฟล์ ~/.cargo/credentials แล้วรันคำสั่ง
    "cargo login --registry=my-registry" และเพื่อเผยแพร่แพ็คเกจ -
    "เผยแพร่สินค้า -registry=my-registry";

  • เพิ่มการสนับสนุนอย่างเต็มที่สำหรับการใช้ตัวดำเนินการ “?” ในการทดสอบ คำสอนทำให้คุณสามารถใช้โค้ดตัวอย่างจากเอกสารประกอบเป็นการทดสอบได้ ผู้ดำเนินการก่อนหน้านี้
    "?" สามารถใช้เพื่อจัดการกับข้อผิดพลาดระหว่างการทดสอบเมื่อมีฟังก์ชัน “fn main()” หรือในฟังก์ชัน “#[test]” เท่านั้น

  • ในแอตทริบิวต์แบบกำหนดเองที่กำหนดโดยใช้มาโครขั้นตอน ที่ให้ไว้ ความสามารถในการใช้ชุดโทเค็นที่กำหนดเอง (“#[attr($tokens)]”, “#[attr[$tokens]] และ #[attr{$tokens}]”) ก่อนหน้านี้ องค์ประกอบสามารถระบุได้เฉพาะในรูปแบบต้นไม้/แบบเรียกซ้ำโดยใช้ตัวอักษรสตริง เช่น “#[foo(bar, baz(quux, foo = “bar”))]” แต่ตอนนี้ เป็นไปได้ที่จะใช้การแจงนับ (' #[range(0. .10)]') และโครงสร้างเช่น “#[bound(T: MyTrait)]”;
  • ประเภทเสถียร (ลักษณะ) ลองจาก и ลองอินอนุญาตให้แปลงประเภทพร้อมการจัดการข้อผิดพลาด ตัวอย่างเช่น วิธีการอย่าง from_be_bytes ที่มีประเภทจำนวนเต็มจะใช้อาร์เรย์เป็นอินพุต แต่ข้อมูลมักจะอยู่ในประเภท Slice และการแปลงระหว่างอาร์เรย์และสไลซ์นั้นเป็นปัญหาหากดำเนินการด้วยตนเอง ด้วยความช่วยเหลือของลักษณะใหม่ การดำเนินการที่ระบุสามารถดำเนินการได้ทันทีผ่านการเรียกไปที่ .try_into() ตัวอย่างเช่น “let num = u32::from_be_bytes(slice.try_into()?)” สำหรับ Conversion ที่ประสบความสำเร็จเสมอ (เช่น จากประเภท u8 เป็น u32) มีการเพิ่มประเภทข้อผิดพลาด ไม่ผิดพลาดทำให้สามารถใช้งานได้อย่างโปร่งใส
    TryFrom สำหรับการใช้งาน "From" ที่มีอยู่ทั้งหมด

  • ฟังก์ชันเลิกใช้งานแล้ว CommandExt::before_execซึ่งอนุญาตให้ตัวจัดการถูกดำเนินการก่อนที่จะรัน exec ซึ่งถูกดำเนินการในบริบทของกระบวนการลูกที่ถูกแยกหลังจากการเรียก fork() ภายใต้เงื่อนไขดังกล่าว ทรัพยากรบางอย่างของกระบวนการหลัก เช่น ตัวอธิบายไฟล์และพื้นที่หน่วยความจำที่แมป อาจทำซ้ำได้ ซึ่งอาจนำไปสู่พฤติกรรมที่ไม่ได้กำหนดไว้และการทำงานของไลบรารีไม่ถูกต้อง
    ขอแนะนำให้ใช้ฟังก์ชันที่ไม่ปลอดภัยแทน before_exec CommandExt::pre_exec.

  • ประเภทจำนวนเต็มอะตอมมิกที่ลงนามและไม่ได้ลงนามที่มีความเสถียร ซึ่งมีขนาดตั้งแต่ 8 ถึง 64 บิต (เช่น อะตอมมิกU8) เช่นเดียวกับประเภทที่ลงนาม ไม่เป็นศูนย์I[8|16|32|64|128].
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ที่เสถียร รวมถึง Any::type_id, Error::type_id, Slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] และเมธอด SystemTime ได้รับความเสถียร ::checked_[add|sub] ฟังก์ชัน iter::from_fn และ iter::successors มีความเสถียร;
  • สำหรับประเภทจำนวนเต็มทั้งหมด จะใช้เมธอดcheck_pow, saturating_pow, wrap_pow และ overflowing_pow
  • เพิ่มความสามารถในการเปิดใช้งานการปรับให้เหมาะสมในขั้นตอนการเชื่อมโยงโดยการระบุตัวเลือกการสร้าง “-C linker-plugin-lto”

ที่มา: opennet.ru

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