การเปิดตัวภาษาโปรแกรมระบบ ก่อตั้งโดยโครงการ Mozilla ภาษามุ่งเน้นไปที่การจัดการหน่วยความจำที่ปลอดภัย ให้การจัดการหน่วยความจำอัตโนมัติ และจัดเตรียมวิธีการเพื่อให้บรรลุการทำงานแบบขนานในระดับสูง ในขณะที่หลีกเลี่ยงการใช้ตัวรวบรวมขยะและ .
การจัดการหน่วยความจำอัตโนมัติของ Rust ช่วยให้นักพัฒนาเป็นอิสระจากการจัดการพอยน์เตอร์ และป้องกันปัญหาที่เกิดจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงหน่วยความจำหลังจากว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ null บัฟเฟอร์โอเวอร์รัน และอื่นๆ ที่คล้ายกัน ตัวจัดการแพ็คเกจกำลังได้รับการพัฒนาเพื่อแจกจ่ายไลบรารี ตรวจสอบการประกอบและจัดการการพึ่งพาโดยโปรเจ็กต์ ซึ่งช่วยให้คุณได้รับไลบรารีที่คุณต้องการสำหรับโปรแกรมได้ในคลิกเดียว พื้นที่เก็บข้อมูลได้รับการสนับสนุนให้กับโฮสต์ไลบรารี .
หลัก :
- เพิ่มความสามารถในการทำเครื่องหมายโครงสร้าง (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
