以下是 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。