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

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

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

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

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

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

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

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

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

  • ประเภทจำนวนเต็มอะตอมมิกที่ลงนามและไม่ได้ลงนามที่มีความเสถียร ซึ่งมีขนาดตั้งแต่ 8 ถึง 64 บิต (เช่น AtomicU8) รวมถึงประเภทที่เซ็นชื่อ NonZeroI[8|16|32|54|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” (rustc คอมไพล์โค้ด Rust เป็นบิตโค้ด LLVM ซึ่งอนุญาตให้ใช้การปรับให้เหมาะสม LTO ได้)

ที่มา: opennet.ru

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