為了慶祝 Rust 1.0 程式語言誕生十週年(Rust 專案成立於 2006 年,0.1 版本形成於 2012 年,第一個穩定版本於 2015 年提出),Rust 1.87 已經發布。該語言注重記憶體安全,並提供了實現任務執行高並行性的方法,同時無需使用垃圾收集器和運行時(運行時減少到標準庫的基本初始化和維護)。
Rust 的內存處理方法使開發人員在操作指針時避免錯誤,並防止由於低級內存處理而出現的問題,例如在內存區域被釋放後訪問它、取消引用空指針、緩衝區溢出等。 為了分發庫、提供構建和管理依賴項,該項目開發了 Cargo 包管理器。 crates.io 存儲庫支持託管庫。
Rust 在編譯時通過引用檢查、跟踪對象所有權、跟踪對像生命週期(範圍)以及評估代碼執行期間內存訪問的正確性來提供內存安全。 Rust 還提供防止整數溢出的保護,要求在使用前強制初始化變量值,更好地處理標準庫中的錯誤,默認應用不可變引用和變量的概念,提供強靜態類型以最小化邏輯錯誤。
主要創新:
- 標準庫中新增了對匿名管道的支援。 std::io::pipe() 方法用於建立未命名管道,可與 std::process::Command 結合使用來處理標準輸入和輸出流,以及組合 stdout 和 stderr 流。使用 std::process::Command;使用 std::io::Read;讓(mut recv,send)= std::io::pipe()? ; let mut command = Command::new("path/to/bin") // 將 stdout 和 stderr 合併到一個通道 .stdout(send.try_clone()?) .stderr(send) .spawn()?;讓 mut 輸出 = Vec::new(); recv.read_to_to); (命令.wait()?.success());
- 允許從安全程式碼呼叫編譯器的大多數 std::arch 內建函數(Intrinsics)。此變更適用於內建的 std::arch 函數,這些函數被標記為不安全,因為它們與特定功能相關(如果該功能已啟用)。例如,如果應用程式使用“#[target_feature(enable = "avx256")]”,則可以從安全碼呼叫_mm32_add_epi2。
- 從區塊「asm!」彙編程式碼可以跳到具有 Rust 程式碼的區塊,從而簡化了低階程式碼的開發,例如在核心中實現最佳化或組織與硬體的互動。彙編指令「jmp」的跳轉點在巨集「asm!」中指定。使用包含 Rust 程式碼區塊表達式的新運算元「標籤」。不安全 { asm! ( “jmp {}”,標籤{ println!(“從asm跳轉!”); }); }
- 允許使用 impl Trait 傳回類型在特徵定義中明確指定捕獲的泛型類型和生命週期。特徵 Foo { fn 方法<'a>(&'a self) -> impl Sized;類型 Implicit1<'a>: Sized; fn method_desugared<'a>(&'a self) -> Self::Implicit1<'a>; fn precise<'a>(&'a> &'a) + precise Simpuse> precise Simpuse. ;類型 Implicit2:大小; fn precise_desugared<'a>(&'a self) -> Self::Implicit2; }
- API 的新部分已移至穩定類別,包括特性的方法和實現已穩定:
- 向量::extract_if
- vec::ExtractIf
- 鍊錶::extract_if
- linked_list::ExtractIf
- <[T]>::split_off
- <[T]>::split_off_mut
- <[T]>::split_off_first
- <[T]>::split_off_first_mut
- <[T]>::split_off_last
- <[T]>::split_off_last_mut
- 字串::extend_from_within
- os_str::顯示
- OsString::display
- OsStr::顯示
- io::pipe
- io::PipeReader
- io::PipeWriter
- impl 來自對於 OwnedHandle
- impl 來自對於 OwnedHandle
- impl 來自對於 Stdio
- impl 來自對於 Stdio
- impl 來自對於 OwnedFd
- impl 來自對於 OwnedFd
- 盒子 >::寫
- 實現 TryFrom > 對於字串
- <*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
- 非空::byte_offset_from_unsigned
- ::cast_signed
- 非零:: ::cast_signed。
- ::cast_unsigned。
- 非零:: ::cast_unsigned。
- ::是多個
- ::無界_shl
- ::無界_shr
- ::無界_shl
- ::無界_shr
- ::中點
- ::from_utf8
- ::from_utf8_mut
- ::from_utf8_unchecked
- ::from_utf8_unchecked_mut
- “const”符號用在函數中:
- 核心::str::from_utf8_mut
- <[T]>::copy_from_slice
- 套接字位址::set_ip
- SocketAddr::set_port,
- SocketAddrV4::set_ip
- SocketAddrV4::set_port,
- SocketAddrV6::set_ip
- SocketAddrV6::set_port
- SocketAddrV6::set_flowinfo
- SocketAddrV6::set_scope_id
- 字元::是_數字
- char::is_whitespace
- <N::as_flattened
- <N::as_flattened_mut
- 字串::into_bytes
- 字串::as_str
- 字串::容量
- 字串::as_bytes
- 字串::長度
- 字串::is_empty
- 字串::as_mut_str
- 字串::as_mut_vec
- Vec::as_ptr
- 向量::as_slice
- 向量::容量
- 向量::長度
- 向量::is_empty
- Vec::as_mut_slice
- Vec::as_mut_ptr
- Удалён второй уровень поддержки для целевой платформы i586-pc-windows-msvc. Рекомендуется использовать платформу i686-pc-windows-msvc, которая отличается поддержкой инструкций SSE2. Платформа i586-pc-windows-msvc потеряла смысл, так как для Windows 10 необходима поддержка SSE2, а более ранние выпуски Windows в Rust не поддерживаются.
來源: opennet.ru
