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

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

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

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

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

  • ข้อกำหนดสำหรับสภาพแวดล้อม Linux ในคอมไพเลอร์ ตัวจัดการแพ็คเกจ Cargo และไลบรารีมาตรฐาน libstd ได้รับการเพิ่มขึ้น - ข้อกำหนดขั้นต่ำสำหรับ Glibc ได้รับการยกจากเวอร์ชัน 2.11 เป็น 2.17 และเคอร์เนล Linux จากเวอร์ชัน 2.6.32 เป็น 3.2 ข้อจำกัดยังใช้กับโปรแกรมปฏิบัติการของแอปพลิเคชัน Rust ที่สร้างด้วย libstd อีกด้วย ชุดแจกจ่าย RHEL 7, SLES 12-SP5, Debian 8 และ Ubuntu 14.04 ตรงตามข้อกำหนดใหม่ การสนับสนุน RHEL 6, SLES 11-SP4, Debian 7 และ Ubuntu 12.04 จะถูกยกเลิก ผู้ใช้ที่ใช้โปรแกรมปฏิบัติการที่สร้างโดย Rust ในสภาพแวดล้อมที่มีเคอร์เนล Linux รุ่นเก่าควรอัปเกรดระบบ ใช้คอมไพเลอร์รุ่นเก่าต่อไป หรือดูแลรักษา libstd fork ของตนเองด้วยเลเยอร์เพื่อรักษาความเข้ากันได้

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

  • คุณลักษณะ IntoFuture ได้รับความเสถียร ซึ่งคล้ายกับ IntoIterator แต่แตกต่างจากอย่างหลังโดยใช้ลูป ".await" แทน "for ... in ..." เมื่อรวมกับ IntoFuture คีย์เวิร์ด ".await" ไม่เพียงแต่คาดหวังถึงลักษณะในอนาคตเท่านั้น แต่ยังรวมถึงประเภทอื่นๆ ที่สามารถแปลงเป็นอนาคตได้ด้วย
  • ยูทิลิตี้ตัววิเคราะห์สนิมรวมอยู่ในคอลเลกชันของยูทิลิตี้ที่มาพร้อมกับรุ่น Rust ยูทิลิตี้นี้ยังมีให้สำหรับการติดตั้งโดยใช้สนิม (ส่วนประกอบสนิมเพิ่มตัววิเคราะห์สนิม)
  • ตัวจัดการแพ็คเกจ Cargo มีการสืบทอดพื้นที่ทำงานเพื่อกำจัดความซ้ำซ้อนของค่าฟิลด์ทั่วไประหว่างแพ็คเกจ เช่น เวอร์ชัน Rust และ URL ของที่เก็บ เพิ่มการสนับสนุนสำหรับการสร้างแพลตฟอร์มเป้าหมายหลายรายการพร้อมกัน (ขณะนี้คุณสามารถระบุพารามิเตอร์ได้มากกว่าหนึ่งพารามิเตอร์ในตัวเลือก “--target”)
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • อนาคต::สู่อนาคต
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • ระบบปฏิบัติการ::unix::กระบวนการ::CommandExt::process_group
    • ระบบปฏิบัติการ::windows::fs::FileTypeExt::is_symlink_dir
    • ระบบปฏิบัติการ::windows::fs::FileTypeExt::is_symlink_file
  • ประเภทที่เข้ากันได้กับ C ซึ่งก่อนหน้านี้มีความเสถียรในโมดูล std::ffi ได้ถูกเพิ่มเข้ากับคอร์และไลบรารี alloc:
    • แกนหลัก::ffi::CStr
    • หลัก::ffi::FromBytesWithNulError
    • จัดสรร::ffi::CString
    • จัดสรร::ffi::FromVecWithNulError
    • จัดสรร::ffi::IntoStringError
    • จัดสรร::ffi::NulError
  • ประเภท C ก่อนหน้านี้ทำให้เสถียรในโมดูล std::os::raw ได้ถูกเพิ่มเข้าไปในโมดูล core::ffi และ std::ffi (ตัวอย่างเช่น ประเภท c_uint และ c_ulong ได้รับการเสนอสำหรับประเภท uint และ ulong C):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • ตัวจัดการระดับต่ำได้รับความเสถียรสำหรับใช้กับกลไกการสำรวจความคิดเห็น (ในอนาคตมีการวางแผนที่จะจัดเตรียม API แบบง่ายที่ไม่จำเป็นต้องใช้โครงสร้างระดับต่ำเช่น Pull and Pin):

    • อนาคต::poll_fn
    • ภารกิจ::พร้อม!
  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ จะถูกใช้ในฟังก์ชัน Slice::from_raw_parts
  • เพื่อให้จัดเก็บข้อมูลได้กะทัดรัดมากขึ้น เค้าโครงหน่วยความจำของโครงสร้าง Ipv4Addr, Ipv6Addr, SocketAddrV4 และ SocketAddrV6 มีการเปลี่ยนแปลง อาจมีปัญหาความเข้ากันได้กับแพ็คเกจลังเดียวที่ใช้ std::mem::transmute สำหรับการจัดการโครงสร้างระดับต่ำ
  • การสร้างคอมไพเลอร์สนิมสำหรับแพลตฟอร์ม Windows ใช้การเพิ่มประสิทธิภาพ PGO (การเพิ่มประสิทธิภาพตามโปรไฟล์) ซึ่งทำให้สามารถเพิ่มประสิทธิภาพการคอมไพล์โค้ดได้ 10-20%
  • คอมไพเลอร์ได้ดำเนินการคำเตือนใหม่เกี่ยวกับฟิลด์ที่ไม่ได้ใช้ในบางโครงสร้าง

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

ที่มา: opennet.ru

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