鍵字速查手冊(cè):附錄 A 關(guān)鍵字表與 r 原始標(biāo)識(shí)符實(shí)戰(zhàn)(The Rust Programming Language))
教程文檔【免費(fèi)下載鏈接】bookThe Rust Programming Language項(xiàng)目地址https://gitcode.com/gh_mirrors/bo/book點(diǎn)擊查看免費(fèi)下載本篇技術(shù)指南以《The Rust Programming Language》TRPL官方倉庫中的「附錄 A關(guān)鍵字Keywords」為核心骨架系統(tǒng)梳理 Rust 當(dāng)前使用中的全部關(guān)鍵字、為未來預(yù)留的關(guān)鍵字以及突破命名限制的原始標(biāo)識(shí)符raw identifiers語法。文中所有結(jié)論均以倉庫源文檔 src/appendix-01-keywords.md及 nostarch 排版版 nostarch/appendix_a.md為基準(zhǔn)并結(jié)合書內(nèi)各章節(jié)源碼級(jí)講解交叉印證。讀完本文你將能夠快速查證任意標(biāo)識(shí)符是否可安全命名、理解每個(gè)關(guān)鍵字的職責(zé)邊界并掌握用r#前綴合法使用關(guān)鍵字尤其是跨 edition 集成遺留庫的完整實(shí)戰(zhàn)方案。附錄 A 在書中的定位與標(biāo)識(shí)符概念附錄 A 位于書籍正文之后與附錄 B運(yùn)算符與符號(hào)見 src/appendix-02-operators.md、附錄 Eeditions見 src/appendix-05-editions.md共同構(gòu)成全書語法的查證體系。該附錄的倉庫源文件為src/appendix-01-keywords.mdnostarch 目錄下的nostarch/appendix_a.md由其自動(dòng)生成文件頭部注釋明確說明「此文件由 /src/ 目錄內(nèi)容周期性生成所有修訂需在 /src/ 中完成」——這也解釋了為什么兩份文件正文完全一致。正文開篇即給出關(guān)鍵定義Rust 語言為當(dāng)前或未來使用保留了以下關(guān)鍵字。正因如此它們不能用作標(biāo)識(shí)符除非使用原始標(biāo)識(shí)符。標(biāo)識(shí)符是函數(shù)、變量、參數(shù)、結(jié)構(gòu)體字段、模塊、crate、常量、宏、靜態(tài)值、屬性、類型、trait 或生命周期的名稱。這意味著無論是定義一個(gè)函數(shù)、一個(gè)變量、一個(gè) struct 字段還是一個(gè) crate 名只要與關(guān)鍵字撞名編譯器都會(huì)拒絕。理解這份清單是編寫可編譯代碼、排查命名沖突錯(cuò)誤的前提。當(dāng)前使用中的關(guān)鍵字共 39 個(gè)以下列表完整收錄附錄 A 中「當(dāng)前使用中」的全部 39 個(gè)關(guān)鍵字依據(jù) src/appendix-01-keywords.md 逐條統(tǒng)計(jì)每項(xiàng)保留附錄原始功能描述并按使用場(chǎng)景歸類方便速查??刂屏髋c分支break立即退出循環(huán)。continue跳到循環(huán)的下一次迭代。elseif與if let控制流結(jié)構(gòu)的兜底分支。if根據(jù)條件表達(dá)式的結(jié)果分支。infor循環(huán)語法的一部分。loop無條件循環(huán)。match將值與模式進(jìn)行匹配書中 ch06-02-match.md 有完整專題。return從函數(shù)返回。while基于表達(dá)式結(jié)果條件循環(huán)。for遍歷迭代器中的項(xiàng)、實(shí)現(xiàn) trait或指定高階生命周期higher ranked lifetime。類型、項(xiàng)定義與代碼組織const定義常量項(xiàng)或常量裸指針。enum定義枚舉。extern鏈接外部函數(shù)或變量FFI。fn定義函數(shù)或表示函數(shù)指針類型。impl實(shí)現(xiàn)固有inherent功能或 trait 功能。let綁定變量。mod定義模塊。static全局變量或持續(xù)整個(gè)程序執(zhí)行期間的生命周期。struct定義結(jié)構(gòu)體。trait定義 trait。type定義類型別名或關(guān)聯(lián)類型。union定義聯(lián)合體僅在 union 聲明中使用時(shí)才作為關(guān)鍵字即union關(guān)鍵字只有在聲明 union 時(shí)生效其他語境下并非關(guān)鍵字。作用域、路徑與可見性crate在模塊路徑中指代 crate 根。self方法主體或當(dāng)前模塊。Self所定義或所實(shí)現(xiàn)類型的類型別名注意大小寫敏感Self與self是兩個(gè)不同的關(guān)鍵字。super當(dāng)前模塊的父模塊。pub標(biāo)記結(jié)構(gòu)體字段、impl塊或模塊中的公共可見性。use將符號(hào)引入當(dāng)前作用域。as執(zhí)行基本類型轉(zhuǎn)換primitive casting、消除包含某條目的具體 trait 的歧義或在use語句中重命名條目。所有權(quán)、借用與閉包move使閉包獲得其所有捕獲的所有權(quán)。mut標(biāo)記引用、裸指針或模式綁定中的可變性。ref按引用綁定。異步編程async返回一個(gè)Future而不是阻塞當(dāng)前線程。await掛起執(zhí)行直到某個(gè)Future的結(jié)果就緒。布爾字面量與其余關(guān)鍵字false布爾假字面量。true布爾真字面量。dyn對(duì) trait 對(duì)象的動(dòng)態(tài)分發(fā)。unsafe標(biāo)記不安全代碼、函數(shù)、trait 或?qū)崿F(xiàn)。where標(biāo)記約束類型的子句。關(guān)鍵字語義深入從附錄到正文的交叉印證附錄 A 只給出每個(gè)關(guān)鍵字的一句話功能描述真正的實(shí)戰(zhàn)語義分布在書籍各章。以下選取幾組高頻關(guān)鍵字結(jié)合倉庫內(nèi)對(duì)應(yīng)章節(jié)展開說明幫助你理解「為何這些詞被保留」。async 與 await異步編程的兩個(gè)支柱async與await是附錄在 2018 版Rust 2018 edition新增的關(guān)鍵字。src/ch17-01-futures-and-syntax.md 指出async fn實(shí)際上會(huì)被編譯器改寫為「返回Future的普通函數(shù)函數(shù)體是一個(gè) async 塊」async 塊是惰性的Rust 會(huì)避免在真正需要前執(zhí)行異步代碼。await關(guān)鍵字只能出現(xiàn)在 async 函數(shù)或 async 塊內(nèi)部因?yàn)楫惒酱a需要運(yùn)行時(shí)runtime驅(qū)動(dòng)async fn page_title(url: str) - OptionString { let text trpl::get(url).await.text().await; text.html().find_first(title).map(|title| title.inner_html()) }書中還演示了async move塊的用法并明確說明main不能標(biāo)記為async——異步代碼需要 runtime如 Tokio、trpl::block_on才能執(zhí)行。這正是async/await被保留、且main只能作為普通函數(shù)入口的原因。use、as 與 pub use作用域?qū)氲耐暾ぞ呦鋟se將符號(hào)引入作用域as提供重命名能力pub use則實(shí)現(xiàn)「再導(dǎo)出re-export」。本章節(jié)在 src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md 中有完整教學(xué)use std::collections::HashMap; // 直接導(dǎo)入項(xiàng) use std::io::Result as IoResult; // as 別名解決同名沖突 pub use crate::front_of_house::hosting; // 再導(dǎo)出讓外部調(diào)用方用更短路徑要點(diǎn)包括use只在聲明處所在作用域內(nèi)生效換一個(gè)作用域需要重新引入引入函數(shù)時(shí)慣例是導(dǎo)入其父模塊而引入 struct、enum 等項(xiàng)時(shí)慣例是導(dǎo)入完整路徑同名類型沖突時(shí)可用as起別名或用std::fmt::Result/std::io::Result的父模塊路徑區(qū)分嵌套路徑use std::{io, io::Write}與 glob 運(yùn)算符use std::collections::*;可精簡(jiǎn)導(dǎo)入列表。這些能力共同決定了use、as、self、pub等關(guān)鍵字在路徑體系中的不可替代地位。self / Self / super / crate模塊路徑四件套self表示當(dāng)前模塊可用于use self::module::Item顯式區(qū)分路徑起點(diǎn)Self是「正在定義或?qū)崿F(xiàn)的類型」的類型別名在impl塊與 trait 方法返回值中大量出現(xiàn)如fn new() - Selfsuper指向父模塊用于相對(duì)路徑上行crate指向 crate 根構(gòu)成絕對(duì)路徑的起點(diǎn)如crate::front_of_house::hosting。dyn、move、mut、ref與語言核心機(jī)制綁定的保留詞dyn用于 trait 對(duì)象實(shí)現(xiàn)動(dòng)態(tài)分發(fā)見 src/ch18-02-trait-objects.md。Boxdyn Draw這類寫法讓一組實(shí)現(xiàn)了同一 trait 的不同類型可以被統(tǒng)一引用。move讓閉包強(qiáng)制獲得捕獲變量的所有權(quán)見 src/ch13-01-closures.md常用于將數(shù)據(jù)移入新線程等需要所有權(quán)轉(zhuǎn)移的場(chǎng)景。mut貫穿引用與模式綁定是可變性的唯一入口ref在模式中按引用綁定與在表達(dá)式中的借用相對(duì)應(yīng)模式語法詳解見 src/ch19-03-pattern-syntax.md。unsafe是 Rust 中「不保證安全」的顯式開關(guān)見 src/ch20-01-unsafe-rust.md用于解引用裸指針、調(diào)用外部函數(shù)、訪問可變靜態(tài)量、實(shí)現(xiàn)不安全 trait 等場(chǎng)景。為未來保留的關(guān)鍵字14 個(gè)以下關(guān)鍵字目前沒有任何功能但被 Rust 預(yù)留用于未來可能的使用。把它們當(dāng)作不可用的標(biāo)識(shí)符即可abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield值得注意的是這份「保留」清單是動(dòng)態(tài)的其中try已在 2018 edition 中從「保留」轉(zhuǎn)為「當(dāng)前使用」gen則在較新版本中開始承載生成器相關(guān)語義。附錄 A 強(qiáng)調(diào)這些詞「尚不具備任何功能」因此即便當(dāng)前編譯器允許在某些位置使用如box曾作為老式指針語法也不應(yīng)依賴其未定義的行為。如需完整清單可直接核對(duì)倉庫中的 src/appendix-01-keywords.md。原始標(biāo)識(shí)符Raw Identifiers用 r# 合法使用關(guān)鍵字原始標(biāo)識(shí)符是允許你在正常情況下不允許使用關(guān)鍵字的位置使用關(guān)鍵字的語法只需在關(guān)鍵字前加上r#前綴即可。例如match是關(guān)鍵字。如果試圖編譯下面這個(gè)以match命名的函數(shù)源碼對(duì)應(yīng)倉庫中的src/main.rs文件fn match(needle: str, haystack: str) - bool { haystack.contains(needle) }編譯器會(huì)報(bào)出如下錯(cuò)誤error: expected identifier, found keyword match -- src/main.rs:4:4 | 4 | fn match(needle: str, haystack: str) - bool { | ^^^^^ expected identifier, found keyword錯(cuò)誤信息表明你不能把關(guān)鍵字match用作函數(shù)標(biāo)識(shí)符。要將match用作函數(shù)名需要使用原始標(biāo)識(shí)符語法fn r#match(needle: str, haystack: str) - bool { haystack.contains(needle) } fn main() { assert!(r#match(foo, foobar)); }這段代碼可以無錯(cuò)編譯。注意r#前綴同時(shí)出現(xiàn)在函數(shù)定義處和main中調(diào)用處。原始標(biāo)識(shí)符的三大實(shí)際用途自由命名原始標(biāo)識(shí)符允許你使用任何你選擇的詞作為標(biāo)識(shí)符即使該詞恰巧是保留關(guān)鍵字。這給了你更多選擇標(biāo)識(shí)符名的自由度。跨語言集成當(dāng)你的 Rust 程序需要與某種「不把這些詞當(dāng)關(guān)鍵字」的語言編寫的程序集成時(shí)例如通過 FFI 調(diào)用外部符號(hào)r#讓這些符號(hào)可以直接在 Rust 側(cè)引用???edition 使用庫原始標(biāo)識(shí)符還允許你使用以與你 crate 不同的 Rust edition 編寫的庫???edition 集成r#try 實(shí)戰(zhàn)場(chǎng)景第三點(diǎn)對(duì)應(yīng)附錄 E 的說明。以try為例try在 2015 edition 中不是關(guān)鍵字但在 2018、2021 和 2024 edition 中都是關(guān)鍵字src/appendix-05-editions.md 明確記載當(dāng)前有 2015、2018、2021、2024 四種 edition本書正文按 2024 edition 編寫。假設(shè)你依賴一個(gè)用 2015 edition 編寫、并導(dǎo)出了名為try的函數(shù)的庫你的項(xiàng)目運(yùn)行在 2018 或更高 editiontry已是關(guān)鍵字直接寫try(...)無法編譯解決辦法是使用原始標(biāo)識(shí)符語法r#try來調(diào)用該函數(shù)。edition 機(jī)制保證了「同一份代碼在不同 edition 下解析方式不同」而r#正是跨過這條解析邊界的通行證。附錄 E 還指出edition 切換只影響編譯器最初解析代碼的方式因此「2015 項(xiàng)目依賴 2018 庫」與「2018 項(xiàng)目依賴 2015 庫」都可以正常編譯鏈接新關(guān)鍵字的引入正是 edition 可能帶來不兼容變更的典型例子。如何在本倉庫中查閱與驗(yàn)證附錄 A 源文檔src/appendix-01-keywords.md含原始標(biāo)識(shí)符完整示例與錯(cuò)誤輸出nostarch 排版版見 nostarch/appendix_a.md兩者內(nèi)容一致。附錄 B運(yùn)算符與符號(hào)src/appendix-02-operators.md覆蓋::、-、等與關(guān)鍵字互補(bǔ)的符號(hào)語法。附錄 Eeditionssrc/appendix-05-editions.md解釋 edition 與關(guān)鍵字演進(jìn)的關(guān)聯(lián)、Cargo.toml中edition鍵的默認(rèn)值缺省為 2015及cargo fix自動(dòng)升級(jí)工具。正文交叉章節(jié)use/as/pub usesrc/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md、async/awaitsrc/ch17-01-futures-and-syntax.md、dyntrait 對(duì)象src/ch18-02-trait-objects.md、模式中的mut/refsrc/ch19-03-pattern-syntax.md、unsafesrc/ch20-01-unsafe-rust.md。建議把本文或附錄 A 源文件作為日常開發(fā)的關(guān)鍵字速查表遇到expected identifier, found keyword編譯錯(cuò)誤時(shí)先核對(duì)目標(biāo)詞是否在本附錄清單中若是改用r#前綴或按附錄 E 的方法評(píng)估是否需要切換 edition。這樣既能寫出符合 edition 規(guī)范的現(xiàn)代 Rust 代碼也能平滑兼容歷史庫與外部符號(hào)。贊分享教程文檔【免費(fèi)下載鏈接】bookThe Rust Programming Language項(xiàng)目地址https://gitcode.com/gh_mirrors/bo/book點(diǎn)擊查看免費(fèi)下載相關(guān)推薦5 輪對(duì)話把模糊念頭逼成可執(zhí)行決策grill-me 無狀態(tài)訪談協(xié)議全解5 輪對(duì)話把模糊念頭逼成可執(zhí)行決策grill me 無狀態(tài)訪談協(xié)議全解 腦子里有個(gè)念頭轉(zhuǎn)了兩天說不清楚方向像是對(duì)的但每想推進(jìn)一步就撞上一個(gè)沒答案的細(xì)節(jié)。教程文檔《The Rust Programming Language》附錄 D 精講rustfmt、cargo fix、Clippy 與 rust-analyzer 開發(fā)工具鏈實(shí)戰(zhàn)《The Rust Programming Language》附錄 D 精講rustfmt、cargo fix、Clippy 與 rust analyzer教程文檔Rust 關(guān)鍵字速查手冊(cè)C 開發(fā)者視角下的核心語法對(duì)照與實(shí)戰(zhàn)要義Rust 關(guān)鍵字速查手冊(cè)C 開發(fā)者視角下的核心語法對(duì)照與實(shí)戰(zhàn)要義 本文是 Rust for C Programmers https://link.gitcod文檔教程上一篇從裸機(jī)到能開機(jī)OpCore-Simplify 的 OpenCore EFI 自動(dòng)配置路徑下一篇深入解析 ESLint 文檔站的 Rule 宏組件從參數(shù)模型到渲染實(shí)現(xiàn)創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考