Rust 1.87 เปิดตัวแล้ว

เพื่อเฉลิมฉลองครบรอบ 1.0 ปีของภาษาการเขียนโปรแกรม Rust 2006 (โครงการ Rust ก่อตั้งขึ้นในปี 0.1 รุ่น 2012 ก่อตั้งขึ้นในปี 2015 และมีการเสนอเวอร์ชันเสถียรรุ่นแรกในปี 1.87) จึงได้มีการเปิดตัว Rust XNUMX ออกมา ภาษาที่มุ่งเน้นที่ความปลอดภัยของหน่วยความจำและให้วิธีการเพื่อให้บรรลุการทำงานแบบคู่ขนานสูงของการดำเนินการงาน ในขณะที่ทำได้โดยไม่ต้องใช้ตัวรวบรวมขยะและรันไทม์ (รันไทม์ลดลงเหลือการเริ่มต้นระบบขั้นพื้นฐานและการบำรุงรักษาไลบรารีมาตรฐาน)

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

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

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

  • เพิ่มการรองรับท่อที่ไม่ระบุชื่อลงในไลบรารีมาตรฐานแล้ว วิธี std::io::pipe() มีไว้สำหรับสร้างท่อที่ไม่มีชื่อ ซึ่งสามารถใช้ร่วมกับ std::process::Command เพื่อประมวลผลสตรีมอินพุตและเอาต์พุตมาตรฐาน และเพื่อรวมสตรีม stdout และ stderr เข้าด้วยกัน ใช้ std::process::Command; ใช้ std::io::Read; ให้ (mut recv, send) = std::io::pipe()?; ให้คำสั่ง mut = Command::new("path/to/bin") // การรวม stdout และ stderr เข้าเป็นช่องเดียว .stdout(send.try_clone()?) .stderr(send) .spawn()?; ให้ mut output = Vec::new(); recv.read_to_end(&mut เอาท์พุต)?; ยืนยัน!(command.wait()?.success());
  • อนุญาตให้เรียกใช้ฟังก์ชันภายใน (Intrinsics) ของ std::arch ของคอมไพเลอร์ส่วนใหญ่จากโค้ดที่ปลอดภัย การเปลี่ยนแปลงนี้มีผลใช้กับฟังก์ชัน std::arch ในตัวที่ถูกทำเครื่องหมายว่าไม่ปลอดภัยเท่านั้น เนื่องจากฟังก์ชันดังกล่าวเชื่อมโยงกับฟังก์ชันการทำงานเฉพาะอย่างหนึ่ง หากเปิดใช้งานฟังก์ชันการทำงานนั้น ตัวอย่างเช่น สามารถเรียก _mm256_add_epi32 จากโค้ดที่ปลอดภัยได้หากแอปพลิเคชันใช้ '#[target_feature(enable = "avx2")]'
  • จากบล็อค "asm!" อนุญาตให้โค้ดแอสเซมบลีแยกไปยังบล็อกของโค้ด Rust ซึ่งช่วยลดความซับซ้อนในการพัฒนาโค้ดระดับต่ำ เช่น การนำการเพิ่มประสิทธิภาพไปใช้งานในเคอร์เนลหรือการจัดระเบียบการโต้ตอบกับฮาร์ดแวร์ จุดกระโดดสำหรับคำสั่งแอสเซมเบลอร์ "jmp" ถูกระบุไว้ในแมโคร "asm!" โดยใช้ "ป้ายกำกับ" ตัวดำเนินการใหม่ ซึ่งประกอบด้วยนิพจน์บล็อกพร้อมด้วยโค้ด Rust ไม่ปลอดภัย { asm!( "jmp {}", label { println!("Jumped from asm!"); } ); -
  • อนุญาตให้ระบุประเภททั่วไปที่จับภาพและอายุการใช้งานอย่างชัดเจนในคำจำกัดความลักษณะโดยใช้ประเภทการส่งคืนลักษณะเฉพาะแบบ impl ลักษณะ Foo { fn method<'a>(&'a self) -> impl Sized; ชนิด Implicit1<'a>: มีขนาด; วิธีการ fn_desugared<'a>(&'a self) -> Self::Implicit1<'a>; fn precise<'a>(&'a self) -> impl Sized + ใช้ - ประเภท Implicit2: มีขนาด; fn precise_desugared<'a>(&'a self) -> Self::Implicit2; -
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • วีซี::แยก_ถ้า
    • vec::ExtractIf
    • ลิงค์ลิสต์::แยกข้อมูล
    • รายการลิงก์::แยกถ้า
    • <[T]>::แยกออก
    • <[T]>::แยกมิวต์ออก
    • <[T]>::แยกออกก่อน
    • <[T]>::แยกมิวต์แรกออก
    • <[T]>::แยกออกครั้งสุดท้าย
    • <[T]>::แยกมิวต์สุดท้าย
    • สตริง::ขยายจากภายใน
    • os_str::การแสดงผล
    • OsString::การแสดงผล
    • OsStr::การแสดงผล
    • ไอโอ::ท่อ
    • io::เครื่องอ่านท่อ
    • io::PipeWriter
    • impl จาก สำหรับ OwnedHandle
    • impl จาก สำหรับ OwnedHandle
    • impl จาก สำหรับ Stdio
    • impl จาก สำหรับ Stdio
    • impl จาก สำหรับ OwnedFd
    • impl จาก สำหรับ OwnedFd
    • กล่อง >::เขียน
    • ลองจาก > สำหรับสตริง
    • <*const T>::offset_from_unsigned
    • <*const T>::byte_offset_from_unsigned
    • <*mut T>::offset_from_unsigned
    • <*mut T>::byte_offset_from_unsigned
    • NonNull::offset_from_unsigned
    • NonNull::byte_offset_from_unsigned
    • ::ลงนามนักแสดง
    • ไม่ใช่ศูนย์:: ::ลงนามนักแสดง
    • ::หล่อ_ไม่ได้ลงนาม.
    • ไม่ใช่ศูนย์:: ::หล่อ_ไม่ได้ลงนาม.
    • ::มีหลายอย่าง
    • ::ไร้ขอบเขต_shl
    • ::shr ไร้ขอบเขต
    • ::ไร้ขอบเขต_shl
    • ::shr ไร้ขอบเขต
    • ::จุดกึ่งกลาง
    • ::จาก_utf8
    • ::จาก_utf8_mut
    • ::จาก_utf8_ไม่ได้ทำเครื่องหมาย
    • ::จาก_utf8_ไม่ได้ตรวจสอบ_mut
  • เครื่องหมาย “const” ใช้ในฟังก์ชัน:
    • แกนหลัก::str::จาก_utf8_mut
    • <[T]>::คัดลอกจากชิ้น
    • ซ็อกเก็ตแอดดร::เซ็ต_ไอพี
    • ซ็อกเก็ตแอดเดอร์::เซ็ตพอร์ต,
    • ซ็อกเก็ต AddrV4::set_ip
    • ซ็อกเก็ต AddrV4::set_port
    • ซ็อกเก็ต AddrV6::set_ip
    • ซ็อกเก็ต AddrV6::set_port
    • ซ็อกเก็ต AddrV6::set_flowinfo
    • ซ็อกเก็ต AddrV6::set_scope_id
    • อักขระ::เป็นตัวเลข
    • อักขระ::เป็นช่องว่างสีขาว
    • <N::as_flattened
    • <N::as_flattened_mut
    • สตริง::เป็นไบต์
    • สตริง::as_str
    • สตริง::ความจุ
    • สตริง::as_bytes
    • สตริง::len
    • สตริง::ว่างเปล่า
    • สตริง::as_mut_str
    • สตริง::as_mut_vec
    • เวกเตอร์::as_ptr
    • เวกเตอร์::as_slice
    • Vec::ความจุ
    • เวค::เลน
    • เวกเตอร์::ว่างเปล่า
    • เวกเตอร์::as_mut_slice
    • เวกเตอร์::as_mut_ptr
  • การสนับสนุนระดับที่สองสำหรับแพลตฟอร์มเป้าหมาย i586-pc-windows-msvc ได้ถูกลบออกแล้ว ขอแนะนำให้ใช้แพลตฟอร์ม i686-pc-windows-msvc ซึ่งรองรับคำสั่ง SSE2 แพลตฟอร์ม i586-pc-windows-msvc ไม่มีประโยชน์อีกต่อไปแล้ว เนื่องจาก Windows 10 จำเป็นต้องมีการรองรับ SSE2 และเวอร์ชันก่อนหน้า Windows ฟังก์ชันเหล่านี้ไม่รองรับในภาษา Rust

ที่มา: opennet.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster