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

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

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

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

  • ดำเนินการรองรับประเภทต่างๆ อาร์เรย์ ขนาดใดก็ได้ ก่อนหน้านี้ เนื่องจากไม่สามารถกำหนดฟังก์ชันทั่วไปสำหรับค่าจำนวนเต็มทั้งหมดได้ ไลบรารีมาตรฐานจึงให้การสนับสนุนคุณลักษณะในตัวสำหรับอาร์เรย์ที่มีขนาดไม่เกิน 32 องค์ประกอบเท่านั้น (คุณลักษณะสำหรับแต่ละขนาดถูกกำหนดไว้แบบคงที่) ด้วยการสร้างฟังก์ชันการทำงานของยาชื่อสามัญคงที่ (“const generics”) ทำให้สามารถกำหนดฟังก์ชันทั่วไปสำหรับอาเรย์ขนาดใดก็ได้ แต่ยังไม่ได้รวมอยู่ในคุณสมบัติภาษาที่เสถียรแม้ว่าจะถูกนำมาใช้ในคอมไพเลอร์และตอนนี้ ที่เกี่ยวข้อง ในไลบรารีมาตรฐานสำหรับลักษณะอาร์เรย์ทุกขนาด

    ตัวอย่างเช่น โครงสร้างต่อไปนี้ใน Rust 1.47 จะพิมพ์เนื้อหาของอาร์เรย์ แม้ว่าก่อนหน้านี้จะส่งผลให้เกิดข้อผิดพลาด:

    fnmain() {
    ให้ xs = [0; 34];

    println!("{:?}", xs);
    }

  • ให้เอาต์พุตของการติดตามที่สั้นกว่า (backtrace) เอาต์พุตในสถานการณ์ฉุกเฉิน องค์ประกอบที่ไม่สนใจในสถานการณ์ส่วนใหญ่ แต่ทำให้ผลลัพธ์ยุ่งเหยิงและหันเหความสนใจไปจากสาเหตุหลักของปัญหา จะถูกแยกออกจากการติดตาม หากต้องการส่งคืนการติดตามแบบเต็ม คุณสามารถใช้ตัวแปรสภาพแวดล้อม "RUST_BACKTRACE=full" ตัวอย่างเช่นสำหรับรหัส

    fnmain() {
    ตื่นตกใจ!();
    }

    ก่อนหน้านี้การติดตามถูกส่งออกใน 23 ด่าน แต่ตอนนี้จะลดลงเหลือ
    3 ขั้นตอนที่ช่วยให้คุณเข้าใจสาระสำคัญได้ทันที:

    เธรด 'main' ตื่นตระหนกกับ 'ความตื่นตระหนกอย่างชัดเจน', src/main.rs:2:5
    สแต็กย้อนรอย:
    0: มาตรฐาน::ตื่นตระหนก::begin_panic
    ที่ /rustc/d…d75a/library/std/src/panicking.rs:497
    1: สนามเด็กเล่น::main
    ที่ ./src/main.rs:2
    2: แกนหลัก :: ops :: ฟังก์ชั่น :: FnOnce :: call_once
    ที่ /rustc/d…d75a/library/core/src/ops/function.rs:227

  • คอมไพเลอร์rustcได้รับการอัปเดตเพื่อใช้ในการสร้าง LLVM 11 (สนิม ใช้ LLVM เป็นแบ็กเอนด์สำหรับ การสร้างรหัส). ในเวลาเดียวกัน ความสามารถในการสร้างด้วย LLVM รุ่นเก่าจนถึงเวอร์ชัน 8 ยังคงอยู่ แต่โดยค่าเริ่มต้น (ใน สนิม-lang/llvm-โครงการ) ขณะนี้ใช้ LLVM 11 คาดว่า LLVM 11 จะเปิดตัวในอีกไม่กี่วันข้างหน้า
  • บนแพลตฟอร์ม Windows คอมไพเลอร์rustc ให้การสนับสนุนสำหรับการเปิดใช้งานการตรวจสอบความสมบูรณ์ของโฟลว์การควบคุม (Control Flow Guard) ซึ่งเปิดใช้งานโดยใช้แฟล็ก "-C control-flow-guard" บนแพลตฟอร์มอื่น แฟล็กนี้จะถูกละเว้นในตอนนี้
  • ส่วนใหม่ของ API ได้ถูกโอนไปยังหมวดหมู่เสถียร รวมถึงเสถียรด้วย
    รหัสประจำตัว::new_raw,
    ช่วง::is_empty,
    ช่วงรวม::is_empty,
    ผลลัพธ์::as_deref,
    ผลลัพธ์::as_deref_mut,
    Vec::รั่ว,
    ตัวชี้::offset_from,
    f32::TAU และ
    f64::เอกภาพ.

  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใด ๆ แทนที่จะเป็นค่าคงที่จะถูกใช้ในวิธีการ:
    • ใหม่สำหรับจำนวนเต็มทั้งหมดที่ไม่ใช่ศูนย์
    • ตรวจสอบ_เพิ่ม, ตรวจสอบ_sub, ตรวจสอบ_mul, ตรวจสอบ_neg, ตรวจสอบ_shl, ตรวจสอบ_shr, saturating_add, saturating_sub และ saturating_mul สำหรับจำนวนเต็มทั้งหมด;
    • is_ascii_letteric, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace และ is_ascii_control สำหรับประเภท char และ u8
  • สำหรับ FreeBSD ที่เกี่ยวข้อง ชุดเครื่องมือจาก FreeBSD 11.4 (FreeBSD 10 ไม่รองรับ LLVM 11)

ที่มา: opennet.ru

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