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

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

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

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

  • ลักษณะมีเสถียรภาพ อนาคตซึ่งแสดงถึงค่าที่การประเมินอาจยังไม่เสร็จสิ้นในขณะที่ใช้บล็อก async / .await ค่าอะซิงโครนัสที่กำหนดโดยใช้ Future ทำให้สามารถดำเนินงานที่เป็นประโยชน์ในเธรดต่อไปได้ในขณะเดียวกันก็รอการคำนวณค่าที่แน่นอนให้เสร็จสิ้น
  • ห้องสมุดมีความเสถียร จัดสรรซึ่งมีพอยน์เตอร์และคอลเลกชันอัจฉริยะสำหรับจัดการค่าที่จัดสรรหน่วยความจำ การจัดสรรหน่วยความจำใน std ตอนนี้ใช้ประเภท vecซึ่งจะถูกส่งออกอีกครั้งจากการจัดสรร การใช้ alloc แบบแยกกันนั้นสมเหตุสมผลในแอปพลิเคชันที่ไม่เชื่อมโยงกับ std (“#![no_std]”) รวมถึงในไลบรารีที่ออกแบบมาเพื่อใช้ในโปรแกรมที่คล้ายกันโดยไม่มี std;
  • เพื่อข้ามการตรวจสอบการเริ่มต้นค่าที่ถูกต้อง เสนอ ประเภทกลาง บางทียูนิตซึ่งสามารถใช้แทนฟังก์ชัน mem::uninitialized เป็นทางเลือกที่ปลอดภัยกว่า ฟังก์ชัน mem::uninitialized สะดวกสำหรับการสร้างอาร์เรย์อย่างรวดเร็ว แต่จะทำให้คอมไพลเลอร์เข้าใจผิดเนื่องจากดูเหมือนว่าจะเตรียมใช้งานแล้ว แต่ในความเป็นจริงแล้ว ค่ายังคงไม่ได้เตรียมใช้งาน MaybeUninit ช่วยให้คุณสามารถระบุอย่างชัดเจนต่อคอมไพเลอร์ว่าค่าไม่ได้เตรียมใช้งาน โดยคำนึงถึงพฤติกรรมที่ไม่ได้กำหนดที่เป็นไปได้ที่เกี่ยวข้องกับสิ่งนี้ และยังจัดระเบียบการตรวจสอบในโปรแกรมผ่าน "maybe_t:" และการเริ่มต้นทีละขั้นตอน ซึ่งถือเป็นการเสร็จสิ้น โดยใช้การเรียก “.assume_init()” ด้วยการถือกำเนิดของ MaybeUninit ฟังก์ชัน mem::uninitialized ได้เลิกใช้แล้ว และไม่แนะนำให้ใช้
  • เทคนิค NLL (Non-Lexical Lifetimes) ซึ่งขยายระบบสำหรับการบันทึกอายุการใช้งานของตัวแปรที่ยืมมา ได้รับความเสถียรสำหรับภาษา Rust 2015 (เริ่มแรก NLL ได้รับการสนับสนุนโดย Rust 2018 เท่านั้น) แทนที่จะยอมรับอายุการใช้งานที่ระดับคำศัพท์ NLL จะทำที่ระดับชุดพอยน์เตอร์ในกราฟโฟลว์การดำเนินการ วิธีนี้ช่วยให้คุณเพิ่มคุณภาพของการตรวจสอบการยืมตัวแปร (ตัวตรวจสอบการยืม) และอนุญาตให้เรียกใช้โค้ดที่ถูกต้องบางประเภท ซึ่งการใช้ซึ่งก่อนหน้านี้ทำให้เกิดข้อผิดพลาด ลักษณะการทำงานใหม่ยังช่วยให้การดีบักง่ายขึ้นมาก
  • รวมการใช้งานอาเรย์แบบเชื่อมโยงใหม่ด้วย แฮชแมปขึ้นอยู่กับการประยุกต์ใช้โครงสร้าง โต๊ะสวิส (โหลดอัตโนมัติ hashbrown::HashMapเว้นแต่จะระบุไว้เป็นอย่างอื่นอย่างชัดเจน เช่น std::HashMap ซึ่งอิงจาก SipHash 1-3) อินเทอร์เฟซซอฟต์แวร์ยังคงเหมือนเดิมและความแตกต่างที่นักพัฒนาสังเกตเห็นได้ชัดเจนคือประสิทธิภาพที่เพิ่มขึ้นและลดการใช้หน่วยความจำ
  • ในตัวจัดการแพ็คเกจสินค้า เพิ่ม ตัวเลือก “--ออฟไลน์” ซึ่งเปิดใช้งานการทำงานโดยไม่ต้องเข้าถึงเครือข่าย ซึ่งจะใช้เฉพาะแพ็คเกจที่แคชในระบบโลคัลเท่านั้นเมื่อติดตั้งการขึ้นต่อกัน หากการขึ้นต่อกันไม่อยู่ในแคชในเครื่อง ข้อผิดพลาดจะเกิดขึ้น หากต้องการโหลดการขึ้นต่อกันล่วงหน้าลงในแคชในเครื่องก่อนที่จะออฟไลน์ คุณสามารถใช้คำสั่ง “cargo fetch”
  • ใช้ความสามารถในการเรียกมาโคร "dbg!" ระบุข้อโต้แย้งหลายประการ
  • แอตทริบิวต์ "const" ซึ่งกำหนดความเป็นไปได้ของการใช้ในบริบทใดๆ แทนค่าคงที่ ใช้สำหรับวิธีการต่างๆ
    เค้าโครง::from_size_align_unchecked,
    บันทึก::needs_drop,
    NonNull::ห้อยต่องแต่งและ
    ไม่ใช่ค่าว่าง::ส่ง;

  • ส่วนใหม่ของ API ได้ถูกถ่ายโอนไปยังหมวดหมู่ที่เสถียร รวมถึงวิธีการที่ได้รับความเสถียรด้วย
    งาน :: Waker งาน :: โพล
    VecDeque::rotate_left, VecDeque::rotate_right,
    อ่าน::read_vectored, เขียน::write_vectored,
    ตัววนซ้ำ::คัดลอกแล้ว
    BorrowMut (สำหรับสตริง) และ str::as_mut_ptr

ที่มา: opennet.ru

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