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

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

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

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

  • การใช้มาโคร “ตื่นตระหนก!” ได้รับความเสถียรแล้ว ในบริบทที่สร้างขึ้นระหว่างการคอมไพล์ เช่น การประกาศ "const fn" นอกจากนี้นอกจากจะใช้คำว่า "ตื่นตระหนก!" แล้ว การประกาศ const อนุญาตให้ใช้มาโคร "assert!" และ API ไลบรารีมาตรฐานอื่นๆ บางส่วน ระบบป้องกันภาพสั่นไหวยังไม่ครอบคลุมโครงสร้างพื้นฐานการจัดรูปแบบทั้งหมด ดังนั้นในรูปแบบปัจจุบันจึงเกิดมาโคร “ตื่นตระหนก!” สามารถใช้ได้เฉพาะกับสตริงคงที่ (panic!("...")) หรือกับค่าที่ประมาณค่าเดียว "&str" เมื่อทำการแทนที่ (panic!("{}", a)) ซึ่งควรจำกัดอยู่เพียงการแทนที่ "{ }" โดยไม่มีตัวระบุการจัดรูปแบบและประเภทอื่นๆ ในอนาคต การบังคับใช้ของมาโครในบริบทคงที่จะถูกขยาย แต่ความสามารถที่เสถียรนั้นเพียงพอที่จะดำเนินการตรวจสอบการยืนยันในขั้นตอนการคอมไพล์แล้ว: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = ยืนยัน!(std::mem::size_of:: () == 8);
  • ตัวจัดการแพ็คเกจ Cargo อนุญาตให้ใช้โปรไฟล์ที่มีชื่อที่กำหนดเองได้ ไม่จำกัดเพียง "dev", "release", "test" และ "bench" ตัวอย่างเช่น หากต้องการเปิดใช้งานการปรับให้เหมาะสมในขั้นตอนการเชื่อมโยง (LTO) เฉพาะเมื่อมีการสร้างส่วนประกอบผลิตภัณฑ์ขั้นสุดท้ายเท่านั้น คุณสามารถสร้างโปรไฟล์ "การผลิต" ใน Cargo.toml และเพิ่มแฟล็ก "lto = true" ลงไปได้ อย่างไรก็ตาม เมื่อกำหนดโปรไฟล์ของคุณเอง คุณต้องระบุโปรไฟล์ที่มีอยู่เพื่อรับการตั้งค่าเริ่มต้นจากโปรไฟล์นั้น ตัวอย่างด้านล่างสร้างโปรไฟล์ "การผลิต" ที่เสริมโปรไฟล์ "release" โดยรวมแฟล็ก "lto = true" โปรไฟล์นั้นเปิดใช้งานโดยการเรียกคาร์โก้ด้วยตัวเลือก “--โปรไฟล์การผลิต” และส่วนประกอบแอสเซมบลีจะถูกวางไว้ในไดเร็กทอรี “เป้าหมาย/การผลิต” [profile.production] สืบทอด = "ปล่อย" lto = จริง
  • การใช้ try_reserve สำหรับประเภท Vec, String, HashMap, HashSet และ VecDeque ได้รับความเสถียร ซึ่งช่วยให้คุณสามารถจองพื้นที่ล่วงหน้าสำหรับองค์ประกอบจำนวนหนึ่งของประเภทที่กำหนด เพื่อลดความถี่ของการดำเนินการจัดสรรหน่วยความจำและหลีกเลี่ยง ขัดข้องระหว่างการทำงานเนื่องจากหน่วยความจำไม่เพียงพอ
  • อนุญาตให้ระบุมาโครด้วยเครื่องหมายปีกกาในนิพจน์ เช่น "m!{ .. }.method()" และ "m!{ .. }?"
  • การทำงานของฟังก์ชัน File::read_to_end และ read_to_string ได้รับการปรับให้เหมาะสมแล้ว
  • การสนับสนุนข้อกำหนด Unicode ได้รับการอัพเดตเป็นเวอร์ชัน 14.0
  • ขยายจำนวนฟังก์ชันที่ทำเครื่องหมายว่า "#[must_use]" เพื่อออกคำเตือนหากละเว้นค่าที่ส่งคืน ซึ่งช่วยระบุข้อผิดพลาดที่เกิดจากการสมมติว่าฟังก์ชันจะเปลี่ยนค่าแทนที่จะส่งคืนค่าใหม่
  • เพิ่มแบ็กเอนด์ทดลองสำหรับการสร้างโค้ดโดยใช้ libgccjit
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • [ท; N]::as_mut_slice
    • [ท; N]::as_slice
    • คอลเลกชัน::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • สตริง::try_reserve
    • สตริง::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • ตัววนซ้ำ::map_ While
    • มัน::MapWhile
    • proc_macro::is_available
    • คำสั่ง::get_program
    • คำสั่ง::get_args
    • คำสั่ง::get_envs
    • คำสั่ง::get_current_dir
    • CommandArgs
    • CommandEnvs
  • แอตทริบิวต์ “const” ซึ่งกำหนดว่าสามารถใช้ในบริบทใดๆ แทนค่าคงที่ได้หรือไม่ จะถูกใช้ในฟังก์ชัน tips::unreachable_unchecked
  • การสนับสนุนระดับที่สามได้ถูกนำมาใช้สำหรับ armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi และ armv7a-kmc- แพลตฟอร์ม solid_asp3-eabihf ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่บิลด์อย่างเป็นทางการ หรือการตรวจสอบว่าสามารถสร้างโค้ดได้หรือไม่

ที่มา: opennet.ru

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