[Tempest AI News] 技術新聞精華 (2026-04-09)

本期 AI 技術新聞聚焦於 Anthropic 的重大模型發佈與資安風暴,以及 MCP (Model Context Protocol) 生態系的爆炸式增長。從強大的漏洞挖掘模型到開源平台的嚴重 RCE 漏洞,AI 代理的權限管理與安全性正成為開發者關注的焦點。

🚀 重大模型與企業動態

  • Anthropic 推出 Claude Mythos 與 Project Glasswing:發表前沿模型 Claude Mythos,展現極強的資安漏洞挖掘能力,在預覽階段即發現數千個作業系統與瀏覽器的零日漏洞(Zero-day)。由於能力過強,目前僅限於 Project Glasswing 計畫中的少數合作夥伴(如 Apple, Microsoft, Cisco)用於防禦性掃描,暫不對公眾開放。[https://ift.tt/FxJiTH1] / [https://ift.tt/LXoZcFg]
  • Anthropic 營收爆發與算力聯盟:年化營收運行率從 2025 年底的 90 億美元飆升至 300 億美元。為確保長期算力,Anthropic 已與 Google 及博通(Broadcom)建立策略聯盟共同打造 ASIC 晶片。[https://ift.tt/b9rzCEL] / [https://ift.tt/6S1quIp]
  • Claude Managed Agents 公測:提供可組合的 API 套件,旨在降低企業構建與部署雲端托管代理的門檻,將 AI 應用從單一對話轉向複雜的自動化工作流。[https://ift.tt/ObTeGSj]

🛡️ 資安警訊與漏洞分析

  • Flowise 爆發嚴重 RCE 漏洞 (CVE-2025-59528):知名開源 AI 工作流平台 Flowise 的自定義 MCP 節點存在設計缺陷,允許攻擊者執行任意程式碼 (RCE),CVSS 評分達 10 分,影響全球超過 12,000 個實例,官方促請立即更新。[https://ift.tt/Q5v7uGI] / [https://ift.tt/cZ62NVf]
  • Claude Code 原始碼大規模洩漏:由於 npm 套件發布錯誤,約 51 萬行核心源碼意外洩漏,引發對 AI 供應鏈安全的討論。部分駭客已利用此事件分發偽裝成「洩漏工具」的惡意軟體,提醒使用者謹慎下載。[https://ift.tt/ym8UVzg] / [https://ift.tt/8QkSpXO]
  • MCP 伺服器安全性危機:研究發現高達 43% 至 92% 的開源 MCP 伺服器存在指令注入或路徑遍歷漏洞,可能導致 AI 代理讀取 SSH 金鑰或成為生產環境的後門,亟需導入嚴格的運行時安全措施。[https://ift.tt/CkPyAoz] / [https://ift.tt/ysqf2uI]

🛠️ 開發工具與 MCP 生態

  • MCP (Model Context Protocol) 持續擴展:新伺服器湧現,包括針對 Android 遙控 (v1.7.0)、SQL 資料庫安全訪問、JADX APK 分析、以及 Jenkins 自動化部署。Google 亦推出 WebMCP,旨在以結構化方式提升網站對 AI 代理的友善度。[https://ift.tt/Gizroeu] / [https://ift.tt/0ojW47L] / [https://ift.tt/TU8NeEL]
  • Claude Code 進階實踐:開發者分享利用 Markdown 打造個人知識庫、實現零停機資料庫遷移,以及開發 local-plan-viewer 插件以追蹤 AI 思考路徑。同時,針對權限管理,Waymark 等工具被用於攔截危險指令(如 rm -rf)。[https://ift.tt/psRuV9P] / [https://ift.tt/co5uPlF]
  • GitHub Copilot SDK 公開預覽:支援五種主流語言,允許開發者將 Copilot 能力整合進自定義工作流,標誌著從 IDE 插件向基礎設施級工具轉型。[https://ift.tt/CE9sG4F]

🤔 技術反思:Vibe Coding 的興衰

  • 從「氛圍編碼」轉向「規格優先」:社群對 Vibe Coding(憑感覺寫碼)的反思達到頂峰。雖然原型開發極快,但缺乏結構化設計會導致嚴重的「AI 技術債」與安全性風險。工程師呼籲回歸規格驅動開發 (Spec-Driven Development),強調嚴謹的程式碼審查 (Diff Review) 與數學證明般的正確性驗證。[https://ift.tt/kHprlGu] / [https://ift.tt/ioaEf3R]

[Tempest AI News] 技術新聞精華 (2026-04-07)

🚀 Model Context Protocol (MCP) 生態大爆發

  • 協議標準化與快速成長:MCP 已突破 10,000 個伺服器,成為 AI Agent 整合外部工具(DB, Cloud, DevTools)的標準,甚至實現將 AI Agent 轉化為「On-Call 工程師」自動處理生產環境事故。[https://ift.tt/6hkY5eK]
  • 企業級與雲端整合:Microsoft Azure Functions 正式支援 MCP 資源觸發器 (Resource Triggers),讓開發者能直接從雲端函數暴露 MCP 資源。[https://ift.tt/6C8PyZz]
  • 高效開發實踐:出現能跨 17 個資料庫、994 張表的 DB Graph MCP,實現安全且跨 schema 的複雜查詢。[https://ift.tt/eD94yoh]
  • 跨工具鏈連動:Figma 與 VS Code 透過 MCP 實現設計稿直接連動開發環境,大幅縮短 Design-to-Code 迭代週期。[https://ift.tt/noehsI6cAEc]

🤖 Claude Code:從效能退化到源碼洩漏

  • 效能驟降爭議 (Regression):AMD AI 總監透過 7,000 場 session 數據證明,Claude Code 在 2026 年 3 月後思考深度下降 67%,主因是 Anthropic 對思考內容 (Thinking Content) 進行截斷處理,導致模型減少閱讀檔案並增加盲目重寫。[https://ift.tt/Wabh09e][https://ift.tt/0EiVe1n][https://ift.tt/jXRUOgA]
  • 大規模源碼洩漏事件:Anthropic 意外洩漏約 51 萬行 TypeScript 源碼(含 .map 檔),導致其內部對話管理與 Context 視窗處理機制被社群徹底分析,並發現 44 個隱藏功能(如 /buddy 指令)。[https://ift.tt/mOQdATi][https://ift.tt/QYNgir4][https://ift.tt/oEZuGBy]
  • 社群反擊與替代方案:開發者利用洩漏源碼推出 OpenClaude,可對接 DeepSeek, Gemini 等任意 LLM;另有社群釋出 Bash 腳本 patch 修正模型「走捷徑」的懶惰行為。[https://ift.tt/IFGPxB0][https://gist.github.com/roman01la/483d1db15043018096ac3babf5688881]
  • 記憶力強化方案:針對 session 缺乏持久化記憶的痛點,社群開發出 `Alaz` (Rust 實作) 與 `Engram` 等第三方記憶層。[https://ift.tt/HuKfFWi]

🛡️ AI 安全與資安攻防 (Project Glasswing)

  • Mythos 模型與 0-day 威脅:Anthropic 推出強大的 `Mythos` 模型,能大規模發現關鍵零日漏洞,因風險過高禁止公開發布。[https://ift.tt/VZxYt7U]
  • Project Glasswing 聯盟:Anthropic 聯合 Apple, Google, Microsoft, Nvidia 成立資安計畫,利用 Mythos 模型協助修補關鍵基礎設施漏洞,防止 AI 被用於自動化攻擊。[https://ift.tt/aoYuTjh]
  • MCP 供應鏈風險:MCP Java SDK 出現 DNS Rebinding 漏洞 (CVE-2026-35568);同時警示安裝未知 MCP 伺服器可能帶來後門風險,建議使用 OreWatch 等掃描器進行審計。[https://ift.tt/G04NysC][https://ift.tt/ehHtkcF]

💻 Agentic Engineering 與開發趨勢

  • GitHub Copilot CLI 進化:引入 “Rubber Duck” 雙模型審核機制以減少幻覺,並支援 `/fleet` 並行多代理執行,可同時處理 codebase 不同部分。[https://ift.tt/IDRJ1PK][https://ift.tt/P0gZzcX]
  • Vibe Coding 爭議:AI 生成 App 數量激增導致 Apple 嚴厲打擊;BitTorrent 創始人 Bram Cohen 批評此趨勢為「危險的狂熱」,認為缺乏 PDR 指引的 AI 代碼是定時炸彈。[https://ift.tt/tmiF0fu][https://ift.tt/MRH1lVo][https://ift.tt/xhLjM4a]
  • 本地化 Agent 趨勢:開發者開始使用 Gemma 4 或 Qwen 透過 Python Proxy 在本地運行 Claude Code 邏輯,以規避 API 限制並提升隱私。[https://ift.tt/1svrCfk]

💰 算力基礎設施與財務壓力

  • 天文數字的支出:OpenAI 預計 2028 年算力支出將達 1,210 億美元;Anthropic 年化收入雖突破 300 億美元,但仍面臨巨大的算力成本危機。[https://ift.tt/enLSsQZ][https://ift.tt/qKeLU8J]
  • 算力戰略協議:Anthropic 與 Google、Broadcom 達成多吉瓦 (GW) 級別的 TPU 算力協議,以確保 2027 年起可用之次世代算力資源。[https://ift.tt/2uwTxcj]

[Tempest Rust Daily] 技術情報精華 (2026-02-27) – 深度完整版

今日技術亮點精選

🛠️ 系統工具與擴充 (Tools & Extensions)

  • A faster fuck (thefuck CLI rewritten in Rust)
    知名工具 thefuck 的 Rust 重製版。啟動速度從原來的 500ms 大幅縮減至 15ms(50倍提升),校正速度也提升了超過 2 倍。適合追求極致終端機反應速度的開發者。
    (查看原文)
  • pg_stream: PostgreSQL 18 的增量視圖維護擴充
    基於 Rust 與 pgrx 開發的 PostgreSQL 18 擴充功能。它利用 DVM (Differential View Maintenance) 引擎與 DBSP 框架,自動維護物化視圖,無需額外的串流基礎設施。支援複雜的 SQL 語法如 JOIN、GROUP BY 與窗口函數。
    (查看原文)

🔍 研究與安全性 (Research & Safety)

  • Scylla: 將 C 語言子集編譯為安全 Rust
    arXiv 最新研究成果。不同於傳統工具產生 unsafe Rust,Scylla 透過靜態分析(包括「分割樹」分析 指針運算)與類型導向翻譯,引導開發者將 C 代碼重構成可編譯為「純安全 Rust」的結構。已在密碼學庫與二進位解析器中驗證性能。
    (查看原文)
  • NDSS 2025: C 轉 Rust 的用戶研究報告
    來自新加坡國立大學的研究。分析了人類開發者將 C 翻譯為 Rust 的策略,發現人類能夠產生安全的 Rust 翻譯,而目前的自動化工具尚無法企及。研究強調了零成本抽象在時間安全性上的重要性。
    (查看原文)
  • Rust Unsafe 的形式化方法 (Formal Methods)
    來自 Antithesis 的分享。介紹了如何在單執行緒 C++ 與多執行緒 Rust 組件之間建立安全的橋接框架,並利用形式化方法確保 SendWrapper 等原始類型的執行安全性。
    (查看原文)

🧠 人工智慧與生產力 (AI & Production)

  • hierarchical RAG (PageIndex) 移植至 Rust
    針對結構化文件(如財務報表、法律文件)的 RAG 庫。放棄了傳統的「語義碎片化」chunking 方式,改以文件標題結構作為檢索基準,並使用 Rust 重寫以提升效能與穩定性。
    (查看原文)
  • Rust Production Toolbox (Part 1/6): 效能調優指南
    Medium 上的深度系列文章。第一部分專注於真正能對生產環境效能產生重大影響的「性能寶石」,旨在幫助開發者撰寫高性能的 Rust 代碼而非僅僅是「能跑」。
    (查看原文)

📺 學習資源 (Learning)

  • 嵌入式 Rust 入門 Part 6: 泛型與 Trait
    DigiKey 推出的系列教學。深入探討 Rust 在嵌入式環境中的泛型應用與 Monomorphization(單態化)機制,展示如何利用 Trait 建立抽象邊界並達到零成本運行開銷。
    (查看原文)

[Tempest Rust Daily] 技術情報摘要 (2026-02-16)

1. Zenith OS: 基於 Rust 的 AI 原生作業系統架構實驗

開發者展示了一個名為 Zenith OS 的新型作業系統模擬器。這並非傳統的引導內核,而是透過 Rust 開發的系統架構原型,核心亮點在於「AI 驅動的排程器」與「零信任安全架構」。

  • AI 排程器:根據進程意圖動態分配資源(如優先處理即時視訊)。
  • 能力導向安全 (Capability-based security):捨棄傳統 root/sudo 權限,改用顯式權杖進行資源存取存取。
  • 沙盒化模組:利用 Rust 型別系統強制執行 API 邊界。
  • 閱讀全文與討論

2. pstop: 為 Windows PowerShell 打造的 Rust 版 htop

如果你在 Windows 環境渴望原生的高效能終端機監控工具,pstop 正是你的救星。它不需依賴 WSL 或 Cygwin,採用純 Rust 編寫並直接呼叫 Win32 API。

  • 功能豐富:支援多核心 CPU 圖表、記憶體視圖、網路吞吐量監測及進程樹狀圖。
  • 效能極限:編譯後的執行檔僅約 1 MB,支援 50ms 高頻率事件輪詢。
  • 技術棧:使用 ratatui 提供 TUI 介面,sysinfo 抓取系統數據。
  • GitHub 專案連結

3. Rust 悖論:為何「最受喜愛」的語言卻被認為「極其無趣」?

這篇文章深入剖析了 Rust 連續十年蟬聯 Stack Overflow 調查冠軍背後的心理現象。作者認為 Rust 的嚴謹雖然增加了開發者的心理負擔,但也因為其安全性與一致性,讓工程師能專注於業務邏輯而非底層除錯。

  • 核心觀點:Rust 透過強大的編譯器檢查將錯誤消滅於正式上線前,雖然過程「枯燥」,卻保證了系統的穩定性。
  • 原文連結 (Medium)

4. 後端工程師轉向 Rust 的實戰經驗分享

作者分享了將後端服務從原有機制遷移至 Rust 的理由與過程。文章探討了 Rust 在處理高併發服務與降低記憶體足跡方面的顯著優勢,這也解釋了為何 Rust 逐漸成為現代後端架構的主流選擇。

Rust 日報 – 2025 年 6 月 8 日

本期的 Rust 資訊日報為您帶來最新的語言版本更新、套件管理改進以及關於學習和語言標準的討論。

Rust 1.84.0 版本發布

Rust 團隊很高興地宣布 Rust 的新版本 1.84.0 已經發布。Rust 是一門賦予每個人構建可靠且高效軟體能力的程式語言。

如果您之前已經通過 rustup 安裝了 Rust,可以使用 $ rustup update stable 命令更新到 1.84.0 版本。完整的 1.84.0 版本詳細發布說明可在官方網站找到。

https://ift.tt/OA7YCJt

Cargo 支援根據 Rust 版本進行依賴項選擇

1.84.0 版本穩定了一項稱為 最低支援 Rust 版本 (MSRV) 感知解析器 的功能。這個解析器會優先選擇與專案宣告的 MSRV 相容的依賴項版本。通過 MSRV 感知版本選擇,維護者支援舊工具鏈的工作量減少了,因為他們不再需要手動為每個依賴項選擇舊版本。這項功能可以讓程式庫作者在決定採用新 Rust 工具鏈功能的政策時具有更大的靈活性。

您可以通過在 .cargo/config.toml 中設定來選擇啟用 MSRV 感知解析器:

[resolver]
incompatible-rust-versions = "fallback"

啟用後,當添加依賴項時,Cargo 會考慮您的 MSRV。例如,添加 clap 時,如果您的 MSRV 是 1.60,它會添加 4.0.32 版本,即使最新版本是 4.5.23 (需要 Rust 1.74)。在 CI 中驗證最新依賴項時,您可以使用 CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=allow cargo update 命令來覆蓋此設定。

您也可以通過在 Cargo.toml 清單檔案中設定 package.resolver = "3" 來選擇啟用此功能,這需要將您的 MSRV 提高到 1.84。新的解析器對於使用 2024 Edition 的專案將預設啟用,該版本將在 1.85 版本中穩定。

https://ift.tt/OA7YCJt

新的 Trait 解析器開始遷移

Rust 編譯器正在遷移到一個新的 Trait 解析器實現。這個下一代的 Trait 解析器是 Rust 類型系統核心組件的重新實現。它不僅負責檢查 Trait 約束(例如 Vec<T>: Clone)是否成立,還被類型系統的許多其他部分使用,例如正規化(找出 <Vec<T> as IntoIterator>::Item 的底層類型)和比較類型(檢查 T 和 U 是否相同)。

在 1.84 版本中,新的解析器被用於檢查 Trait impls 的一致性 (coherence)。從高層面來看,一致性負責確保對於給定類型,考慮到尚未編寫或在其他 crate 中不可見的程式碼,最多只有一個 Trait 的實現。

這次穩定解決了舊實現的一些主要是理論上的正確性問題,可能導致之前未報告的潛在「Trait 實現衝突…」錯誤。團隊預計受影響的模式非常罕見。這次穩定也提高了證明 impls 不重疊的能力,在某些情況下允許編寫更多程式碼。

https://ift.tt/OA7YCJt

嚴格的 Provenance API

在 Rust 中,指標不僅僅是一個「整數」或「地址」。指標具有 provenance:要完全描述 Rust 中與指標相關的未定義行為,我們不僅要知道指標指向的地址,還要追蹤它是從哪個或哪些其他指標「派生」而來的。

大多數時候,程式設計師不需要太擔心 provenance。然而,當將指標轉換為整數再轉回來時,結果指標的 provenance 是未指定的。通過此版本,Rust 添加了一套 API,在許多情況下可以取代整數-指標轉換的使用,從而避免此類轉換固有的模糊性。

這些 API 使得諸如使用對齊指標的最低位元儲存額外資訊的模式可以在不將指標轉換為整數或轉回的情況下實現。這使得程式碼更容易理解、更容易被編譯器分析,同時也惠及 Miri 和 CHERI 等旨在偵測和診斷指標誤用的工具。

https://ift.tt/OA7YCJt

穩定化的 API

  • Ipv6Addr::is_unique_local
  • Ipv6Addr::is_unicast_link_local
  • core::ptr::with_exposed_provenance
  • core::ptr::with_exposed_provenance_mut
  • <ptr>::addr
  • <ptr>::expose_provenance
  • <ptr>::with_addr
  • <ptr>::map_addr
  • <int>::isqrt
  • <int>::checked_isqrt
  • <uint>::isqrt
  • NonZero::isqrt
  • core::ptr::without_provenance
  • core::ptr::without_provenance_mut
  • core::ptr::dangling
  • core::ptr::dangling_mut
  • Pin::as_deref_mut

以下 API 現在在 const 上下文中穩定:

  • AtomicBool::from_ptr
  • AtomicPtr::from_ptr
  • AtomicU8::from_ptr
  • AtomicU16::from_ptr
  • AtomicU32::from_ptr
  • AtomicU64::from_ptr
  • AtomicUsize::from_ptr
  • AtomicI8::from_ptr
  • AtomicI16::from_ptr
  • AtomicI32::from_ptr
  • AtomicI64::from_ptr
  • AtomicIsize::from_ptr
  • <ptr>::is_null
  • <ptr>::as_ref
  • <ptr>::as_mut
  • Pin::new
  • Pin::new_unchecked
  • Pin::get_ref
  • Pin::into_ref
  • Pin::get_mut
  • Pin::get_unchecked_mut
  • Pin::static_ref
  • Pin::static_mut

https://ift.tt/OA7YCJt

GNU Guix 的新 Rust 套件模型

如果您曾經在 Rust 套件方面遇到困難,這裡有一些好消息!GNU Guix 已經改變為一個簡化的 Rust 套件模型,它更容易自動化 並允許同時修改、替換和刪除依賴項。新模型將顯著減少 Rust 套件的時間,並有助於提高套件的可用性和品質。

這些更改目前位於 rust-team 分支上,計劃在未來幾周內合併。將現有的 Rust 套件集合(150 多個應用程式和 3600 多個依賴項程式庫)遷移只花了一個人兩周的時間。

https://ift.tt/yKEUx5a

背景與舊模型的挑戰

先前 Guix 中 Rust 的套件模型採用傳統方法,將每個應用程式和程式庫同等對待。這個模型的一個 crate (Rust 套件) 對應一個 Guix 套件。這看似合理,但存在根本性的不匹配:Guix 套件旨在獨立編譯,而 Rust 應用程式旨在作為一個單元與其所有依賴項(遞歸地)一起編譯。這種不匹配意味著 Guix 會獨立構建每個 crate,但該構建輸出完全無用。

舊模型帶來了諸多問題:

  • 套件和維護困難:由於程式庫數量龐大而人手有限,而且無法重用已套件化的程式庫,導致套件體驗不順暢。
  • 使用者界面混亂:數千個使用者無法使用的 Rust 程式庫出現在搜尋結果中。
  • 套件界面不一致:Guix 的依賴項模型無法完美對應 Rust 的,並可能出現循環依賴。為了解決這個問題,引入了 #:cargo-inputs 和 #:cargo-development-inputs 構建系統參數來指定 Rust 程式庫,而不是常規的 propagated-inputs 和 native-inputs。

https://ift.tt/yKEUx5a

新模型的核心理念

新模型轉而關注定義 crate 的 origins,實際構建只發生在依賴關係圖的「葉子」(Rust 應用程式)上。由於使用者無法使用 Guix 套件的 Rust 程式庫,因此沒有理由堅持傳統方法。程式庫可以從使用者界面隱藏起來,並且不需要使用者面向的文檔。

https://ift.tt/yKEUx5a

實施細節與變動

  • Importer:guix import crate 將支援使用新的 --lockfile / -f 選項從 Cargo.lock 導入。現有的 crates.io importer 將被修改,不再支援導入依賴項。一個新的程序 cargo-inputs-from-lock-file 將被添加,用於 Rust 專案的 guix.scm 中。
  • Build system:cargo-build-system 將支援目錄輸入和 Cargo 工作區。一個新的構建階段 check-for-pregenerated-files 將掃描所有解壓的源碼並印出非空的二進位檔案。不再接受使用舊的套件方法 ( #:cargo-inputs 和 #:cargo-development-inputs) 的貢獻。對舊方法的支援已被棄用,並將於 2026 年 12 月 31 日之後移除。
  • Packages:Rust 程式庫將儲存在兩個新的模組中,並會從使用者界面中隱藏起來:(gnu packages rust-sources) (需要構建過程或複雜修改的程式庫) 和 (gnu packages rust-crates) (使用 lockfile importer 導入的程式庫)。定義在 rust-crates 模組中的程式庫可以通過 snippets 和 patches 進行修改,通過改變其定義指向其他變數來替換,或通過將其定義改為 #f 來移除。
  • 所有其他程式庫 (目前在 (gnu packages crates-...) 中的程式庫) 將被移至外部通道。

這個新方法使得自動化和手動介入得以並存。導入器會輸出包含完整版本的定義,跳過現有定義,並維護一個 identifier -> libraries 的映射以及一個處理對程式庫修改的訪問接口。這種緊湊的源碼定義使得 Rust 程式庫的定義從 153k 行減少到 42k 行。

https://ift.tt/yKEUx5a

未來步驟

這個模型的一個問題是所有程式庫都儲存和引用在一個模組中,使得合併衝突更難解決。正在考慮創建一個獨立的倉庫來管理這個模組,並可能在那裡儲存依賴規範和 lockfiles,以使套件過程更透明並允許自動更新依賴程式庫。

https://ift.tt/yKEUx5a

關於學習 Rust 的討論:是否需要先學 C?

有人提出支持一個觀點:不需要先學習 C 來欣賞 Rust。Rust 的存在理由可以說是在可以使用 C 的情況下提供一種語言,同時避免在 C 中容易發生的記憶體誤用錯誤。也就是說,借用檢查器 (borrow checker) 是其獨特的賣點。

一個最簡單的記憶體使用錯誤範例在 C 中涉及返回指向本地變數的指標,這是一個典型的隱蔽錯誤。現代 C 編譯器會警告此問題,但在某些情況下甚至連警告都不會出現。

https://ift.tt/DL81SBI

Rust 中的對應範例

在 Rust 中,類似的範例無法編譯,會出現錯誤「returns a reference to data owned by the current function」(返回對當前函數擁有的數據的引用)。儘管兩個例子看起來幾乎一樣,但 Rust 的借用檢查器阻止了這種錯誤。

https://ift.tt/DL81SBI

探索「Crust」和原始指標

一個建議是,如果堅持「從 C 開始」的方法,可以向學習者展示「Crust」:使用原始指標的 Rust 程式碼,這看起來幾乎與 C 版本完全一樣。然而,這需要使用 unsafe 塊來解引用原始指標,使用 unsafe 的原因會很快變得明顯。

有趣的是,Rust 可以構建並運行帶有原始指標的 unsafe 程式碼而沒有錯誤或警告,會產生錯誤的結果。使用 cargo miri run 運行此程式碼會得到一個帶有詳細解釋的錯誤。

無論是從 C 還是 Rust 開始,都需要討論本地變數、堆疊以及生命週期。因此,可能可以直接跳過 C 部分。一個激進的建議是,也許用 Crust 和原始指標開始教導 Rust 學習者實際上更簡單,直到學習者能夠理解其目的和含義。

https://ift.tt/DL81SBI

Unicode 與 Rust 源碼文本中換行符的定義

在討論「dedented string literals」RFC 時,有人注意到 Rust 對源碼文本中換行符的處理似乎與 Unicode 附件 (UAX#31) 中對「whitespace」的定義不符。Rust 參考手冊將「whitespace」定義為任何 Unicode Pattern_White_Space 字元的序列,並參考 UAX#31。雖然 Rust 參考手冊對不同類型的 whitespace 沒有太多區別,但在另一節中提到 CR LF 序列 (U+000D 後緊跟 U+000A) 在詞法分析早期會被「正規化」為 U+000A。

https://ift.tt/PrbqUnv

UAX#31 的定義與 Rust 實現的差異

相比之下,UAX#31 將 Pattern_White_Space 細分為三類:「horizontal whitespace」、「ignorable format controls」和「end-of-line markers」。「end-of-line markers」類別非常廣泛,包含 U+000A (line feed)、U+000B (vertical tabulation)、U+000C (form feed)、U+000D (carriage return)、U+0085 (next line)、U+2028 LINE SEPARATOR 和 U+2029 PARAGRAPH SEPARATOR。

然而,查看實際的詞法分析器實現,發現許多地方專門查找 \n,而不是此列表中的其他字元。並且換行符正規化器除了將 CR LF 轉換為 LF 之外,不做任何其他轉換。

https://ift.tt/PrbqUnv

關於對齊 Unicode 標準的提議

有人提出疑問,是否應該修改換行符正規化器,以便將上述所有字元以及 CR LF 序列都正規化為 LF。這樣做的動機是為了更精確地與 Unicode 對齊,並且不必解釋儘管談論 Pattern_White_Space,卻忽略了大多數 UAX#31 建議。除了 CRLF 行結尾,實際使用這些字元中的任何一個都極為罕見。這在技術上是一個破壞性更改,但僅限於在字串 (包括 docstring) 中放置了這些字元之一的文字實例的程式。

https://ift.tt/PrbqUnv

Rust 日報 – 2025 年 6 月 6 日

以下是 Rust 相關的活動和新聞摘要:

  • Rust Meetup @Magello。更多資訊:https://ift.tt/GjaQVHt。此活動將於 2025 年 6 月 18 日在瑞典斯德哥爾摩舉行。透過 Upcoming developer events 來源提供。
  • Monthly Rust Meetup。更多資訊:https://ift.tt/PYzeiSt。此活動將於 2025 年 6 月 17 日在英國劍橋舉行。透過 Upcoming developer events 來源提供。

這是 This Week in Rust 602 的內容摘要:

歡迎來到最新一期的 This Week in Rust! Rust 是一種賦予所有人建構可靠且高效能軟體能力的程式語言。本刊物是 Rust 進度和社群的每週總結。

希望某些內容被提及?可以在 Bluesky 標記我們 @thisweekinrust.bsky.social,或在 mastodon.social 標記 @ThisWeekinRust,或者發送 Pull Request。

想參與貢獻?我們歡迎貢獻。This Week in Rust 在 GitHub 上開放開發,存檔可在 this-week-in-rust.org 檢視。

如果您發現本週刊物有任何錯誤,請提交 PR。想在收件箱中收到 TWIR?請在此處訂閱:here。

來自 Rust 社群的更新:

  • 官方 (Official):
    • 宣佈五位新的編譯器團隊成員
    • 重新設計初始引導序列 (Initial Bootstrap Sequence)
  • 專案/工具更新 (Project/Tooling Updates):
    • ICU4X 2.0 發佈!
    • Freya 0.3
    • godot-rust 2025 年 5 月開發更新
    • SeaORM 1.1.12 的新功能
    • git-cliff 2.9.0 已發佈!
    • Ratatui 的 “Rat in the Wild” 挑戰
    • rust-analyzer changelog #288
    • Ratatui 區塊邊框合併 (Block Border Merging)
  • 觀察/思考 (Observations/Thoughts):
    • parking_lot: ffffffffffffffff…
    • 如何處理 Rust 依賴關係
    • 讚揚 Shuttle:氧化 Capibara Web API
    • 使用 -Zno-embed-metadata 減小 Cargo target 目錄大小
    • 在 Rust 函式庫中設計錯誤類型
    • 為什麼要在 Rust 應用程式中使用結構化錯誤
  • 影音內容 (Audio/Video):
    • The virtue of unsynn
    • Proxying is just dumb routing
    • David Lattimore – 更快的連結器,更快的建構
    • Rust with Niko Matsakis
    • SWC with DongYoon Kang
    • AccessKit with Matt Campbell and Arnold Loubriat
    • 使用 Bevy CLI 開始一個新的 Bevy 2D 遊戲
    • 與 Naz 一起建構:使用 nom 解析非 slice 輸入
  • 入門指南 (Rust Walkthroughs):
    • C++ 到 Rust 片語手冊
    • Async Traits 可以由手動 Future Impls 直接支援
    • 我們如何在 Rust 中組織 build.rs
  • 研究 (Research):
    • 初探使用非同步 Rust 編寫的 ROS 2 應用程式
  • 雜項 (Miscellaneous):
    • 使用 Rust 和 InfinyOn 重新思考資料串流

本週的 Crate:本週的 crate 是 context-logger,這是一個輕量級、符合人體工學的函式庫,用於為您的日誌添加結構化上下文。感謝 Aleksey Sidorov 的自我推薦! 請提交您下週的建議並投票!

呼籲測試 (Calls for Testing):RFC 實施的一個重要步驟是讓大家對實施進行實驗並提供回饋,尤其是在穩定化之前。如果您是功能實施者,並且希望您的 RFC 出現在此列表中,請為您的 RFC 添加 call-for-testing 標籤,並附帶提供測試說明和/或關於該功能哪些方面需要測試的指導性評論。

  • Cargo:
    • -Zrustdoc-depinfo 的追蹤問題
    • native-completion 的追蹤問題
    • 重新定義 CARGO_TARGET_DIR 為僅 artifacts 目錄
    • cargo install –dry-run
    • cargo package –workspace 不太有用
    • cargo publish multiple packages at once
  • 本週沒有 Rust、Rust language RFCs 或 Rustup 發出呼籲測試。如果您希望您的功能被追蹤在此列表的一部分,請告訴我們。

參與呼籲 (Call for Participation);專案和演講者:

  • CFP – 專案 (Projects):一直想為開源專案貢獻,但不知道從何開始?每週我們都會強調一些來自 Rust 社群的任務,供您選擇並開始! 其中一些任務可能有導師可用,請訪問任務頁面了解更多資訊。本週沒有提交參與呼籲。如果您是 Rust 專案所有者並正在尋找貢獻者,請在此提交任務或透過向 TWiR 提交 PR,或透過 X (以前稱為 Twitter) 或 Mastodon 聯繫我們!
  • CFP – 活動 (Events):您是一位正在尋找分享酷炫內容的新手或有經驗的演講者嗎?本節重點介紹正在計劃並接受演講者提交的活動。本週沒有提交論文或演講呼籲。如果您是希望擴大活動影響力的活動組織者,請透過向 TWiR 提交 PR 或透過 X (以前稱為 Twitter) 或 Mastodon 聯繫我們,提交網站連結!

來自 Rust 專案的更新:上週合併了 529 個 Pull Request。

  • 編譯器 (Compiler):
    • 修正 unsafe binders 的 span
    • PGO 新的求解器
    • 添加額外的 TypeFlags 快速路徑
    • 在活性分析 (liveness) 中添加 maybe-initializedness 的快速路徑
  • 標準函式庫 (Library):
    • 重新設計 stage 0 std
    • 為整數實現 ((un)checked_)exact_div 方法
    • 為 BTreeMap::extract_if 和 BTreeSet::extract_if 添加 Range 參數
    • 添加 CStr::display
    • 添加 Result::map_or_default 和 Option::map_or_default
    • 添加 From for io::Error
    • 為浮點數捨入方法添加 const 支援
    • 為 Mutex 和 RwLock 添加 data_ptr 方法
  • Cargo:
    • trim-paths: 將所有路徑重新映射到 build.build-dir
    • 修正 cargo add 覆寫符號連結的 Cargo.toml 檔案的問題
  • Rustdoc:
    • 關於分配的清理工作
    • 正確顯示 doc(cfg(false))
    • 連結到本地 proc macro 不再發出警告
    • 如果 doctest 有條件地被忽略,則使用描述性 tooltip
  • Clippy:
    • explicit_deref_methods: 不對方法鏈進行 lint
    • needless_return: 也查看 else if 部分
    • while_let_loop: 在建議中包含 let 賦值
    • 添加 lint infallible_try_from
    • 清理 modulo_arithmetic
    • 擴展 manual_is_variant_and lint 以檢查 boolean map 比較
    • 修正 dbg_macro 未能處理 async coroutine desugar 的問題
    • 修正 semicolon_outside_block 在 macro 內時建議錯誤的問題
    • 改進 manual_contains docs 的措辭
    • 新的限制 lint: pointer_format
    • 優化 unit_return_expecting_ord
    • 在更多地方使用 interned symbols 而非字符串
  • Rust-Analyzer:
    • 在過濾允許的操作時考慮 Generate actions
    • 為存取 struct 的私有字段添加 quickfix
    • 添加對 type-erased Semantics<‘db, dyn HirDatabase> 的支援
    • 啟用 assist edit for tuple<->named struct 的 struct 和 visiblity 關鍵字
    • desugar assist for let pat = expr?; → let else
    • 增強重命名以包含 macro 生成的識別符變體
    • hover 在 struct 上時渲染填充資訊
    • HirDatabase::infer 的循環處理器
    • 修正 IDE 層無法解析某些 macro call 的問題
    • 修正 import 插入未能完全感知 cfg 的問題
    • 修正 AsyncFnX 返回類型的推斷
    • 在 IDE 層更好地處理 include 的檔案
    • 識別 thread_result_to_response 中的 salsa 循環
    • 在類型不匹配時跳過模式分析

Rust 編譯器效能分析 (Rust Compiler Performance Triage):相當忙碌的一周,效能變化很多。大部分變化(至少在基準測試數量方面)歸因於 PGO 收集更新到新的基準測試,作為 2025 年更新的一部分。由 @simulacrum 進行分析。修訂範圍:2805e1dc..2fc3deed。完整報告在此。

已批准的 RFC (Approved RFCs):Rust 的變更遵循 Rust RFC (request for comments) 流程。這些是本週批准實施的 RFC:本週沒有批准任何 RFC。

最終評論期 (Final Comment Period):每週,團隊都會宣佈 RFC 和重要 PR 進入「最終評論期」,即將做出決定。現在表達您的意見。

追蹤問題與 PR (Tracking Issues & PRs):

  • Rust:
    • 添加 (回歸) unsupported_calling_conventions lint 以拒絕更多無效的調用約定
    • 穩定化 if let guards (feature(if_let_guard))
    • 為 ChunkBy 添加 Clone 實現
    • 使 dangerous_implicit_autorefs lint 預設為 deny
    • 使 NonZero< char > 成為可能
    • nonnull_provenance 的追蹤問題
    • [處置: close] 為 Wrapping< T > 實現 Rhs = T 的操作
    • 分割 unknown_or_malformed_diagnostic_attributes lint
    • 對外部宏中的 fn 指針比較進行 Lint
    • 指定 file! 的行為
    • 記錄 Option<unsafe fn()> 的表示
    • 穩定化 feature(generic_arg_infer)
    • 允許 #![doc(test(attr(..)))] 在任何地方使用
    • File lock API 的追蹤問題
    • [處置: 未指定] unsigned_signed_diff 的追蹤問題
    • 穩定化 os_string_pathbuf_leak
  • Rust RFCs (在 FCP 中):
    • [RFC] 添加 #[export_ordinal(n)] 屬性
  • 本週 Cargo、Language Reference、Language Team 或 Unsafe Code Guidelines 沒有任何項目進入最終評論期。如果您希望您的 PRs、追蹤問題或 RFCs 被追蹤在此列表的一部分,請告訴我們。

新的和更新的 RFCs:

  • [new] de-RFC: 移除 unsized_locals
  • [new] RFC: 在與應用程式相同的包中啟用 Procedural macros
  • [new] RFC: 允許使用本地 trait bounds 的 generic impls

即將舉辦的活動 (Upcoming Events):2025 年 6 月 4 日至 2025 年 7 月 2 日之間的 Rust 活動。

  • 虛擬活動 (Virtual):
    • 2025-06-04 | Virtual | 科學計算在 Rust 中
    • 2025-06-04 | Virtual (Indianapolis, IN, US) | Indy Rust – 保持社交距離
    • 2025-06-05 | Virtual (Berlin, DE) | Rust Berlin – Rust Hack and Learn
    • 2025-06-07 | Virtual (Kampala, UG) | Rust Circle Meetup
    • 2025-06-08 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup – Rust Readers Discord Discussion: Async Rust
    • 2025-06-10 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup – 第二個星期二 (Second Tuesday)
    • 2025-06-10 | Virtual (London, UK) | Women in Rust – 社群聚會 (Community Catch Up)
    • 2025-06-11 | Virtual (Tel Aviv, IL) | Code Mavens – Rust at Work – 與 Ardan Labs & LibreQoS 的 Herbert Wolverson 對話
    • 2025-06-12 | Virtual (Charlottesville, VA, US) | Charlottesville Rust Meetup – 會面、交流和學習!
    • 2025-06-15 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup – Rust Readers Discord Discussion: Async Rust
    • 2025-06-17 | Virtual (Washington, DC, US) | Rust DC – Mid-month Rustful
    • 2025-06-18 | Hybrid (Vancouver, BC, CA) | Vancouver Rust – Rust 學習/駭客/閒逛
    • 2025-06-19 | Hybrid (Redmond, WA, US) | Seattle Rust User Group – 2025 年 6 月 SRUG (Seattle Rust User Group) 會面
    • 2025-06-19 | Virtual (Berlin, DE) | Rust Berlin – Rust Hack and Learn
    • 2025-06-22 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup – Rust Readers Discord Discussion: Async Rust
    • 2025-06-24 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup – 第四個星期二 (Fourth Tuesday)
    • 2025-06-24 | Virtual (London, UK) | Women in Rust – 建構高效能 Web Scrapers:Rust 與 Python 的資料擷取比較
    • 2025-06-26 | Virtual (Nürnberg, DE) | Rust Nuremberg – Rust Nürnberg 線上
    • 2025-06-29 | Virtual (Dallas, TX, US) | Dallas Rust User Meetup – Rust Readers Discord Discussion: Async Rust
    • 2025-07-02 | Virtual (Indianapolis, IN, US) | Indy Rust – 保持社交距離 (Social Distancing)
  • 亞洲活動 (Asia):
    • 2025-06-08 | Tel Aviv-yafo, IL | Rust TLV – 2025 年 6 月在特拉維夫 AWS 的面對面 Rust 會面
  • 歐洲活動 (Europe):
    • 2025-06-04 | Ghent, BE | Systems Programming Ghent – 透過嵌入式 Rust 成長得更聰明
    • 2025-06-04 | Köln, DE | Rust Cologne – 六月的 Rust:Rust 的十年
    • 2025-06-04 | Oxford, UK | Oxford Rust Meetup Group – Risc V – AI 和嵌入式系統 CPU 的新挑戰者
    • 2025-06-05 | München, DE | Rust Munich – Rust Munich 2025 / 2 – 駭客之夜
    • 2025-06-10 | Cambridge, UK | Cambridge Rust Meetup – 每月 Rust 會面
    • 2025-06-10 | Warsaw, PL | Rust Warsaw – Rust Warsaw Meetup #5
    • 2025-06-11 | Reading, UK | Reading Rust Workshop – Reading Rust 會面
    • 2025-06-12 | Berlin, DE | Rust Berlin – 在地舉辦的 Rust Berlin – 第 003 版
    • 2025-06-17 | Leipzig, SN, DE | Rust – Modern Systems Programming in Leipzig – 主題待定 (Topic TBD)
    • 2025-06-18 | Stockholm, SE | Stockholm Rust – Rust Meetup @Magello
    • 2025-06-19 | Aarhus, DK | Rust Aarhus – Rust Aarhus meetup 在 Trifork
    • 2025-06-19 | Edinburgh, UK | Rust and Friends – Rust 和朋友們 (傍晚酒吧)
    • 2025-06-20 | Edinburgh, UK | Rust and Friends – Rust 和朋友們 (日間咖啡)
    • 2025-06-24 | Manchester, UK | Rust Manchester – Rust Manchester 六月程式碼之夜
    • 2025-06-25 | London, UK | London Rust Project Group – 從在 nostd Rust 中製作一個微型遊戲中學到的教訓
    • 2025-06-26 | Copenhagen, DK | Copenhagen Rust Community – Rust meetup #58
    • 2025-07-02 | Basel, CH | Rust Basel – Rust Meetup #12 @ kHaus
  • 北美活動 (North America):
    • 2025-06-05 | Chicago, IL, US | Chicago Rust Meetup – Rust Happy Hour
    • 2025-06-05 | Saint Louis, MO, US | STL Rust – Leptos 網頁框架
    • 2025-06-08 | Boston, MA, US | Boston Rust Meetup – Boston University Rust 午餐,6 月 8 日
    • 2025-06-11 | Phoenix, AZ, US | Desert Rust – Rust <> 安全
    • 2025-06-12 | Mountain View, CA, US | Hacker Dojo – RUST MEETUP 在 HACKER DOJO
    • 2025-06-17 | San Francisco, CA, US | San Francisco Rust Study Group – 面對面 Rust 編程
    • 2025-06-18 | Hybrid (Vancouver, BC, CA) | Vancouver Rust – Rust 學習/駭客/閒逛
    • 2025-06-19 | Hybrid (Redmond, WA, US) | Seattle Rust User Group – 2025 年 6 月 SRUG (Seattle Rust User Group) 會面
    • 2025-06-19 | México City, MX | Rust MX – 使用 Tokio 在 Rust 中進行非同步編程
    • 2025-06-19 | Nashville, TN, US | Music City Rust Developers – 使用 Rust 開發 Web 系列 3:最終演講與社群交流
    • 2025-06-20 | Boston, MA, US | Boston Rust Meetup – Lechmere Rust 午餐,6 月 20 日
    • 2025-06-25 | Austin, TX, US | Rust ATX – Rust 午餐 – Fareground
    • 2025-06-26 | Spokane, WA, US | Spokane Rust – 每月會面:使用 Rust 製作 CRUD API!
    • 2025-06-28 | Boston, MA, US | Boston Rust Meetup – Back Bay Rust 午餐,6 月 28 日
  • 大洋洲活動 (Oceania):
    • 2025-06-16 | Christchurch, NZ | Christchurch Rust Meetup Group – Christchurch Rust 會面
    • 2025-06-24 | Barton, AU | Canberra Rust User Group – 六月會面
  • 南美活動 (South America):
    • 2025-06-04 | Montevideo, UY | Rust Meetup Uruguay – 2025 年第一次 Rust 會面!
    • 2025-06-12 | Buenos Aires, AR | Rust en Español – WebAssembly 的六月!

如果您正在舉辦 Rust 活動,請將其添加到日曆以在此處提及。請記住也要添加活動連結。請發送電子郵件給 Rust 社群團隊以獲得訪問權限。

職位 (Jobs):請查看 r/rust 上最新的徵才主題。

本週名言 (Quote of the Week):基於 Rust 的 Python 型別檢查器就像公車——你等了很久,然後一次來了兩個。—— 來自 r/rustjerk 的 u/fiddle_n。感謝 Brian Kung 的建議! 請提交名言並投票下週的!

This Week in Rust 由以下成員編輯:nellshamrell、llogiq、cdmistman、ericseppanen、extrawurst、U007D、joelmarcey、mariannegoldin、bennyvasquez、bdillo。電子郵件列表託管由 The Rust Foundation 贊助。在 r/rust 討論:https://ift.tt/SRlpjGz。透過 This Week in Rust 來源提供:https://ift.tt/SRlpjGz。


Runtime-initialized variables in Rust

https://ift.tt/nik2g1Y

Rust 提供了不同的方式來初始化編譯時初始化的變數。最近,我必須創建一個運行時初始化的變數;現有方法在這種情況下不起作用。我想在本文中描述實現它的多種方法。繼續閱讀 Medium。透過 Programming on Medium 來源提供:https://ift.tt/yN6iIyo。

Tired of lazy_static? Rust 1.80 Has a Cleaner Way

https://ift.tt/HNzXle7

  • 常數 (Constants):Rust 語言允許創建常數。有兩個關鍵字可用:const 和 static。const 關鍵字提供了一種方便的替代方案來避免程式碼重複。例如:const THING: u32 = 0xABAD1DEA;。
  • Static 項目 (Static items):Static 項目是程式整個執行期間有效的值。它們代表記憶體中的一個位置。可以有對 static 項目的引用,甚至可能修改它們,使其本質上成為全域變數。Static 項目在程式結束時不呼叫 drop。Static 項目有兩種:使用 mut 關鍵字聲明和不使用 mut 的。
  • 限制:const 和 static 都不能用於需要運行時代碼執行的初始化,例如呼叫 Regex::new。
  • lazy_static crate:這個 crate 提供了一個解決方案。它是一個用於在 Rust 中聲明惰性求值靜態變數的宏。使用此宏,可以擁有需要運行時執行代碼才能初始化的靜態變數。這包括任何需要堆分配的東西,如向量或雜湊映射,以及任何需要非 const 函式調用才能計算的東西。使用方法很簡單:將靜態聲明包裝在宏中。
  • LazyLock 的優勢:Rust 1.80 添加了 LazyLock。LazyLock 是一個內建的 lazy_static 宏的完全替代品。它是一個值,在第一次訪問時初始化。LazyLock 是線程安全的 LazyCell,可以用於 static 變數。任何解引用呼叫都會在另一個初始化常式正在運行時阻塞呼叫線程。LazyLock 的文檔很直接。可以使用 LazyLock::new 直接使用它。
  • OnceLock:作為替代方案,可以使用 Rust 1.70 中的 OnceLock。它是一個同步原語,名義上只能寫入一次。OnceLock 是線程安全的 OnceCell,可以用於 static 變數。在許多簡單的情況下,可以使用 LazyLock<T, F> 代替。OnceLock 在 LazyLock 太簡單而無法支持給定情況時發揮作用,因為 LazyLock 在呼叫 LazyLock::new(|| ...) 後不允許額外的輸入到其函式。使用方法與 LazyLock 不同。需要創建 OnceLock,然後使用 get_or_init 初始化或獲取變數。
  • 總結:本文描述了創建惰性初始化變數的幾種選項。之前必須依賴 lazy_static crate。使用 Rust 1.80,可以用 LazyLock 替換它。如果 LazyLock::new() 後需要額外輸入,OnceLock 是個不錯的選擇。
  • 進一步閱讀:最初發表於 A Java Geek。透過 HackerNoon 來源提供:https://ift.tt/U2GObsE。

This Month in Rust OSDev: May 2025

https://ift.tt/MINap8w

本月 Rust 作業系統開發的回顧:2025 年 5 月。發表於 2025 年 6 月 5 日,由 @phil-opp 編輯。這是 Rust 作業系統開發生態系統中值得注意的變更的定期概述。本系列在 GitHub 上開放開發。歡迎在那裡提交包含您希望在下一期中看到的內容的 Pull Request。如果在頁面上發現任何問題,請透過建立 issue 或使用本頁底部的評論表單報告。評論表單連結:https://rust-osdev.com/this-month/2025-05/#comment-form。

  • 公告、新聞和部落格文章:收集與 Rust 中作業系統開發相關的新聞、部落格文章等。
  • Rust OSDev 專案:概述 rust-osdev 組織下託管的專案的顯著變更。組織 GitHub 連結:https://github.com/rust-osdev。
    • uefi:由 @GabrielMajeri、@nicholasbishop 和 @phip1611 維護。它使得開發利用 UEFI 功能的安全、方便和高效能抽象的 Rust 軟體變得容易。本月合併了多個 PR。感謝貢獻者。
    • x86_64 crate:由 @phil-opp、@josephlr 和 @Freax13 維護。為 x86_64 系統提供各種抽象。本月合併了多個 PR。感謝貢獻者。
  • 其他專案:描述與 rust-osdev 組織不直接相關的 Rust OS 專案的更新。本月沒有提交專案更新。
  • 加入我們?:對基於 Rust 的作業系統開發感興趣嗎?我們的 rust-osdev 組織始終對新成員和新專案開放。聯絡的一個好方法是他們的 Zulip 聊天。請告知我們您是否想加入!

透過 Rust OSDev 來源提供:https://rust-osdev.com。


Crate Improvements & Other Rust Changes Merged For Linux 6.16

https://ift.tt/WhoElcD

除了 Linux 核心子系統中新增的多個 Rust 抽象之外,主要的 Rust 基礎設施 Pull Request 於昨天提交並合併,隨著 Linux 6.16 合併窗口接近尾聲。Linux 6.16 的 Rust Pull Request 新增了對 KUnit 映射的 “assert!” 巨集支援,這是基於先前周期的初始程式碼。還包括使用 Rust Edition 2024 編譯核心,適用於 Rust 1.87 及更新版本,以及各種修正/變通方法。

許多 Linux 核心的 Rust Crates 也進行了添加,例如 kernel crate 獲得新功能,XArray 資料結構的 Rust 抽象,pin-init crate 中的新包裝器等等。還有 Rust 文檔改進,包括更新的 Ubuntu 使用 Rust Linux 核心的說明和精煉的編碼指南。更多關於 Linux 6.16 的 Rust 變更的詳細資訊,請參閱此 Pull Request:this pull request。該 Pull Request 在 overnight 合併到 Git。透過 Phoronix 來源提供:https://ift.tt/VzPGlRW。


10 Years of Betting on Rust

https://ift.tt/yKZ1V7c

10 年來押注 Rust 以及我接下來期待的事情。作者 Alec Mocatta (創辦人) 於 2025 年 6 月 1 日發表。作者於 2015 年 6 月寫下他的第一行 Rust 程式碼,在 Rust 1.0 發佈一個月後。從 C、Python 和 JavaScript 轉來,他再也沒有回頭。經過兩家基於 Rust 的新創公司和 50 萬行 Rust 程式碼後,他對這個里程碑進行了一些反思。

  • 早期階段是痛苦的。版本相容性差。錯誤修復更新可能迫使編譯器升級,進而拖入不穩定的 crates。浪費了很多時間二分法搜索兼容的版本組合。
  • 「與借用檢查器搏鬥」是真實的。Trait 很自然,但 lifetimes 和「證明」花了一些時間才理解。
  • 編譯時間變得很痛苦。大型類型是一個反覆出現的問題,需要診斷和緩解。投入資金有所改善,但迭代週期仍然受到影響,快速原型設計通常需要努力設置。
  • 人過去和現在都是傑出的。Rust 生態系統具有令人印象深刻的編程「品味」。依賴項具有相對簡單的構建、優雅的實現以及快速且健壯的性能。Rust 已連續九年獲得「最受喜愛/欽佩的語言」稱號。
  • Rust 已成為一個安全的選擇 (在某些領域)。早期的日子需要很多重複造輪子。現在可以依賴標準庫的原始類型,它們甚至擁有相對不常見或抽象的實現,並且它們被優化得很好。
  • 這種可靠性現在延伸到了大部分 Rust 體驗。構建和升級更加可預測,對 nightly 功能的依賴減少,對 semver 的遵守更嚴格。推斷改進使借用檢查器對新手更友好。 nightly 版本上的 ICE 少了很多。
  • crate 生態系統也更可預測。較新的 crates 從早期專案的經驗中學習,而 stalwart crates 透過多年的生產使用證明了其健壯性。
  • Rust 今天感覺就像編程應該有的樣子。Rust 具有前所未有的程序員共情度。簡單而健壯的構建、最好的錯誤訊息和 linting、出色的文檔和 IDE 整合,以及強大的 CI 和回歸測試。
  • 如 Graydon Hoare 所說,今天的 Rust 是前瞻性機構投入大量資金和數千名個人努力的結果。作者十年前押注 Rust 是因為相信它的回報。
  • 我期待接下來 10 年的事情:
    • 更簡單更快的構建。正在投入大量專業知識和精力進行性能工作。
    • 改進的可移植性並減少 #![cfg()]。測試 #![cfg()] 選項的冪集是很難的。一個更好的方法是將 #![cfg()] 移入 trait 系統。
    • 一切皆為 const。常量求值減少對宏和構建腳本的依賴。將運行時工作和 panics 提前到編譯時。
    • 更簡單的並發。async 對作者來說具有相對高的複雜性成本。sync 和 async 原語的分歧增加了 async 的負擔。預 1.0 版本的 Rust 有一個解決方案:libgreen。它在用戶空間實現了並發而沒有這種分歧,但由於顯著的性能、可移植性和維護成本而被移除。隨著工程帶寬的增加,這可能值得重新審視。
    • 在更多領域表現出色。Rust 在瀏覽器中的應用感覺開發不足。快速原型設計和業務邏輯等某些領域可能仍然超出 Rust 的範圍。對 GUI、機器學習和遊戲開發等領域仍然存在採用障礙,但這些障礙不是永久的。
  • 結論:未來的軌跡是清晰而令人興奮的。採用的正面回饋循環正在加速。未來十年有望進一步完善、更快的編譯時間、更廣泛的領域採用以及日益流暢的開發者體驗。
  • 透過 Hacker News 來源提供:https://ift.tt/9npuN4P。

Raycasting engine in Rust WASM

https://ift.tt/ac5iZQu

本文不會過多關注技術方面,而是開發 Rust 中的 raycasting 引擎的結果和經驗。繼續閱讀 Medium。透過 Rust on Medium 來源提供:https://ift.tt/ZVGCaTW。


Rust’s Compile-Time Errors: From Lifesaver to Nightmare

https://ift.tt/WzX0wbj

Rust 的承諾很簡單:「如果它編譯成功,它就能工作」。在一段時間內,這感覺像魔法一樣。編譯器是我們的守護者,捕獲了錯誤。繼續閱讀 Medium。透過 Software Engineering on Medium 來源提供:https://ift.tt/cMYPonv。


Exploring Rust’s Safety Superpowers

https://ift.tt/aKgH3NJ

深入探討 Rust 的 References、Borrowing 和 Slice 類型。繼續閱讀 Medium。透過 Software Development on Medium 來源提供:https://ift.tt/vfYobN7。


InfluxDB v3: Why Rust Beat Go for Time Series Database

https://ift.tt/1NL5sH7

在 2020 年,很明顯是時候將 InfluxDB 轉向 Rust 了,使其能夠提供以前使用 Go 難以實現的關鍵功能。在放棄 Go 重寫 v3 後,該專案也大量依賴 DataFusion 來實現核心功能。

  • 核心功能:這些功能包括基數 (或所謂的無限基數)、SQL 查詢 以及計算與儲存的分離 (例如使用 S3 等對象存儲)。DataFusion 允許將這些功能整合到 InfluxDB v3 中。InfluxDB 本身現在是用 Rust 編寫的,以改善函式庫的功能和查詢功能的整合。
  • 市場定位:這次對 Rust 的重大押注,使得 InfluxDB v3 成為時間序列資料庫需求的領先替代品,特別是對於邊緣裝置和邊緣計算。
  • InfluxData 首席技術官兼創始人 Paul Dix 談到 InfluxDB 對追蹤機器數據的 CTOs 的好處。客戶通常將 InfluxDB 與 Grafana 和其他日誌和追蹤工具一起使用。在工業物聯網 (IoT) 領域,InfluxDB 用於衛星、火箭、能源、採礦、石油和天然氣相關的部署。它服務於 3000 到 4000 個客戶,總用戶群更大。
  • 轉向 Rust 解決了三個主要目標:支援無限基數、啟用 SQL 查詢以及將計算與儲存解耦。開發始於 2020 年,耗時約四年半。
  • 選擇 Rust 的原因:選擇 Rust 是由架構考慮驅動的,而不是 Go 的限制。目標是整合一個現成的查詢引擎。雖然許多成熟的引擎是用 Java、C 或 C++ 編寫的,但 Rust 提供了比 Go 更好的與 C 的互操作性。
  • InfluxData 將 DataFusion 整合到專案中,DataFusion 是一個基於 Rust 的查詢引擎,也是 Apache Arrow 的一個子專案。對 DataFusion 的貢獻始於 2020 年,團隊現在領導該專案。
  • 開源哲學:這種開源工作的哲學是將依賴項商品化。專注於解決時間序列問題而不是從頭開始建構查詢引擎,InfluxDB 可以提供更多價值。來自其他大公司的貢獻進一步增強了 DataFusion 專案。
  • Grafana 目前支援 PromQL、LogQL 和 TraceQL 作為其查詢語言。如果 SQL 在 Grafana 中成為一流語言,DataFusion 可能會是底層引擎。
  • InfluxDB 3 Core:InfluxData 新的開源產品,於三月推出測試版。採用 MIT/Apache 2 許可證。
  • InfluxDB 3 Enterprise:Core 的商業版本,針對長於一小時的時間範圍查詢進行了性能優化。並支援更長期的歷史查詢、高可用性、增強安全性和多節點部署。
  • FDAP 堆棧:InfluxDB 3 建構於 FDAP 堆棧之上:Apache Flight、DataFusion、Arrow 和 Parquet。這使得資料持久化狀態可以運行在對象存儲或本地磁盤上。Apache Arrow 是一種記憶體內列式格式,DataFusion 是一個使用此格式的向量化 SQL 查詢引擎。Parquet 用作 InfluxDB 的持久化格式,用於改進時間序列數據的壓縮。Flight 和 FlightSQL 使得 InfluxDB 3 能夠以低成本提供數百萬行的查詢結果。還有一個易於使用的 HTTP API。
  • FDAP 堆棧提供了靈活、高效的架構,帶來顯著的性能提升。它處理高併發工作負載,維護資料完整性,並在壓力下保持彈性。它同時向外和向上擴展。這個基礎之所以可能,是因為他們不僅使用開放標準,還參與塑造它們。
  • 新功能:InfluxData 在 InfluxDB 3 Core 和企業版中引入了幾個功能來優化時間序列資料中的常見查詢模式。Last Value Cache (LVC) 和 Distinct Value Cache (DVC) 可以在 10 毫秒內回答查詢。
    • LVC:可配置以保留指定標籤層次結構的最新值。可以「即時檢索」感測器的最新指標。
    • DVC:旨在為標籤值和系列元數據提供快速查找,使 UI 下拉菜單和探索性查詢更具響應性。
    • 嵌入式 Python 處理引擎:將計算直接帶入資料庫。允許在沒有外部服務或管線的情況下進行資料轉換、豐富、監控和警報。它在資料庫內部運行一個輕量級的 Python VM,並根據觸發器執行您的程式碼。
  • 透過 The New Stack 來源提供:https://thenewstack.io/。

How to get Rust function names appear in the results of the Linux backtrace(3) output? (Stack Overflow 問答)

https://ift.tt/xmXL0PY

使用者正嘗試讓 Rust cdylib crate 的 Rust 函數名稱出現在 Linux backtrace(3) 的輸出中。他們使用 --release 建構,並在 Cargo.toml 中使用特定配置。使用 RUSTFLAGS='-C link-arg=-rdynamic' cargo build --release 建構。

然而,他們獲得的 backtrace 中,除了最下方的一個函數外,其他所有條目都缺少函數名稱。例如:。最下方帶有函數名稱 (redacted_fn_name) 的條目可能是因為其函數簽名。該函數的程式碼如下:#[unsafe(no_mangle)] pub unsafe extern "C" fn redacted_fn_name(/* args */) -> u32 { ... }。所有其他函數都是「純」Rust 函數,即未使用 #[unsafe(no_mangle)] 或 extern "C" 聲明。

backtrace(3) man page 列出了一些注意事項,包括:省略幀指針可能導致假設被違反。內聯函數沒有堆疊幀。尾呼叫優化導致一個堆疊幀替換另一個。對於使用 GNU 連結器的系統,需要使用 -rdynamic 連結器選項。「靜態」函數的名稱不會暴露,也不會出現在 backtrace 中。

使用者懷疑函數名稱不出現的原因(除了可能的配置錯誤或 Cargo 建構方式問題)是函數可能是「靜態」的。但不確定 Rust 中是否有什麼可以阻止函數成為「靜態」的。他們正在尋求建議和忠告,以排除故障或修復缺失的函數名稱。透過 Recent Questions – Stack Overflow 來源提供:https://stackoverflow.com/。


Introducing facet: Reflection for Rust

https://ift.tt/Z2H9O1P

作者長期以來一直在與 Rust 編譯時間作戰。部分解決方案是購買 Apple Silicon 裝置。另一部分是深入了解 Rust 本身。作者寫了「Why is my Rust build so slow?」,這篇文章深入探討了 Rust 建構性能。文章連結:Why is my Rust build so slow?。透過 fasterthanli.me 來源提供:https://fasterthanli.me/。


How I Beat serde_json Performance on My First Day with Rust

https://ift.tt/U89Djk7

關於如何在第一天接觸 Rust 時擊敗 serde_json 的性能的文章。繼續閱讀 Medium。透過 Rust on Medium 來源提供:https://ift.tt/ZVGCaTW。


Unlocking Nanosecond Communication: How I Built a Zero-Copy IPC Layer in Rust That Left Go and C in…

https://ift.tt/ASk0h1w

利用 Rust 無畏的並發和零成本抽象,本文深入探討如何使用 Rust 建構一個生產級的零拷貝 IPC 層。繼續閱讀 Medium。透過 Rust on Medium 來源提供:https://ift.tt/ZVGCaTW。

Rust 日報 – 2025 年 6 月 5 日

專案與應用

  • OpenAI 的 Codex CLI 正在使用 Rust 進行重寫。這個命令列介面最初是使用 React、TypeScript 和 Node.js 構建的,現在改用 Rust,以尋求在安全性和效能方面的提升,同時也改善開發者的體驗。OpenAI 的這一轉變突顯了平衡安全性、效能與開發者敏捷性之間的關鍵趨勢。
  • 一個由開發者獨立構建的簡單線上監控 SaaS 項目 StatusPulse,已使用 Rust 從零到一構建並上線,目前正在尋找測試者。該服務提供 URL 監控、自定義檢查間隔、郵件警報、事件時間線、點擊分析和報告功能。項目的技術棧包括 Rust (Axum + SQLx + Tokio) 以及其他工具。作者表示構建此項目的原因之一是挑戰自己使用 Rust 構建一個完整的 SaaS 應用。
  • 有學術研究涉及 Rust 的應用,一篇學位論文介紹了使用 Rust 實現無坐標單體複形上的有限元外微積分 (FEEC) 庫。該庫旨在解決抽象複形上的偏微分方程。
  • GitHub 上有一個頁面正在追蹤自上一個使用 Rust 編寫的 Minecraft 伺服器軟體發布以來的天數。

學習與開發技巧

  • 一篇針對 Rust 新手的文章提醒應避免的常見錯誤:
    • 不要假設所有學習資料都是最新的:Rust 語言發展迅速,舊的文件或指南可能包含過時的語法或概念 (例如,使用 try! 巨集而非現有的 ? 運算符)。建議檢查資料發布日期,兩年以上的資料可能已過時。
    • 不要在 Rust 中套用 C/C++ 或其他語言的習慣:Rust 的所有權與借用模型以及基於類型的錯誤處理是其特色,需要花時間學習。應避免使用 C 或 C++ 風格的記憶體管理或原始指標。應學習使用原生的 Rust 概念,例如參考 (references),以及像 Box、Rc、Arc 等類型來管理記憶體和所有權。原始指標 (pointers) 在 Rust 中需要明確選擇啟用且被認為是不安全的。只有在絕對必要時,才將指標的使用限制在最小的 unsafe{} 區塊內。對於 C++ 開發者,可以參考 C++ to Rust Phrasebook 來協助過渡。
    • 不要一開始就嘗試學習所有 Rust 的字串類型:新手應先專注於最常用的兩種:str (不可變,通常是字串字面值的類型) 和 String (可變,儲存在堆上)。str 用於字串常數,&str 用於借用現有字串值的參考。
    • 不要一開始就懼怕使用 .clone() 來繞過借用問題:在剛開始學習 Rust 時,所有權和借用的複雜性可能會讓人困惑。使用 .clone() 可以複製一份資料,創建一個新的獨立所有者,從而解決借用問題。雖然 .clone() 在效能敏感的程式碼中可能開銷較大,但在學習初期,它是一個可以接受的方法,有助於理解所有權概念。
    • https://ift.tt/Z2Wma7F
  • 一篇部落格文章提供了如何在簡單的 Rust 程式中利用 ABAP ODBC 驅動程式的詳細步驟和程式碼範例。文章指導如何設定 Rust 環境,使用 cargo 添加所需的 crate,特別提到 odbc-api crate 需要啟用 odbc_version_3_5 功能,因為 ABAP ODBC 驅動程式不支援較新的 ODBC 特性。範例程式碼展示了如何連接資料庫、執行簡單的 SELECT 查詢、創建臨時表以及呼叫儲存過程並處理結果集。

技術討論與問題

  • Stack Overflow 上有關於 Rust 字元類型和字串編碼的問題,探討了為何 char 類型使用 UTF-32 而字串使用 UTF-8,並對比了 C11 的字元類型設計。問題也詢問這些設計選擇是否主要基於效能、記憶體使用和實際考量。
  • Rust 程式語言論壇上有人在使用 Rust 官方書籍學習時,嘗試編譯簡單的整合測試時遇到編譯錯誤,錯誤提示無法解析專案 crate 名稱。
  • Stack Overflow 上有關於 Rust 函數的 where 子句中 QueryType 類型混淆的問題。用戶嘗試封裝 diesel_async 的 get_results 函數時遇到困難,RustRover IDE 提示某個類型無法安全地跨執行緒傳送。

活動與產業

  • 2025 年 6 月 27 日,在美國斯波坎將舉辦一場每月例行聚會,主題是「使用 Rust 製作 CRUD API!」。
  • Prossimo 公司為其 AV1 解碼器 rav1d 推出了 20,000 美元的效能懸賞計畫,希望 Rust 版本的效能能夠與 C 版本匹敵。有來自 FFmpeg 的評論嘲諷說 “Rust 需要資金才能跟上 C 的腳步”。
  • CppCon 2025 會議已開放註冊。會方分享了 CppCon 2024 中 Tyler Weaver 關於「5 分鐘 Rust 程式設計」的演講影片,該演講旨在向 C++ 開發者介紹 Rust。
  • 一篇關於如何成功聘用 Rust 開發者的文章指出,Rust 因其速度、安全性和記憶體效率,正迅速成為構建高性能系統的首選語言。

Rust 日報 – 2025 年 6 月 4 日

歡迎來到今天的 Rust 資訊日報!我們將聚焦 Rust 社群的最新動態、技術進展和實用工具。

核心開發與 Linux 整合

  • Linux 6.16 的合併視窗持續整合更多 Rust 程式語言的抽象層 到 Linux 核心的程式碼核心區域。
  • 最新的 DRM (Direct Rendering Manager) 核心基礎設施更新包含了 Rust 抽象層,用於 DRM 驅動程式/裝置、ioctl 處理、檔案以及 GEM 記憶體管理。
  • 記憶體管理 (MM) 的 pull request 新增了從 Rust 程式碼存取核心記憶體管理結構所需的重要抽象層,包含 mm_struct、vm_area_struct 和 mmap 的支援。這些增強功能有助於提高記憶體安全性和系統效能。
  • 驅動程式核心的 pull request 新增了 Rust 驅動程式核心和 PCI 裝置繫結 (bindings),並帶有新功能。這些更新是企業伺服器、雲端基礎設施和高效能計算的關鍵。
  • Rust 在 Linux 核心的整合提高了記憶體安全性、驅動程式可靠性和系統效能。這對於雲端服務提供商、汽車產業和物聯網等優先考慮安全認證程式碼的產業特別重要。根據林納斯·托瓦茲 (Linus Torvalds) 在 2023 年的訪談,他認為 Rust 是任務關鍵型系統的未來。雖然 Rust 不會立即取代 C 語言在 Linux 核心中的地位,但由於其安全性優勢,它正成為新驅動程式/核心程式碼的預設選擇。
  • Rust Coreutils 0.1 正式發布,帶來了顯著的效能提升。其速度可以匹敵甚至超越 GNU 版本。
  • 一篇論文探討了使用 Rust 語言編寫的 ROS 2 (Robot Operating System 2) 應用程式中的非同步程式設計。研究分析了非同步 Rust ROS 2 繫結 (R2R) 和不同非同步執行時的執行模型,並提出了一種結構化方法,旨在實現確定性的即時操作,包括執行緒優先級和回呼到執行緒的映射方案。實驗證明這種方法有效且優於其他組態,為時間關鍵任務實現了有界回應時間。

工具與框架

  • Rust 剛發布了 1.87.0 版本,這不僅是一個增量更新,更是對十年的慶祝。
  • 一個名為 Charon 的 Rust 分析框架被提出。它旨在解決 Rust 生態系統中缺乏通用工具來介接編譯器、內部表示以及暴露適合分析的抽象語法樹 (AST) 的問題。Charon 作為一個分析 Rust 程式的萬能工具,提供了一個乾淨、穩定的 AST,可以作為許多分析的基礎。論文透過案例研究展示了其有用性,包括 Rust 驗證框架 (Aeneas)、Rust 到 C 的編譯器 (Eurydice),以及一個新的加密程式碼污點檢查器。它還展示了如何利用 Charon 框架重新實作一個流行的現有分析 (Rudra)。
  • 討論中提到了在 Rust 1.87 版本中遇到的 Io (Os) Error 問題。有使用者對 Rust 編譯器未能精確指出錯誤原因感到沮喪,並指出修復一個錯誤後可能出現全新的錯誤集。同時也提到一些 crates (例如 egui-plot) 未實作 Sync 和 Send 特徵,導致無法與執行緒一起使用,且無法手動實作,因此功能受限。
  • 一個名為 Lynx Proxy 的專案,是一個使用 Rust 構建的現代、高效能的代理工具。Rust 因其記憶體安全性和速度而被認為是構建此類效能關鍵工具的可靠選擇。
  • Blitz 這家為 League of Legends 等遊戲提供個人化教練服務的公司,為了應對不斷增長的用戶群,將其後端從 Elixir 遷移到了 Rust,並將資料庫從 Postgres 替換為 ScyllaDB。這次重寫和資料庫更換顯著降低了延遲,精簡了操作,並整合了基礎設施,減少了對 Redis、Riak 和 Oban queues 的依賴,並大幅降低了基礎設施成本和資料庫工程人員的負擔。Blitz 工程師認為 Rust 語言快速,編譯器強制編寫記憶體安全的程式碼,效能可與 C 語言媲美,並且相對於 Elixir 有更大的開發者人才庫。
  • 一篇關於 Rust 網頁框架 的文章探討了選擇框架的因素,包括安全性、靈活性、專案規模、發布情況、文件和社群支援。
  • 文章介紹了多個 前端網頁框架,它們利用 WebAssembly (Wasm) 使 Rust 程式碼能在網頁瀏覽器中運行。
    • Leptos: 現代全端框架,針對細粒度反應性 (reactivity)、伺服器端渲染 (SSR) 和無縫前後端整合而設計。
    • Yew: 最受歡迎的 Rust 框架之一,受 React 啟發,基於元件架構。
    • Perseus: 用於構建反應式網頁應用程式的框架,支援類似 Next.js 的功能,原生支援 SSR 和靜態站點生成 (SSG)。
    • Sauron: 微前端框架,受 Elm Architecture 啟發,支援事件、狀態管理、客戶端和伺服器端開發。
    • Dioxus: Rust UI 庫,用於構建反應式跨平台 UI 元件,支援網頁、行動和桌面應用程式開發。
    • Iced: GUI 庫,用於跨平台開發,架構受 Elm Architecture 啟發,內建支援反應式程式設計、類型安全和速度。
    • Tauri: 基於 Rust 的庫,利用網頁技術構建輕量級桌面應用程式,使用系統原生的 web view 而非 Chromium 和 Node.js。
  • 文章也介紹了多個 後端網頁框架,這些框架通常包含資料庫管理、會話處理、範本、ORM 和資料庫遷移等功能。
    • Rocket: 成熟的 Rust 網頁框架之一,對穩定版 Rust 提供 async/await 支援,注重類型安全和開發者人體工程學。
    • Actix Web: 生產級、高效能框架,基於 Actor 模型構建,以其速度、擴展性和功能豐富性聞名。
    • Axum: async-first、符合人體工程學的網頁框架,構建於 Tokio 運行時之上,平衡易用性與高效能,並整合了現代網頁需求。它對初學者來說更容易構建中間件。
    • Cot: 前沿框架,用於構建高效能、async-first API,構建於 Tokio 和 Hyper 之上,優先考慮模組化和速度而非內建功能。
    • Warp: 設計理念是快速、輕量和可組合,易於入門。
    • Gotham: 靈活的網頁框架,為穩定版 Rust 構建,提倡穩定性、安全性、保障和速度。
    • Loco: 受 Django 啟發的全端體驗,包含內建 ORM、生成器、範本和專案鷹架。
    • Rouille: 微網頁框架,採用線性請求和回應設計,適用於簡單應用程式,不包含內建功能但允許整合其他庫。
    • Thruster: 快速、基於中間件的框架,受 Koa 和 Express.js 啟發,支援 async/await、中間件、錯誤處理等。
    • Tide: 簡約框架,類似 Express.js、Sinatra 和 Flask,用於快速開發,提倡非同步構建網頁應用程式,使用 async-std。
    • Dropshot: 簡單輕量級的伺服器端庫,用於創建 REST API,不屬於完整的網頁框架。
  • 文章提供了一個表格比較了 Actix Web, Rocket, Axum, warp, Leptos, Cot, 和 Loco 這幾個熱門 Rust 網頁框架在 async/await、中間件、WebSockets、SSR/前端整合、ORM/DB 支援等方面的功能以及 GitHub 星級數量。並引用了開發者對 Axum、Rocket 和 Actix Web 的使用體驗評價。
  • LogRocket 是一個工具,可以幫助監控和追蹤 Rust 應用程式的前端效能,自動發現錯誤,並追蹤慢速網路請求和載入時間。

開發實踐與技巧

  • 文章介紹了 Rust 程式的基本結構,特別是 fn main() 函數。fn 是 function 的縮寫。main 函數是每個 Rust 程式的起點,程式從這裡開始執行。Rust 會自動尋找名為 main() 的函數,因此不能重新命名它。移除 main() 會導致編譯錯誤。Rust 是一個編譯型、強類型、系統級語言,需要一個清晰定義的起點和結構。
  • main() 後面的 () 表示該函數不接受任何輸入參數。其他函數可以接受輸入,參數會放在這些括號內。文章通過 greet 函數的例子詳細解釋了函數定義、參數傳遞和 println! 宏的使用。
  • 文章探討了如何在 Rust 專案中打包 (wrap) 外部的 C 和 C++ 函式庫。推薦使用 build.rs 文件,並盡量保持其簡單,只依賴 cc 和 bindgen 這兩個 crate。這樣可以減少依賴、使構建更可預測、簡化入門並提高可重現性。
  • 建議避免使用 pkg-config,除非絕對必要,因為它會引入系統依賴性並可能破壞可重現性。
  • 最佳實踐是提供一個 vendored feature (預設啟用),用於構建儲存在專案倉庫中 (通常作為 git submodule) 的 C/C++ 程式碼。使用者可以禁用此 feature 來連結系統函式庫。
  • bindgen feature 可以用於重新生成繫結,但建議將生成的 bindings.rs 文件提交到版本控制中。這樣可以避免使用者在構建時需要安裝 LLVM 或 bindgen。
  • 強調避免呼叫外部構建系統如 CMake 或 autotools。如果需要模仿 CMake 設定,應將邏輯轉換為 Rust 程式碼,使用 cc 和 build.define。
  • 建議使用 git submodules 來引用 C/C++ 函式庫,這使得程式碼可用且版本化。
  • 總結了保持 build.rs 簡單的核心原則:只使用 cc 和 bindgen;使用 feature flag 控制 vendored/system 和 bindgen/no-bindgen;不使用外部構建系統;通過 git submodule 引入 C/C++ 程式碼;提交生成的繫結文件。
  • 一個專業提示是啟用 cc 的 parallel feature,這會利用 jobserver 加速編譯。
  • 一篇部落格文章記錄了作者使用 Rust 實現一個 反向 Shell (Reverse Shell) 的探索,從標準 API 方法逐步轉向利用程序環境區塊 (PEB) 手動解析來提高隱蔽性。最初使用 Windows API 的版本在 VirusTotal 上的檢測分數為 28/72。通過手動解析 PEB 動態解析 API,避免了常規導入表,使得二進位檔案更難被靜態分析,VirusTotal 的檢測分數大幅下降到 2/72,最新結果是 11/66。這展示了僅通過 API 混淆就可以顯著提高隱蔽性。
  • 一篇關於構建 Rust 編譯器的經驗分享。Rust 以其安全性、速度和現代性著稱。
  • 一個提交到 r/haskell 的討論主題是關於在 Rust 中實現 Zero-Cost ‘Tagless Final’,使用 GADT 風格的枚舉。
  • 一個提交到 r/reactjs 的專案 Tuono 是一個使用 React 和 Rust 開發的全端網頁框架。目標是使 Rust 和 React 的網頁應用程式開發更流暢,並實現超快的效能。
  • 另一個專案是 Rolldown,一個用 Rust 開發的 JavaScript 打包工具 (bundler)。它是一個快速的、基於 Rust 的 JavaScript 打包工具,具有與 Rollup 相容的 API。

社群活動

  • Rust Readers Discord Discussion: Async Rust 活動將於 2025 年 6 月 23 日線上舉行。

Rust 日報 – 2025 年 6 月 3 日

核心語言特性更新與深入探討

  • 方法與關聯函數: Rust 允許您透過 impl 區塊為結構體定義方法. 方法使用 self 操作結構體實例,而關聯函數不需實例,常作為建構函式. self 有三種形式:&self (唯讀)、&mut self (可變) 和 self (取得所有權). 您可以使用點語法呼叫方法 (rect.area()),以及 :: 語法呼叫關聯函數 (Rectangle::new(...)). 方法定義可以分散在多個 impl 區塊中. 如果方法回傳 self,可以實現流暢的 方法鏈 (Method Chaining).
    • 原文連結: https://ift.tt/uD80XeK
  • 列舉 (Enums): 列舉是 Rust 中一種強大的類型,它能表示多個命名可能性中的一個,每個變體可以選擇性地攜帶數據. 這使得列舉非常適合建模狀態、選擇或複雜數據結構. Rust 標準函式庫中的 Option 和 Result 就是重要的列舉. 您也可以像結構體一樣為列舉定義方法.
    • 原文連結: https://ift.tt/L6zq4g5
  • 模式匹配 (Pattern Matching): 模式匹配是與列舉互動的關鍵方式. 使用 match 表達式時,Rust 編譯器會強制您處理列舉的所有可能變體,從而提高程式碼的安全性與可預測性. match 可以方便地解構列舉變體中攜帶的數據. 對於只關心特定變體的情況,if let 提供了更簡潔的語法. 如果僅需進行布林檢查,可以使用 matches! 巨集. 模式匹配在處理 Option 和 Result 類型時尤為重要,有助於安全地處理可能存在或不存在的值以及潛在的錯誤.
    • 原文連結: https://ift.tt/hY7r5sV, https://ift.tt/4MkpW18
  • Option 類型與 Null 安全: Rust 透過 Option<T> 列舉來解決 null 值帶來的常見運行時問題. Option 有兩個變體:Some(T) 包含一個值,None 表示值的缺失. 這迫使開發者在編譯時考慮值可能缺失的情況,從而增強程式碼的健壯性. 除了模式匹配,Option 也提供了 map、unwrap_or 等方法來轉換或提供預設值. 應避免在生產程式碼中無腦使用 unwrap(),因為它在遇到 None 時會導致程式 panic.
    • 原文連結: https://ift.tt/eiWUltA
  • 運行時初始化變數: 探討了在 Rust 中如何在運行時初始化變數的方法.
    • 原文連結: https://ift.tt/PyaL6WM
  • 閉包的內部工作: 分享了關於 Rust 閉包內部實現原理的資訊.
    • 原文連結: https://ift.tt/5k2meAI
  • RefCell 與可變數據:RefCell 是一種智慧指標,可用於使原本不可變的數據結構在特定情況下變得可變.
    • 原文連結: https://www.youtube.com/watch?v=ALOp8raO52Y

錯誤處理的結構化方法

  • 為什麼使用結構化錯誤: 文章探討了在 Rust 應用程式中使用結構化錯誤 (例如基於 thiserror 的列舉) 的好處. 即使應用程式主要只是傳播錯誤而不頻繁匹配特定類型,自訂錯誤類型也能提高程式碼的可讀性、可維護性和介面的描述性.
    • 原文連結: https://ift.tt/45pF68H
  • 自訂錯誤的優勢: 透過定義自訂錯誤類型,您可以清晰地列出函數的所有潛在失敗模式. 避免重複錯誤訊息,確保使用者體驗一致性. 將錯誤邏輯集中到類型定義中,使主要函數邏輯更簡潔. thiserror 的 derive 屬性 (#[error(...)]) 可以鼓勵您為錯誤添加上下文.
    • 原文連結: https://ift.tt/45pF68H
  • 權衡: 使用自訂錯誤類型會增加程式碼量和類型數量,通常需要引入 thiserror 等依賴. 同時也需要投入精力設計錯誤結構和命名. 在效能敏感的場景下,自訂錯誤和 anyhow::Error 各有其效能考量和權衡.
    • 原文連結: https://ift.tt/45pF68H

記憶體管理與安全

  • 無垃圾收集器: Rust 憑藉其所有權 (Ownership)、借用 (Borrowing) 和生命週期 (Lifetime) 系統實現記憶體安全,而無需垃圾收集器.
    • 原文連結: https://ift.tt/86TP7jh
  • 借用檢查器: Rust 的借用檢查器是確保記憶體安全的重要工具.
    • 原文連結: https://ift.tt/Omtxy15
  • 消除記憶體錯誤: Rust 被認為在消除記憶體錯誤方面非常有效.
    • 原文連結: https://ift.tt/szN6MOj
  • 生命週期問題: 有開發者提問並尋求幫助解決 Rust 中與 Vec 相關的「does not live long enough」生命週期錯誤.
    • 原文連結: https://ift.tt/WOZL1Al

生態系統與工具

  • 依賴管理: Rust 專案可能會有較多依賴. 文章介紹了如何使用 cargo tree 檢查依賴圖. 指出依賴可能帶來的安全審計和維護挑戰. 將依賴分類,並強調 Rust 特有的「安全隔離」(Safety Quarantine) crates,這些 crate 將 unsafe 程式碼封裝在安全的 wrapper 中,有助於限制不安全程式碼的影響範圍. 減少依賴的方法包括使用 cargo add 的 --no-default-features 選項 以及選擇依賴較少的替代 crate.
    • 原文連結: https://ift.tt/BscRmDK
  • Assemblist 函式庫: 介紹了一個新的 Rust 函式庫 assemblist,它提供了一種簡化不可變 builder 模式定義的方式,允許開發者以更自然的方式宣告和使用方法鏈,並支援鏈中的分支.
    • 原文連結: https://ift.tt/soSQFCv

專案與應用案例

  • 構建迷你 Shell 教學: 提供了一個透過約 100 行程式碼在 Rust 中構建功能完整的迷你 Shell 的教學,涵蓋命令執行、管道、命令歷史記錄和訊號處理.
    • 原文連結: https://ift.tt/mJ6qW87
  • 高速資料管道: 有團隊分享了如何利用 Rust 的效能特性構建亞毫秒級的資料管道.
    • 原文連結: https://ift.tt/eVdgnFm
  • 網路安全應用: Rust 在網路安全專案中的應用被提及.
    • 原文連結: https://ift.tt/yhbAGcK
  • 深度學習探索: 關於在 Rust 中進行深度學習的系列文章的第五部分被分享,內容涉及使用 Burn 框架處理 MNIST 數據.
    • 原文連結: https://ift.tt/obhRZtU
  • WebAssembly 效能比較: 比較了 Rust、Go 和 Zig 作為 WebAssembly 編譯目標時的效能.
    • 原文連結: https://ift.tt/qKA7mJF
  • Rust 在 Ubuntu 25 中: 探討了 Rust 在 Ubuntu 25 中用於安全高效系統命令的應用.
    • 原文連結: https://ift.tt/lZr92KO
  • 使用 Rust 構建新程式語言: Razen Lang 是一個完全使用 Rust 開發的程式語言,其目標是提供更簡單的語法.
    • 原文連結: https://ift.tt/xBlQHjX
  • 與 Go 和 Zig 的比較: 持續有文章比較 Rust 與其他系統程式設計語言如 Go 和 Zig,涵蓋記憶體管理、生產環境應用、區塊鏈開發和 WebAssembly 效能等方面.
    • 原文連結: https://ift.tt/Omtxy15, https://ift.tt/7R0HMkr, https://ift.tt/KUriBQA, https://ift.tt/K4wtJyZ, https://ift.tt/qKA7mJF
  • Figma 採用 Rust 的案例: 據報導,Figma 為了提高畫布渲染效能,從 TypeScript 轉向使用了 Rust.
    • 原文連結: https://ift.tt/qKA7mJF

Rust 日報 – 2025 年 6 月 2 日

核心語言特性更新與深入探討

  • 方法與關聯函數: Rust 允許您透過 impl 區塊為結構體定義方法. 方法使用 self 操作結構體實例,而關聯函數不需實例,常作為建構函式. self 有三種形式:&self (唯讀)、&mut self (可變) 和 self (取得所有權). 您可以使用點語法呼叫方法 (rect.area()),以及 :: 語法呼叫關聯函數 (Rectangle::new(...)). 方法定義可以分散在多個 impl 區塊中. 如果方法回傳 self,可以實現流暢的 方法鏈 (Method Chaining).
    • 原文連結: https://ift.tt/uD80XeK
  • 列舉 (Enums): 列舉是 Rust 中一種強大的類型,它能表示多個命名可能性中的一個,每個變體可以選擇性地攜帶數據. 這使得列舉非常適合建模狀態、選擇或複雜數據結構. Rust 標準函式庫中的 Option 和 Result 就是重要的列舉. 您也可以像結構體一樣為列舉定義方法.
    • 原文連結: https://ift.tt/L6zq4g5
  • 模式匹配 (Pattern Matching): 模式匹配是與列舉互動的關鍵方式. 使用 match 表達式時,Rust 編譯器會強制您處理列舉的所有可能變體,從而提高程式碼的安全性與可預測性. match 可以方便地解構列舉變體中攜帶的數據. 對於只關心特定變體的情況,if let 提供了更簡潔的語法. 如果僅需進行布林檢查,可以使用 matches! 巨集. 模式匹配在處理 Option 和 Result 類型時尤為重要,有助於安全地處理可能存在或不存在的值以及潛在的錯誤.
    • 原文連結: https://ift.tt/hY7r5sV, https://ift.tt/4MkpW18
  • Option 類型與 Null 安全: Rust 透過 Option<T> 列舉來解決 null 值帶來的常見運行時問題. Option 有兩個變體:Some(T) 包含一個值,None 表示值的缺失. 這迫使開發者在編譯時考慮值可能缺失的情況,從而增強程式碼的健壯性. 除了模式匹配,Option 也提供了 map、unwrap_or 等方法來轉換或提供預設值. 應避免在生產程式碼中無腦使用 unwrap(),因為它在遇到 None 時會導致程式 panic.
    • 原文連結: https://ift.tt/eiWUltA
  • 運行時初始化變數: 探討了在 Rust 中如何在運行時初始化變數的方法.
    • 原文連結: https://ift.tt/PyaL6WM
  • 閉包的內部工作: 分享了關於 Rust 閉包內部實現原理的資訊.
    • 原文連結: https://ift.tt/5k2meAI
  • RefCell 與可變數據:RefCell 是一種智慧指標,可用於使原本不可變的數據結構在特定情況下變得可變.
    • 原文連結: https://www.youtube.com/watch?v=ALOp8raO52Y

錯誤處理的結構化方法

  • 為什麼使用結構化錯誤: 文章探討了在 Rust 應用程式中使用結構化錯誤 (例如基於 thiserror 的列舉) 的好處. 即使應用程式主要只是傳播錯誤而不頻繁匹配特定類型,自訂錯誤類型也能提高程式碼的可讀性、可維護性和介面的描述性.
    • 原文連結: https://ift.tt/45pF68H
  • 自訂錯誤的優勢: 透過定義自訂錯誤類型,您可以清晰地列出函數的所有潛在失敗模式. 避免重複錯誤訊息,確保使用者體驗一致性. 將錯誤邏輯集中到類型定義中,使主要函數邏輯更簡潔. thiserror 的 derive 屬性 (#[error(...)]) 可以鼓勵您為錯誤添加上下文.
    • 原文連結: https://ift.tt/45pF68H
  • 權衡: 使用自訂錯誤類型會增加程式碼量和類型數量,通常需要引入 thiserror 等依賴. 同時也需要投入精力設計錯誤結構和命名. 在效能敏感的場景下,自訂錯誤和 anyhow::Error 各有其效能考量和權衡.
    • 原文連結: https://ift.tt/45pF68H

記憶體管理與安全

  • 無垃圾收集器: Rust 憑藉其所有權 (Ownership)、借用 (Borrowing) 和生命週期 (Lifetime) 系統實現記憶體安全,而無需垃圾收集器.
    • 原文連結: https://ift.tt/86TP7jh
  • 借用檢查器: Rust 的借用檢查器是確保記憶體安全的重要工具.
    • 原文連結: https://ift.tt/Omtxy15
  • 消除記憶體錯誤: Rust 被認為在消除記憶體錯誤方面非常有效.
    • 原文連結: https://ift.tt/szN6MOj
  • 生命週期問題: 有開發者提問並尋求幫助解決 Rust 中與 Vec 相關的「does not live long enough」生命週期錯誤.
    • 原文連結: https://ift.tt/WOZL1Al

生態系統與工具

  • 依賴管理: Rust 專案可能會有較多依賴. 文章介紹了如何使用 cargo tree 檢查依賴圖. 指出依賴可能帶來的安全審計和維護挑戰. 將依賴分類,並強調 Rust 特有的「安全隔離」(Safety Quarantine) crates,這些 crate 將 unsafe 程式碼封裝在安全的 wrapper 中,有助於限制不安全程式碼的影響範圍. 減少依賴的方法包括使用 cargo add 的 --no-default-features 選項 以及選擇依賴較少的替代 crate.
    • 原文連結: https://ift.tt/BscRmDK
  • Assemblist 函式庫: 介紹了一個新的 Rust 函式庫 assemblist,它提供了一種簡化不可變 builder 模式定義的方式,允許開發者以更自然的方式宣告和使用方法鏈,並支援鏈中的分支.
    • 原文連結: https://ift.tt/soSQFCv

專案與應用案例

  • 構建迷你 Shell 教學: 提供了一個透過約 100 行程式碼在 Rust 中構建功能完整的迷你 Shell 的教學,涵蓋命令執行、管道、命令歷史記錄和訊號處理.
    • 原文連結: https://ift.tt/mJ6qW87
  • 高速資料管道: 有團隊分享了如何利用 Rust 的效能特性構建亞毫秒級的資料管道.
    • 原文連結: https://ift.tt/eVdgnFm
  • 網路安全應用: Rust 在網路安全專案中的應用被提及.
    • 原文連結: https://ift.tt/yhbAGcK
  • 深度學習探索: 關於在 Rust 中進行深度學習的系列文章的第五部分被分享,內容涉及使用 Burn 框架處理 MNIST 數據.
    • 原文連結: https://ift.tt/obhRZtU
  • WebAssembly 效能比較: 比較了 Rust、Go 和 Zig 作為 WebAssembly 編譯目標時的效能.
    • 原文連結: https://ift.tt/qKA7mJF
  • Rust 在 Ubuntu 25 中: 探討了 Rust 在 Ubuntu 25 中用於安全高效系統命令的應用.
    • 原文連結: https://ift.tt/lZr92KO
  • 使用 Rust 構建新程式語言: Razen Lang 是一個完全使用 Rust 開發的程式語言,其目標是提供更簡單的語法.
    • 原文連結: https://ift.tt/xBlQHjX
  • 與 Go 和 Zig 的比較: 持續有文章比較 Rust 與其他系統程式設計語言如 Go 和 Zig,涵蓋記憶體管理、生產環境應用、區塊鏈開發和 WebAssembly 效能等方面.
    • 原文連結: https://ift.tt/Omtxy15, https://ift.tt/7R0HMkr, https://ift.tt/KUriBQA, https://ift.tt/K4wtJyZ, https://ift.tt/qKA7mJF
  • Figma 採用 Rust 的案例: 據報導,Figma 為了提高畫布渲染效能,從 TypeScript 轉向使用了 Rust.
    • 原文連結: https://ift.tt/qKA7mJF