การเปิดตัวของภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปของ 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 toolchain ในสภาพแวดล้อมที่มีเคอร์เนลเวอร์ชันเก่ากว่า Linuxขอแนะนำให้พวกเขาอัปเกรดระบบ ใช้คอมไพเลอร์เวอร์ชันเก่าต่อไป หรือดูแลรักษาสาขา libstd ของตนเองอย่างอิสระโดยใช้เลเยอร์คั่นกลางเพื่อรักษาความเข้ากันได้
หนึ่งในเหตุผลที่ทำให้การสนับสนุนสำหรับรุ่นเก่าสิ้นสุดลงคือ... 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 สำหรับการจัดการโครงสร้างระดับต่ำ
- ในการสร้างคอมไพเลอร์ Rust สำหรับแพลตฟอร์ม Windows มีการใช้การปรับแต่ง PGO (profile-guided optimization) ซึ่งช่วยเพิ่มประสิทธิภาพการคอมไพล์โค้ดได้ 10-20%
- คอมไพเลอร์ได้ดำเนินการคำเตือนใหม่เกี่ยวกับฟิลด์ที่ไม่ได้ใช้ในบางโครงสร้าง
นอกจากนี้ คุณยังสามารถสังเกตรายงานสถานะเกี่ยวกับการพัฒนาการใช้งานทางเลือกอื่นของคอมไพเลอร์ภาษา Rust ซึ่งจัดทำโดยโครงการ gccrs (GCC Rust) และได้รับการอนุมัติให้รวมไว้ใน GCC หลังจากรวมส่วนหน้าแล้ว เครื่องมือ GCC มาตรฐานสามารถใช้เพื่อคอมไพล์โปรแกรมในภาษา Rust ได้โดยไม่จำเป็นต้องติดตั้งคอมไพเลอร์rustc ซึ่งสร้างขึ้นโดยใช้การพัฒนา LLVM ตราบใดที่การพัฒนายังเป็นไปตามแผน และยกเว้นปัญหาที่ไม่คาดคิด ส่วนหน้าของ Rust จะถูกรวมเข้ากับ GCC 13 ที่วางจำหน่ายในเดือนพฤษภาคมปีหน้า การใช้งาน Rust ของ GCC 13 จะอยู่ในสถานะเบต้า แต่ยังไม่ได้เปิดใช้งานตามค่าเริ่มต้น
ที่มา: opennet.ru
