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

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

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

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

  • ความสามารถของฟังก์ชันที่กำหนดโดยใช้นิพจน์ "const fn" ได้รับการขยาย ซึ่งไม่เพียงแต่เรียกว่าเป็นฟังก์ชันปกติเท่านั้น แต่ยังใช้ในบริบทใดๆ แทนค่าคงที่ได้ด้วย ฟังก์ชันเหล่านี้คำนวณ ณ เวลาคอมไพล์ ไม่ใช่ที่รันไทม์ ดังนั้นจึงอยู่ภายใต้ข้อจำกัดบางประการ เช่น ความสามารถในการอ่านจากค่าคงที่เท่านั้น

    เวอร์ชันใหม่ยกเลิกการห้ามใช้ตัวดำเนินการบูลีน (“&&” และ “||”) ในฟังก์ชันดังกล่าว และอนุญาตให้ใช้โครงสร้าง “if”, “if let”, “match”
    "ในขณะที่", "ในขณะที่ให้" และ "วนซ้ำ" และยังให้ความสามารถในการแปลงเป็นชิ้น (ชิ้น, อาร์เรย์ไดนามิก) โดยใช้นิพจน์ "&[T]" การใช้คุณสมบัติเหล่านี้ในฟังก์ชัน “const fn” ช่วยให้คุณสามารถย้ายการดำเนินการที่ใช้ทรัพยากรจำนวนมากไปยังขั้นตอนการคอมไพล์ได้ ตัวอย่างเช่น การใช้งาน "const-sha1" ทำให้สามารถคำนวณแฮช SHA-1 ณ เวลาคอมไพล์ได้ ซึ่งนำไปสู่การเร่งการเชื่อมโยง WinRT สำหรับ Rust เกือบ 40 เท่า

  • เพื่อให้ข้อความแสดงข้อผิดพลาดมีข้อมูลมากขึ้น การสนับสนุนแอตทริบิวต์ “#[track_caller]” ได้รับความเสถียร ซึ่งมีประโยชน์สำหรับฟังก์ชันต่างๆ เช่น unwrap ซึ่งอาจทำให้เกิดความตื่นตระหนกหากใช้ประเภทไม่ถูกต้อง ตัวจัดการความตื่นตระหนกจะใช้แอตทริบิวต์ที่ระบุเพื่อพิมพ์ตำแหน่งของผู้โทรในข้อความแสดงข้อผิดพลาด
  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ จะถูกใช้ในเมธอด std::mem::forget
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ที่เสถียร รวมถึง Option::zip และ vec::Drain::as_slice ที่เสถียรแล้ว
  • ในตัวจัดการแพ็คเกจสินค้า เพิ่ม การสนับสนุนตัวแปรสภาพแวดล้อมใหม่ที่ตั้งค่าเมื่อรวบรวมแพ็คเกจ: CARGO_BIN_NAME (ชื่อของไฟล์ปฏิบัติการที่เป็นผลลัพธ์), CARGO_CRATE_NAME (ชื่อแพ็คเกจ), CARGO_PKG_LICENSE (ใบอนุญาตที่ระบุในรายการ), CARGO_PKG_LICENSE_FILE (เส้นทางไปยังไฟล์ใบอนุญาต)

ที่มา: opennet.ru

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