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

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

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

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

  • ในบล็อกการจัดรูปแบบบรรทัด นอกเหนือจากความสามารถที่มีอยู่ก่อนหน้านี้ในการแทนที่ตัวแปรที่แสดงไว้อย่างชัดเจนหลังบรรทัดตามหมายเลขและชื่อแล้ว ยังมีการนำความสามารถในการแทนที่ตัวระบุที่กำหนดเองโดยการเพิ่มนิพจน์ “{identifier}” ลงในบรรทัดอีกด้วย ตัวอย่างเช่น: // โครงสร้างที่รองรับก่อนหน้านี้: println!("Hello, {}!", get_person()); println!("สวัสดี {0}!", get_person()); println!("สวัสดี {person}!", person = get_person()); // ตอนนี้คุณสามารถระบุได้ ให้บุคคล = get_person(); println!("สวัสดี {บุคคล}!");

    ตัวระบุสามารถระบุได้โดยตรงในตัวเลือกการจัดรูปแบบ ให้ (ความกว้าง, ความแม่นยำ) = get_format(); สำหรับ (ชื่อ, คะแนน) ใน get_scores() { println!("{name}: {score:width$.precision$}"); }

    การทดแทนใหม่ใช้งานได้กับมาโครทั้งหมดที่รองรับการกำหนดรูปแบบสตริง ยกเว้นมาโคร “ตื่นตระหนก!” ในภาษา Rust เวอร์ชัน 2015 และ 2018 ซึ่ง panic!("{ident}") จะถือเป็นสตริงปกติ (ใน Rust 2021 การทดแทนจะทำงาน)

  • ลักษณะการทำงานของโครงสร้างคำสั่ง std::process::Command บนแพลตฟอร์ม Windows มีการเปลี่ยนแปลง ดังนั้นเมื่อดำเนินการคำสั่ง ด้วยเหตุผลด้านความปลอดภัย จะไม่ค้นหาไฟล์ปฏิบัติการในไดเร็กทอรีปัจจุบันอีกต่อไป ไดเร็กทอรีปัจจุบันถูกแยกออก เนื่องจากสามารถใช้เพื่อรันโค้ดที่เป็นอันตรายได้ หากโปรแกรมทำงานในไดเร็กทอรีที่ไม่น่าเชื่อถือ (CVE-2021-3013) ตรรกะการตรวจจับปฏิบัติการใหม่เกี่ยวข้องกับการค้นหาไดเร็กทอรี Rust, ไดเร็กทอรีแอปพลิเคชัน, ไดเร็กทอรีระบบ Windows และไดเร็กทอรีที่ระบุในตัวแปรสภาพแวดล้อม PATH
  • ไลบรารีมาตรฐานได้ขยายจำนวนฟังก์ชันที่ทำเครื่องหมาย "#[must_use]" เพื่อออกคำเตือนหากละเว้นค่าที่ส่งคืน ซึ่งช่วยระบุข้อผิดพลาดที่เกิดจากการสมมติว่าฟังก์ชันจะเปลี่ยนค่าแทนที่จะส่งคืนค่าใหม่
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • ข้อมูลเมตา::is_symlink
    • เส้นทาง::is_symlink
    • {จำนวนเต็ม}::saturating_div
    • ตัวเลือก::unwrap_unchecked
    • ผลลัพธ์::unwrap_unchecked
    • ผลลัพธ์::unwrap_err_unchecked
  • คุณลักษณะ “const” ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ ถูกใช้ในฟังก์ชัน:
    • ระยะเวลา::ใหม่
    • Duration::checked_add
    • ระยะเวลา::saturating_add
    • Duration::checked_sub
    • ระยะเวลา::saturating_sub
    • ระยะเวลา::checked_mul
    • ระยะเวลา::saturating_mul
    • ระยะเวลา::checked_div
  • อนุญาตให้มีการยกเลิกการอ้างอิงตัวชี้ "* const T" ในบริบท "const"
  • ในตัวจัดการแพ็คเกจ Cargo ฟิลด์rust_versionได้ถูกเพิ่มเข้าไปในข้อมูลเมตาของแพ็คเกจแล้ว และตัวเลือก “--message-format” ได้ถูกเพิ่มในคำสั่ง “cargo install”
  • คอมไพลเลอร์ใช้การสนับสนุนกลไกการป้องกัน CFI (Control Flow Integrity) ซึ่งจะเพิ่มการตรวจสอบก่อนการเรียกทางอ้อมแต่ละครั้งเพื่อตรวจจับพฤติกรรมที่ไม่ได้กำหนดบางรูปแบบซึ่งอาจนำไปสู่การละเมิดลำดับการดำเนินการปกติ (โฟลว์การควบคุม) อันเป็นผลมาจาก การใช้ช่องโหว่ที่เปลี่ยนพอยน์เตอร์ที่เก็บไว้ในหน่วยความจำในฟังก์ชัน
  • คอมไพลเลอร์ได้เพิ่มการรองรับเวอร์ชัน 5 และ 6 ของรูปแบบการเปรียบเทียบความครอบคลุม LLVM ซึ่งใช้ในการประเมินการครอบคลุมโค้ดระหว่างการทดสอบ
  • ในคอมไพเลอร์ ข้อกำหนดสำหรับเวอร์ชันขั้นต่ำของ LLVM จะเพิ่มขึ้นเป็น LLVM 12
  • การสนับสนุนระดับที่สามสำหรับแพลตฟอร์ม x86_64-unknown-none ได้ถูกนำมาใช้แล้ว ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่บิลด์อย่างเป็นทางการ หรือการตรวจสอบว่าสามารถสร้างโค้ดได้หรือไม่

นอกจากนี้เรายังสามารถสังเกตการตีพิมพ์ของ Microsoft เกี่ยวกับการเปิดตัวไลบรารี Rust สำหรับ Windows 0.30 ซึ่งอนุญาตให้คุณใช้ภาษา Rust เพื่อพัฒนาแอปพลิเคชันสำหรับ Windows OS ชุดนี้ประกอบด้วยแพ็คเกจลังสองชุด (windows และ windows-sys) ซึ่งคุณสามารถเข้าถึง Win API ในโปรแกรม Rust ได้ โค้ดสำหรับการสนับสนุน API ถูกสร้างขึ้นแบบไดนามิกจากข้อมูลเมตาที่อธิบาย API ซึ่งช่วยให้คุณสามารถดำเนินการสนับสนุนได้ไม่เฉพาะสำหรับการเรียก Win API ที่มีอยู่เท่านั้น แต่สำหรับการโทรที่จะปรากฏในอนาคต เวอร์ชันใหม่เพิ่มการรองรับแพลตฟอร์มเป้าหมาย UWP (Universal Windows Platform) และใช้ประเภท Handle และ Debug

ที่มา: opennet.ru

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