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

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

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

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

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

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

    เพื่อลดความล่าช้าที่เกิดจากการดาวน์โหลดดัชนีแบบเต็ม Sparse แทนที่จะเข้าถึงดัชนีโดยใช้ Git เกี่ยวข้องกับการดาวน์โหลดโดยตรงผ่าน HTTPS เฉพาะข้อมูลดัชนีที่จำเป็น ซึ่งครอบคลุมการขึ้นต่อกันของโปรเจ็กต์เฉพาะ บริการใหม่คือ index.crates.io ใช้เพื่อจัดเตรียมข้อมูลดัชนี ตามค่าเริ่มต้น โปรโตคอลใหม่ได้รับการวางแผนเพื่อใช้ในสาขา Rust 1.70 และก่อนหน้านั้น หากต้องการเปิดใช้งาน คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" หรือเพิ่มพารามิเตอร์ 'protocol =' ลงใน "[registries. crates-io]" ของไฟล์ .cargo/config.toml 'sparse'

  • เพิ่มมาโคร "pin!" ซึ่งช่วยให้คุณสร้างโครงสร้าง Pin<&mut T> จากนิพจน์ "T" ด้วยการปักหมุดสถานะในเครื่อง (ต่างจาก Box::pin ตรงที่ไม่ได้จัดสรรหน่วยความจำบนฮีป แต่ผูก ในระดับสแต็ก)
  • มีการเสนอตัวจัดการข้อผิดพลาดการจัดสรรหน่วยความจำเริ่มต้น ซึ่งใช้เมื่อใช้แพ็คเกจการจัดสรรมาตรฐาน แอปพลิเคชันที่เปิดใช้งานเฉพาะการจัดสรร (ไม่มีมาตรฐาน) จะเรียกตัวจัดการ “panic!” เมื่อการจัดสรรหน่วยความจำล้มเหลว ซึ่งสามารถเลือกดักได้โดยใช้ “#[panic_handler]” โปรแกรมที่ใช้ไลบรารี std จะยังคงพิมพ์ข้อมูลข้อผิดพลาดไปยัง stderr และแครชต่อไป
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • {คอร์,มาตรฐาน}::พิน::พิน!
    • บอกเป็นนัยจาก สำหรับ {f32,f64}
    • มาตรฐาน::path::MAIN_SEPARATOR_STR
    • แสดง DerefMut สำหรับ PathBuf
  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ จะถูกนำมาใช้ในฟังก์ชัน VecDeque::new
  • ในการทำงานบนแพลตฟอร์ม Android จำเป็นต้องมี NDK r25 (API 19) เป็นอย่างน้อย เช่น เวอร์ชัน Android ที่รองรับขั้นต่ำได้รับการยกระดับเป็น 4.4 (KitKat)
  • การสนับสนุนระดับที่สามได้ถูกนำมาใช้สำหรับแพลตฟอร์ม Sony PlayStation Vita (armv7-sony-vita-newlibeabihf) ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่บิลด์อย่างเป็นทางการ หรือการตรวจสอบว่าสามารถสร้างโค้ดได้หรือไม่

ที่มา: opennet.ru

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