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

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

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

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

  • ตัวจัดการแพ็คเกจ Cargo มีความสามารถในการผสานข้อผิดพลาดและคำเตือนที่ซ้ำกันที่เกิดขึ้นระหว่างการสร้าง เมื่อดำเนินการคำสั่ง เช่น "การทดสอบสินค้า" และ "การตรวจสอบสินค้า -- เป้าหมายทั้งหมด" ที่ส่งผลให้มีการสร้างแพ็คเกจหลายชุดที่มีพารามิเตอร์ต่างกัน ตอนนี้ผู้ใช้จะแสดงสรุปการเกิดปัญหาที่เกิดซ้ำ แทนที่จะแสดงขึ้นมา คำเตือนที่เหมือนกันหลายรายการเมื่อสร้างสิ่งเดียวกันซ้ำ ๆ ไฟล์ $ cargo +1.55.0 การตรวจสอบ — เป้าหมายทั้งหมด การตรวจสอบ foo v0.1.0 คำเตือน: ไม่เคยใช้ฟังก์ชัน: 'foo' —> src/lib.rs:9:4 | 9 | fn foo() {} | ^^^ | = หมายเหตุ: '#[warn(dead_code)]' เปิดโดยค่าเริ่มต้น คำเตือน: 'foo' (lib) สร้าง 1 คำเตือน คำเตือน: 'foo' (การทดสอบ lib) สร้าง 1 คำเตือน (1 ซ้ำ) เสร็จสิ้น dev [unoptimized + debuginfo] เป้าหมาย (s) ใน 0.84 วินาที
  • โค้ดการแยกวิเคราะห์จุดลอยตัวในไลบรารีมาตรฐานถูกย้ายไปใช้อัลกอริธึม Eisel-Lemire ที่เร็วและแม่นยำยิ่งขึ้น ซึ่งแก้ไขปัญหาที่สังเกตพบก่อนหน้านี้เกี่ยวกับการปัดเศษและการแยกวิเคราะห์ตัวเลขที่มีตัวเลขจำนวนมากมาก
  • ความสามารถในการระบุช่วงที่ไม่ปิดในเทมเพลตได้รับความเสถียร (“X..” ถูกตีความว่าเป็นช่วงที่ขึ้นต้นด้วยค่า X และลงท้ายด้วยค่าสูงสุดของประเภทจำนวนเต็ม): จับคู่ x เป็น u32 { 0 => println! (“ศูนย์!”), 1.. => println!("จำนวนบวก!"), }
  • ตัวแปรข้อผิดพลาดเพิ่มเติมที่ครอบคลุมโดย std::io::ErrorKind (จัดประเภทข้อผิดพลาดเป็นหมวดหมู่ เช่น NotFound และ WillBlock) ก่อนหน้านี้ ข้อผิดพลาดที่ไม่พอดีกับหมวดหมู่ที่มีอยู่จะตกอยู่ใน ErrorKind::Other หมวดหมู่ ซึ่งใช้สำหรับข้อผิดพลาดในโค้ดของบุคคลที่สามด้วย ขณะนี้มีหมวดหมู่ภายในที่แยกต่างหาก ErrorKind::ไม่มีหมวดหมู่สำหรับข้อผิดพลาดที่ไม่เหมาะกับหมวดหมู่ที่มีอยู่ และหมวดหมู่ ErrorKind::Other ถูกจำกัดไว้เฉพาะข้อผิดพลาดที่ไม่ได้เกิดขึ้นในไลบรารีมาตรฐาน (ฟังก์ชันไลบรารีมาตรฐานที่ส่งคืน io::ข้อผิดพลาด ไม่ใช้ ErrorKind:: หมวดหมู่อื่น ๆ อีกต่อไป)
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • ผูกมัด::โคลน
    • ท่อระบายน้ำ::as_str
    • IntoInnerError::into_error
    • IntoInnerError::into_parts
    • บางทีUninit::assume_init_mut
    • บางทีUninit::assume_init_ref
    • บางทีUninit::write
    • อาร์เรย์::แผนที่
    • ops::ControlFlow
    • x86::_bittest
    • x86::_bittestandcompllement
    • x86::_bittestandreset
    • x86::_bittestandset
    • x86_64::_bittest64
    • x86_64::_bittestและส่วนเสริม64
    • x86_64::_bittestandreset64
    • x86_64::_bittestandset64
  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ จะถูกใช้ในเมธอด str::from_utf8_unchecked
  • การสนับสนุนระดับที่สามได้ถูกนำมาใช้สำหรับแพลตฟอร์ม powerpc64le-unknown-freebsd ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่บิลด์อย่างเป็นทางการ หรือการตรวจสอบว่าสามารถสร้างโค้ดได้หรือไม่

ที่มา: opennet.ru

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