Rust 1.78 已將其捆綁的 LLVM 升級到版本 18,完成了針對 x86-32 和 x86-64 目標的已宣布的 u128/i128 ABI 變更。使用自己的 LLVM 且版本低於 18 的發行商可能仍會面臨該文章中提到的呼叫約定錯誤。Rust 1.78 已將其捆綁的 LLVM 升級到版本 18,完成了針對 x86-32 和 x86-64 目標的已宣布的 u128/i128 ABI 變更。使用自己的 LLVM 且版本低於 18 的發行商可能仍會面臨該文章中提到的呼叫約定錯誤。

Rust 1.78.0:有什麼新功能?

2025/12/08 02:45

Rust 團隊很高興宣布 Rust 的新版本 1.78.0。Rust 是一種程式語言,賦予每個人建立可靠且高效軟體的能力。

\ 如果您已經通過 rustup 安裝了舊版本的 Rust,您可以使用以下命令獲取 1.78.0:

$ rustup update stable

\ 如果您還沒有安裝,可以從我們網站上的相應頁面獲取 rustup,並查看 1.78.0 的詳細發布說明。

\ 如果您想通過測試未來的版本來幫助我們,您可以考慮在本地更新以使用 Beta 通道(rustup default beta)或 Nightly 通道(rustup default nightly)。請報告您可能遇到的任何錯誤!

1.78.0 穩定版中的新功能

診斷屬性

Rust 現在支援 #[diagnostic] 屬性命名空間來影響編譯器錯誤訊息。這些被視為提示,編譯器不必須使用它們,提供編譯器無法識別的診斷也不會被視為錯誤。這種靈活性允許原始碼提供診斷,即使它們不被所有編譯器支援,無論是不同版本還是完全不同的實現。

\ 隨著這個命名空間的出現,第一個支援的屬性是 #[diagnostic::on_unimplemented],它可以放在特徵上,以自定義當該特徵被要求但尚未在類型上實現時的訊息。考慮穩定化拉取請求中給出的例子:

#[diagnostic::on_unimplemented( message = "My Message for `ImportantTrait<{A}>` is not implemented for `{Self}`", label = "My Label", note = "Note 1", note = "Note 2" )] trait ImportantTrait<A> {} fn use_my_trait(_: impl ImportantTrait<i32>) {} fn main() { use_my_trait(String::new()); }

\ 以前,編譯器會給出這樣的內建錯誤:

error[E0277]: the trait bound `String: ImportantTrait<i32>` is not satisfied --> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ------------ ^^^^^^^^^^^^^ the trait `ImportantTrait<i32>` is not implemented for `String` | | | required by a bound introduced by this call |

\ 使用 #[diagnostic::on_unimplemented] 後,其自定義訊息填充主要錯誤行,其自定義標籤放置在源輸出上。原始標籤仍作為幫助輸出寫入,任何自定義註釋也會被寫入。(這些確切細節可能會有所變化。)

error[E0277]: My Message for `ImportantTrait<i32>` is not implemented for `String` --> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ------------ ^^^^^^^^^^^^^ My Label | | | required by a bound introduced by this call | = help: the trait `ImportantTrait<i32>` is not implemented for `String` = note: Note 1 = note: Note 2

\ 對於特徵作者來說,如果您能提供比僅僅談論缺失的實現本身更好的提示,這種診斷會更有用。例如,這是標準庫中的一個簡化示例:

#[diagnostic::on_unimplemented( message = "the size for values of type `{Self}` cannot be known at compilation time", label = "doesn't have a size known at compile-time" )] pub trait Sized {}

\ 有關更多信息,請參閱參考部分中關於 diagnostic 工具屬性命名空間的內容。

斷言 unsafe 前提條件

Rust 標準庫有許多用於 unsafe 函數前提條件的斷言,但歷史上它們只在標準庫的 #[cfg(debug_assertions)] 構建中啟用,以避免影響發布版本的性能。然而,由於標準庫通常以發布模式編譯和分發,大多數 Rust 開發者根本沒有執行這些檢查。

\ 現在,這些斷言的條件延遲到代碼生成時,因此它們將根據用戶自己的調試斷言設置進行檢查——在調試和測試構建中默認啟用。這一變更幫助用戶捕捉代碼中的未定義行為,儘管檢查的具體細節通常不穩定。

\ 例如,slice::from_raw_parts 需要一個對齊的非空指針。以下故意使用未對齊指針的行為是未定義的,雖然如果您不幸的話,過去它可能看起來是"有效的",但現在調試斷言可以捕捉到它:

fn main() { let slice: &[u8] = &[1, 2, 3, 4, 5]; let ptr = slice.as_ptr(); // Create an offset from `ptr` that will always be one off from `u16`'s correct alignment let i = usize::from(ptr as usize & 1 == 0); let slice16: &[u16] = unsafe { std::slice::from_raw_parts(ptr.add(i).cast::<u16>(), 2) }; dbg!(slice16); } thread 'main' panicked at library/core/src/panicking.rs:220:5: unsafe precondition(s) violated: slice::from_raw_parts requires the pointer to be aligned and non-null, and the total size of the slice not to exceed `isize::MAX` note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace thread caused non-unwinding panic. aborting.

確定性重對齊

標準庫有一些改變指針和切片對齊方式的函數,但它們以前有一些使它們在實踐中難以依賴的注意事項,如果您嚴格按照它們的文檔。這些注意事項主要是為了防範 const 評估,但它們無論如何只對非 const 使用穩定。現在它們承諾根據實際輸入具有一致的運行時行為。

  • pointer::align_offset 計算將指針更改為給定對齊所需的偏移量。如果不可能,它返回 usize::MAX,但以前允許它始終返回 usize::MAX,現在這種行為已被移除。
  • slice::align_toslice::align_to_mut 都將切片轉換為對齊的中間切片以及剩餘的未對齊頭尾切片。這些方法現在承諾返回最大可能的中間部分,而不是允許實現返回不那麼理想的結果,比如將所有內容作為頭切片返回。

穩定的 API

  • impl Read for &Stdin
  • 接受非 'static 生命週期用於幾個 std::error::Error 相關實現
  • 使 impl<Fd: AsFd> 實現接受 ?Sized
  • impl From<TryReserveError> for io::Error

\ 這些 API 現在在常量上下文中穩定:

  • Barrier::new()

兼容性說明

  • 如先前宣布的,Rust 1.78 已將以下目標的最低要求提高到了 Windows 10:
  • x86_64-pc-windows-msvc
  • i686-pc-windows-msvc
  • x86_64-pc-windows-gnu
  • i686-pc-windows-gnu
  • x86_64-pc-windows-gnullvm
  • i686-pc-windows-gnullvm
  • Rust 1.78 已將其捆綁的 LLVM 升級到版本 18,完成了宣布的 x86-32 和 x86-64 目標的 u128/i128 ABI 變更。使用自己的 LLVM 且版本低於 18 的發行版可能仍會面臨該文章中提到的調用約定錯誤。

其他變更

查看 Rust、Cargo 和 Clippy 中的所有變更。

1.78.0 的貢獻者

許多人共同創造了 Rust 1.78.0。沒有你們所有人,我們無法做到這一點。謝謝!


Rust 發布團隊

\ 也發布於此處

\ 照片由 Ubaid E. Alyafizi 在 Unsplash 上提供

免責聲明: 本網站轉載的文章均來源於公開平台,僅供參考。這些文章不代表 MEXC 的觀點或意見。所有版權歸原作者所有。如果您認為任何轉載文章侵犯了第三方權利,請聯絡 [email protected] 以便將其刪除。MEXC 不對轉載文章的及時性、準確性或完整性作出任何陳述或保證,並且不對基於此類內容所採取的任何行動或決定承擔責任。轉載材料僅供參考,不構成任何商業、金融、法律和/或稅務決策的建議、認可或依據。

您可能也會喜歡

台灣愛滋防治新進展!友善醫療環境助力三零願景

台灣愛滋防治新進展!友善醫療環境助力三零願景

台灣愛滋防治成果再創佳績,醫事人員照護意願高達94.9%,但標準防護認知仍存落差。台灣愛滋病學會與台灣愛滋病護 […] The post 台灣愛滋防治新進展!友善醫療環境助力三零願景 first appeared on 立報傳媒.
分享
Limedia2025/12/09 09:11
台南安平無菜單餐廳推薦 板前壽司料理體驗 日式職人靜謐日常

台南安平無菜單餐廳推薦 板前壽司料理體驗 日式職人靜謐日常

美食中心/綜合報導 台南安平板前料理:靜巷裡的職人饗宴 日本空運食材 隱身於台南安平靜巷中的睦月堂日本料理,以 […] 這篇文章 台南安平無菜單餐廳推薦 板前壽司料理體驗 日式職人靜謐日常 最早出現於 民生頭條。
分享
Lifetoutiao2025/12/09 08:48
黃仁勳沒在客氣!NVIDIA 傳獨家包下台積電 A16 製程,蘋果竟然選擇跳過?

黃仁勳沒在客氣!NVIDIA 傳獨家包下台積電 A16 製程,蘋果竟然選擇跳過?

NVIDIA 搶先採用台積電 A16 製程,打造 2028 年 Feynman 系列 GPU,鞏固 AI 霸主地位。A16 製程專為高效能運算設計,助力 NVIDIA 在 AI 領域持續領先。AI 霸主 NVIDIA 為了維持算力領先,再度出手搶佔先進製程產能。根據供應鏈消息指出,NVIDIA 已確認成為台積電 A16 製程節點的首位、也是目前「唯一」的客戶。這項專為高效能運算(HPC)量身打造的技術,預計將用於 NVIDIA 2028 年推出的殺手級產品——「Feynman」(費曼)系列 GPU 。 A16 製程強在哪?專為 AI 打造的神兵利器 台積電的 A16 製程可說是下一個世代的技術指標。它採用了奈米片(Nanosheet)電晶體結構,並首度導入超級電軌(Super Power Rail, SPR)背面供電技術 。簡單來說,這項技術能讓晶片在塞入更多電晶體的同時,還能解決供電不穩與散熱問題。 根據數據顯示,A16 相較於 N2P 製程,運算速度提升了 8% 至 10%,功耗卻降低了 15% 至 20%,邏輯密度也提高了 7% 至 10% 。由於技術複雜且成本高昂,初期產量有限,主要由 NVIDIA 率先進行試產 。 蘋果為何不跟?兩大陣營策略大不同 有趣的是,長期佔據台積電先進製程首發名單的蘋果(Apple),這次似乎有不同打算。據悉,蘋果在進入 2nm 時代後,將選擇跳過 A16 製程,直接放眼更先進的 A14 製程 。這顯示出蘋果與 NVIDIA 在產品迭代節奏上的差異,NVIDIA 更急需針對 AI 伺服器優化的製程技術。 台積電先進製程客戶策略對比:NVIDIA vs. Apple 比較項目 NVIDIA (輝達) Apple (蘋果) A16 製程策略   獨家採用 / 首發客戶   跳過 目標產品 Feynman 系列 GPU (2028 年)    M 系列 / A 系列晶片 (推測直攻 A14) 製程需求重點 AI 加速、HPC 高效能運算、散熱 (背面供電) 行動裝置功耗平衡、成本效益 近期主力製程 3nm (Rubin 系列)、A16 (Feynman 系列) 3nm (M3/M4/A17/A18)、2nm (預期)   黃仁勳的四年藍圖:Blackwell 只是開始 NVIDIA 執行長黃仁勳在 GTC 2025 大會上,大方公開了未來四年的 AI GPU 發展藍圖,展現了驚人的更新速度 : 2025 年:Blackwell Ultra 2026 年:Rubin(採用台積電 3nm ) 2027 年:Rubin Ultra 2028 年:Feynman(採用台積電 A16 ) 這款以物理學家費曼命名的 GPU,被視為繼 Blackwell 架構後最具突破性的產品,將成為 NVIDIA 鞏固 AI 王朝的核心戰略武器 。為了配合這張藍圖,台積電高雄 P3 廠預計將於 2027 年開始大規模量產 A16 製程,全力支援 NVIDIA 的產能需求 。   延伸閱讀:HBM4E 將迎來客製化時代,台積電祭出 N3P 製程打造最強基礎裸晶 延伸閱讀:日本 Rapidus 要挑戰台積電?2027 年蓋 1.4 奈米晶圓廠,目標 2029 投產 延伸閱讀:英特爾CEO駁斥「挖角洩密」傳聞:我們尊重台積電的IP權益  加入T客邦Facebook粉絲團
分享
Techbang2025/12/09 08:30