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

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

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

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

  • เพิ่มความสามารถในการทำเครื่องหมายโครงสร้าง (struct) และการแจงนับ (enum ด้วยบล็อก Variant) โดยใช้แอตทริบิวต์ "#[ไม่ครบถ้วนสมบูรณ์]", ที่ ช่วยให้ อนุญาตให้เพิ่มฟิลด์และตัวแปรใหม่ในอนาคตลงในโครงสร้างและการแจงนับที่ประกาศไว้ ตัวอย่างเช่น นักพัฒนาโมดูลที่มีโครงสร้างที่มีฟิลด์ที่ประกาศสาธารณะสามารถใช้ "#[non_exhaustive]" เพื่อทำเครื่องหมายโครงสร้างที่สามารถเพิ่มฟิลด์ใหม่ในอนาคตได้ ก่อนหน้านี้ ในสถานการณ์เช่นนี้ นักพัฒนาจำเป็นต้องเลือกระหว่างการประกาศฟิลด์แบบส่วนตัวและการผูกเข้ากับรายการฟิลด์ที่คงที่ แอตทริบิวต์ใหม่นี้ขจัดข้อจำกัดนี้และอนุญาตให้เพิ่มฟิลด์ใหม่ในอนาคตได้โดยไม่ต้องเสี่ยงต่อการทำลายโค้ดภายนอกที่คอมไพล์ไว้ก่อนหน้านี้ ในแพ็กเกจ crate เมื่อเปรียบเทียบตัวแปรในส่วน "match" จำเป็นต้องใช้มาสก์ "_ => {...}" อย่างชัดเจนเพื่อครอบคลุมฟิลด์ที่อาจเกิดขึ้นในอนาคต มิฉะนั้นจะเกิดข้อผิดพลาดเมื่อเพิ่มฟิลด์ใหม่
  • เพิ่ม ความสามารถในการเรียกใช้แมโครเชิงกระบวนการ mac!() ในบริบทของชนิดข้อมูล ตัวอย่างเช่น ตอนนี้คุณสามารถเขียน "type Foo = expand_to_type!(bar);" ได้ หาก "expand_to_type" เป็นแมโครเชิงกระบวนการ
  • ในบล็อก "ภายนอก { … }" เพิ่ม ความสามารถในการใช้แมโครเชิงขั้นตอนและแอตทริบิวต์ รวมถึงแมโคร "bang!()" ตัวอย่างเช่น:

    กฎแมโคร! make_item { ($name:ident) => { fn $name(); } }

    ภายนอก {
    make_item!(อัลฟา);
    make_item!(เบต้า);
    }

    ภายนอก "C" {
    #[my_identity_macro]
    ฟังก์ชัน foo();
    }

  • ในแมโคร นำไปใช้ ความสามารถในการสร้างองค์ประกอบ "macro_rules!" การสร้าง "macro_rules!" สามารถทำได้ทั้งในแมโครแบบฟังก์ชัน ("mac!()") และในแมโครแบบอิงแอตทริบิวต์ ("#[mac]")
  • ในองค์ประกอบการจับคู่ $m:meta เพิ่ม รองรับค่าการนับโทเค็นตามอำเภอใจ ('[TOKEN_STREAM]', '{TOKEN_STREAM}' และ '(TOKEN_STREAM)') ตัวอย่างเช่น:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • ในโหมด Rust 2015 ขณะนี้ระบบจะเปิดใช้งานการรายงานข้อผิดพลาดสำหรับปัญหาที่ตัวตรวจสอบการยืมตรวจพบโดยใช้เทคนิค NLL (Non-Lexical Lifetimes) ก่อนหน้านี้ คำเตือนจะถูกแทนที่ด้วยข้อผิดพลาดเมื่อใช้งานในโหมด Rust 2018
    หลังจากการเปลี่ยนแปลงได้ขยายไปยังโหมด Rust 2015 ในที่สุดนักพัฒนาก็สามารถทำได้ กำจัด จากเครื่องตรวจสอบการยืมแบบเก่า

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

  • แฟล็ก "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนค่าคงที่ จะถูกนำไปใช้กับฟังก์ชัน is_power_of_two (สำหรับจำนวนเต็มที่ไม่มีเครื่องหมาย)
  • ส่วนใหม่ของ API ได้ถูกย้ายไปยังหมวดหมู่ที่เสถียรแล้ว รวมถึงมาโคร todo!() ที่เสถียรแล้ว และวิธีการ slice::repeat, mem::take, BTreeMap::get_key_value และ HashMap::get_key_value
    ตัวเลือก::as_deref, ตัวเลือก::as_deref_mut, ตัวเลือก::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64}::from_be_bytes, {f32,f64}::from_le_bytes และ {f32,f64}::from_ne_bytes
  • ในตัวจัดการแพ็คเกจสินค้า
    ดำเนินการ คำเตือนของคอมไพเลอร์จะถูกแคชไว้บนดิสก์ คำสั่ง "cargo metadata" ตอนนี้มี "—แพลตฟอร์มตัวกรอง" เพื่อแสดงเฉพาะแพ็กเกจที่เชื่อมโยงกับแพลตฟอร์มเป้าหมายที่ระบุในกราฟการแก้ไขการอ้างอิง มีการเพิ่มพารามิเตอร์การกำหนดค่า http.ssl-version เพื่อกำหนดเวอร์ชัน TLS ที่อนุญาต
    เพิ่มความสามารถในการเผยแพร่ส่วน "การพัฒนาที่ต้องพึ่งพา" โดยไม่ระบุคีย์ "เวอร์ชัน"
  • ขณะนี้คอมไพเลอร์ rustc รองรับระดับ 3 สำหรับแพลตฟอร์มเป้าหมาย ได้แก่ thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 และ mips64el-unknown-linux-muslabi64 ระดับ 3 รองรับขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติหรือบิลด์อย่างเป็นทางการ

ที่มา: opennet.ru

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