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

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

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

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

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

  • คอมไพเลอร์rustcมีระบบที่ใช้ LLVM ที่มีความเสถียรสำหรับการสร้างข้อมูลการครอบคลุมที่ใช้ในการประเมินการครอบคลุมโค้ดระหว่างการทดสอบ หากต้องการเปิดใช้งานข้อมูลความครอบคลุมระหว่างการประกอบ คุณต้องใช้แฟล็ก “-Cinstrument-coverage” ตัวอย่างเช่น เริ่มต้นการประกอบด้วยคำสั่ง “RUSTFLAGS=”-C Instrument-coverage” cargo build” หลังจากรันไฟล์ปฏิบัติการที่คอมไพล์ด้วยวิธีนี้ ไฟล์ default.profraw จะถูกบันทึกในไดเร็กทอรีปัจจุบัน สำหรับการประมวลผล ซึ่งคุณสามารถใช้ยูทิลิตี llvm-profdata จากคอมโพเนนต์ llvm-tools-preview เอาต์พุตที่ประมวลผลโดย llvm-profdata สามารถส่งผ่านไปยัง llvm-cov เพื่อสร้างรายงานการครอบคลุมโค้ดที่มีคำอธิบายประกอบ ข้อมูลเกี่ยวกับลิงก์ไปยังซอร์สโค้ดนั้นนำมาจากไฟล์ปฏิบัติการที่กำลังตรวจสอบ ซึ่งรวมถึงข้อมูลที่จำเป็นเกี่ยวกับการเชื่อมต่อระหว่างตัวนับความครอบคลุมและโค้ด 1| 1|fn หลัก() { 2| 1| println!("สวัสดีชาวโลก!"); 3| 1|}
  • ในตัวจัดการแพ็กเกจสินค้า การสนับสนุนแฟล็ก "-timings" ได้รับความเสถียร ซึ่งรวมถึงการสร้างรายงานโดยละเอียดเกี่ยวกับความคืบหน้าของการสร้างและเวลาดำเนินการของแต่ละขั้นตอน รายงานอาจเป็นประโยชน์ในการเพิ่มประสิทธิภาพกระบวนการประกอบ
  • ตัวจัดการแพ็คเกจสินค้าเสนอไวยากรณ์ใหม่สำหรับกลไกของการรวบรวมแบบมีเงื่อนไขและการเลือกการขึ้นต่อกันที่เป็นตัวเลือก กำหนดค่าในไฟล์ Cargo.toml โดยแสดงรายการคุณสมบัติที่มีชื่อในส่วน [คุณสมบัติ] และเปิดใช้งานโดยเปิดใช้งานคุณสมบัติระหว่างการสร้างแพ็คเกจ โดยใช้แฟล็ก “--features” เวอร์ชันใหม่เพิ่มการรองรับการขึ้นต่อกันในเนมสเปซที่แยกจากกันและการขึ้นต่อกันที่อ่อนแอ

    ในกรณีแรก คุณสามารถใช้องค์ประกอบที่มีคำนำหน้า “dep:” ภายในส่วน “[คุณสมบัติ]” เพื่อเชื่อมโยงอย่างชัดเจนไปยังการขึ้นต่อกันที่เป็นตัวเลือก โดยไม่ต้องแสดงการขึ้นต่อกันนี้เป็นคุณสมบัติโดยปริยาย ในกรณีที่สอง มีการเพิ่มการรองรับการทำเครื่องหมายด้วยเครื่องหมาย “?” ("ชื่อแพ็คเกจ?/ชื่อคุณลักษณะ") การขึ้นต่อกันเผื่อเลือกที่ควรรวมไว้ก็ต่อเมื่อคุณสมบัติอื่นบางอย่างมีการขึ้นต่อกันเผื่อเลือกที่กำหนดด้วย ตัวอย่างเช่น ในตัวอย่างด้านล่าง การเปิดใช้งานคุณสมบัติ serde จะเปิดใช้งานการพึ่งพา "serde" เช่นเดียวกับคุณสมบัติ "serde" สำหรับการพึ่งพา "rgb" แต่เฉพาะในกรณีที่เปิดใช้งานการพึ่งพา "rgb" ที่อื่น: [การพึ่งพา] serde = { version = " 1.0.133", ตัวเลือก = true } rgb = { version = "0.8.25", ตัวเลือก = true } [คุณสมบัติ] serde = ["dep:serde", "rgb?/serde"]

  • มีการส่งคืนการสนับสนุนการคอมไพล์ส่วนเพิ่มซึ่งถูกปิดใช้งานในรุ่นล่าสุดแล้ว ข้อบกพร่องของคอมไพเลอร์ที่ทำให้คุณลักษณะนี้ถูกปิดใช้งานได้รับการแก้ไขแล้ว
  • แก้ไขปัญหาบางอย่างด้วยการจัดหาตัวจับเวลาทันทีพร้อมการรับประกันระยะเวลาแบบโมโนโทนิก ซึ่งคำนึงถึงเวลาที่ระบบใช้ในโหมดสลีป ก่อนหน้านี้ OS API ถูกใช้ทุกครั้งที่เป็นไปได้เพื่อควบคุมตัวจับเวลา ซึ่งไม่ได้คำนึงถึงสถานการณ์ที่เป็นปัญหาซึ่งทำลายความซ้ำซากจำเจของเวลา เช่น ปัญหาฮาร์ดแวร์ การใช้การจำลองเสมือน หรือข้อผิดพลาดในระบบปฏิบัติการ
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • ส่วนโค้ง::new_cyclic
    • Rc::new_cyclic
    • ชิ้น::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • บางทีUninit::assume_init_drop
    • บางทีUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • ขนาด::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • ใช้::abs_diff
    • แสดงผลสำหรับ io::ErrorKind
    • จากสำหรับ ExitCode
    • ไม่ใช่สำหรับ ! (พิมพ์ "ไม่เคย")
    • _Op_มอบหมาย<$t>
    • ส่วนโค้ง::is_aarch64_feature_detected!
  • การสนับสนุนระดับที่สามได้ถูกนำมาใช้สำหรับแพลตฟอร์ม mips64-openwrt-linux-musl* และ armv7-unknown-linux-uclibceabi (softfloat) ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่บิลด์อย่างเป็นทางการ หรือการตรวจสอบว่าสามารถสร้างโค้ดได้หรือไม่
  • คอมไพเลอร์ถูกเปลี่ยนมาใช้ LLVM 14

นอกจากนี้ คุณยังสังเกตได้ว่า:

  • เพิ่มการรองรับสำหรับการบูตคอมไพเลอร์rustc โดยใช้แบ็กเอนด์rustc_codegen_gcc ซึ่งช่วยให้คุณใช้ไลบรารี libgccjit จากโปรเจ็กต์ GCC เป็นตัวสร้างโค้ดในrustc ซึ่งช่วยให้rustc ให้การสนับสนุนสถาปัตยกรรมและการเพิ่มประสิทธิภาพที่มีอยู่ใน GCC การโปรโมตคอมไพเลอร์หมายถึงความสามารถในการใช้ตัวสร้างโค้ดที่ใช้ GCC ในrustcเพื่อสร้างคอมไพเลอร์rustcนั่นเอง ในทางปฏิบัติ คุณลักษณะนี้ช่วยให้คุณสร้างโปรแกรมสนิมสำหรับสถาปัตยกรรมที่ก่อนหน้านี้ไม่รองรับในสนิม
  • มีการเปิดตัวชุดเครื่องมือ uutils coreutils 0.0.13 ซึ่งมีการพัฒนาอะนาล็อกของแพ็คเกจ GNU Coreutils ซึ่งเขียนใหม่ในภาษา Rust Coreutils มาพร้อมกับยูทิลิตี้มากกว่าร้อยรายการ รวมถึง sort, cat, chmod, chown, chroot, cp, date, dd, echo, ชื่อโฮสต์, id, ln และ ls เป้าหมายของโครงการคือการสร้างการใช้งานทางเลือกข้ามแพลตฟอร์มของ Coreutils ซึ่งสามารถทำงานบนแพลตฟอร์ม Windows, Redox และ Fuchsia รวมถึงการเผยแพร่ภายใต้ใบอนุญาต MIT ที่อนุญาต แทนที่จะเป็นใบอนุญาต GPL copyleft

    เวอร์ชันใหม่ได้ปรับปรุงการใช้งานยูทิลิตี้หลายอย่าง รวมถึงปรับปรุงความเข้ากันได้อย่างมีนัยสำคัญของยูทิลิตี้ cp, dd, df, split และ tr กับคู่หูจากโครงการ GNU มีเอกสารออนไลน์ให้ clap parser ใช้เพื่อแยกอาร์กิวเมนต์บรรทัดคำสั่ง ซึ่งได้ปรับปรุงเอาต์พุตสำหรับแฟล็ก “--help” และเพิ่มการสนับสนุนสำหรับตัวย่อของคำสั่งแบบยาว (ตัวอย่างเช่น คุณสามารถระบุ "ls -col" แทน "ls -color" ").

ที่มา: opennet.ru

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