恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Learn X in Y Minutes 系列之 Rust 速成指南:es/rust.md 深度解析
首页
资讯中心
/
Learn X in Y Minutes 系列之 Rust 速成指南:es/rust.md 深度解析
Learn X in Y Minutes 系列之 Rust 速成指南:es/rust.md 深度解析
发布时间:2026/10/8 18:27:18
文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载本指南以 learnxinyminutes-docs 仓库中的 es/rust.md西班牙语版 Rust 教学文档为骨架结合英文原版 rust.md 的补充细节逐节拆解 Rust 的语法、类型系统、模式匹配、控制流与内存安全模型。读完本文你将掌握一份可编译、可运行、带完整注释的 Rust 入门代码learnrust.rs并理解 Rust 如何在无垃圾回收器GC与无运行时的情况下实现高性能 内存安全的设计目标。1. 文档在仓库中的定位与校验机制learnxinyminutes-docs 是一个以用代码书写的文档为核心形态的编程语言速成教程仓库正如 README.md 所述它提供以合法、带注释的代码形式呈现并逐行讲解的多种语言教程。仓库根目录下的 rust.md 是英文原版而 es/rust.md 是由译者 Razican 翻译的西班牙语版本同一教程在仓库中还拥有 de/rust.md、fr/rust.md、ja/rust.md、zh-cn/rust.md、ru/rust.md、pt-br/rust.md 等 11 个语言版本体现了该项目多语言协作翻译的运营方式。每篇文档顶部都带有 YAML frontmatter声明name、contributors、translators、filename等元信息。仓库用 lint/frontmatter.py 统一校验这些键的合法性与类型例如contributors必须是二元字符串列表、filename必须是字符串并用 lint/encoding.sh 强制所有.md文件保持 UTF-8 无 BOM 编码。es/rust.md 的 frontmatter 中filename: learnrust.rs提示整篇教程的代码主体可以直接保存为一个可编译的 Rust 源文件。2. Rust 语言背景无 GC、无运行时的高性能系统语言文档引言部分交代了 Rust 的核心定位它由 Mozilla Research 开发将低层性能控制与高层语言的便利性、安全保障结合在一起。最关键的承诺是Rust 不需要垃圾回收器garbage collector也不需要重量级运行时因此 Rust 库可以成为 C 语言的即插即用替代品drop-in replacement。从版本演进看Rust 0.1 于 2012 年 1 月发布此后 3 年迭代极快社区一度建议使用 nightly 构建而非稳定版2015 年 5 月 15 日发布的 Rust 1.0 带来了完整的向后兼容保证并确立了每 6 周一个版本的 train-based 发布模型1.0 发布的同时发布了 1.1 beta。文档同时指出尽管 Rust 属于相对底层的语言它也吸收了高阶语言中常见的函数式概念因此既快又易写。这些背景与仓库中 C、C 等系统语言教程的定位形成对照——Rust 试图在安全性与底层控制之间取得平衡。3. 代码教程总览一份可编译的 learnrust.rs教程的核心是一段约 270 行的完整 Rust 程序按主题分为 5 大板块概念基础Basics函数、变量、数字、字符串、数组、元组类型系统Types结构体、枚举、泛型、方法、trait模式匹配Pattern matchingmatch 表达式控制流Control flowfor、while、loop、if内存安全与指针Memory safety pointersBox、所有权移动、借用下面按板块逐节讲解。为使中文读者易读代码注释依据 es/rust.md 的内容译成中文并融入英文原版 rust.md 中更完整的细节如文档注释、非词法生命周期说明等。3.1 注释行注释、块注释与文档注释// 这是注释。单行注释长这样... // 可以连续多行。 /* 块注释 /* 块注释可以嵌套。 */ */ /// 文档注释长这样支持 Markdown 语法。 /// # Examples /// /// /// let five 5 /// Rust 提供三类注释//行注释、可嵌套的/* ... */块注释以及///文档注释支持 Markdown可配合cargo doc生成 API 文档。文档注释中的代码块会被当作 doctest 运行这是 Rust 文档驱动开发的重要特性。3.2 概念基础函数、变量与数字#[allow(dead_code)] // 函数 // i32 是 32 位有符号整数类型 fn add2(x: i32, y: i32) - i32 { // 隐式返回不加分号 x y } #[allow(unused_variables)] #[allow(unused_assignments)] #[allow(dead_code)] // 主函数 fn main() { // 数字 // // 不可变绑定 let x: i32 1; // 整数/浮点数字面量后缀 let y: i32 13i32; let f: f64 1.3f64; // 类型推断 // 大多数情况下Rust 编译器能推断变量类型因此无需显式标注类型。 // 本教程多处显式标注类型仅为演示目的多数场景交给类型推断即可。 let implicit_x 1; let implicit_f 1.3; // 算术运算 let sum x y 13; // 可变变量 let mut mutable 1; mutable 4; mutable 2;这一节确立了 Rust 的几个核心心智模型函数签名fn 名称(参数: 类型) - 返回类型函数体最后一个不带分号的表达式即为返回值隐式返回带分号则是语句、返回()。let 绑定默认不可变要声明可变变量必须显式写let mut这是 Rust 默认安全取向的体现——编译器会拒绝未声明mut却尝试复制的代码。字面量后缀13i32、1.3f64直接指定字面量类型便于在推断不明确时消除歧义。类型推断let implicit_x 1无需标注类型编译器自动推断为i32。代码顶部出现的#[allow(dead_code)]、#[allow(unused_variables)]等属性是刻意为之因为本教程只演示语法并不真正使用所有变量这些属性可以压制编译告警保证示例直接通过编译。3.3 字符串str、String 与切片// 字符串 // // 字符串字面量 let x: str hello world!; // 打印到控制台 println!({} {}, f, x); // 1.3 hello world! // String —— 在堆heap上分配的字符串 // 存储为 Vecu8始终保存合法的 UTF-8 序列且不以 null 结尾。 let s: String hello world.to_string(); // 字符串切片slice—— 对另一字符串的不可变视图 // 它本质上是指向字符串内容的不可变指针 长度并不真正持有字符数据 // 只是指向一段静态分配或属于其他对象此处是 s的缓冲区的开头与长度。 // 字符串切片之于字符串就像 [u8] 之于 VecT。 let s_slice: str s; println!({} {}, s, s_slice); // hello world hello worldRust 区分两种字符串str字符串切片是栈上的指针 长度视图不持有数据String是堆分配的、可变增长的所有权字符串。s对String取切片是借用操作详见第 3.7 节。println!({} {}, f, x)演示了格式化占位符{}Display 格式。3.4 数组、向量与切片// 数组Vectors/arrays// // 固定大小的数组 let four_ints: [i32; 4] [1, 2, 3, 4]; // 动态数组向量 let mut vector: Veci32 vec![1, 2, 3, 4]; vector.push(5); // 切片 —— 对向量或数组的不可变视图 // 与字符串切片类似只不过针对的是数组/向量 let slice: [i32] vector; // 用 {:?} 以调试风格打印 println!({:?} {:?}, vector, slice); // [1, 2, 3, 4, 5] [1, 2, 3, 4, 5][T; N]是编译期定长的数组VecT是堆上可增长的动态数组通过vec!宏创建、push追加[T]切片则是对两者的不可变视图。{:?}使用Debug格式化输出是调试打印的惯用手段对应的{}是Display。3.5 元组异构定长集合// 元组 // // 元组是固定大小的值集合元素类型可以不同 let x: (i32, str, f64) (1, hello, 3.4); // 解构 let let (a, b, c) x; println!({} {} {}, a, b, c); // 1 hello 3.4 // 索引访问 println!({}, x.1); // hello元组把多种类型的值组合成一个定长集合(1, hello, 3.4)的类型是(i32, str, f64)。可以通过let (a, b, c) x一次性解构也可以通过x.1按下标索引——这一模式 解构的思想会在 match 一节进一步放大。3.6 类型系统结构体、枚举、泛型、方法与 trait// 类型 // // 结构体 struct Point { x: i32, y: i32, } let origin: Point Point { x: 0, y: 0 }; // 字段无名的结构体称为元组结构体 struct Point2(i32, i32); let origin2 Point2(0, 0); // 类似 C 的基本枚举 enum Direction { Left, Right, Up, Down, } let up Direction::Up; // 带字段的枚举 // 如果你想让某个值可选标准库提供了 Option enum OptionalI32 { AnI32(i32), Nothing, } let two: OptionalI32 OptionalI32::AnI32(2); let nothing OptionalI32::Nothing; // 泛型 // struct FooT { bar: T } // 标准库中以 Option 形式定义了这个模式 // Option 被用于通常需要空指针null的场合 enum OptionalT { SomeVal(T), NoVal, } // 方法 // implT FooT { // 方法接收显式的 self 参数 fn bar(self) - T { // self 被不可变借用 self.bar } fn bar_mut(mut self) - mut T { // self 被可变借用 mut self.bar } fn into_bar(self) - T { // 这里 self 被消费所有权转移 self.bar } } let a_foo Foo { bar: 1 }; println!({}, a_foo.bar()); // 1 // trait其他语言中的接口或 typeclass// trait FrobnicateT { fn frobnicate(self) - OptionT; } implT FrobnicateT for FooT { fn frobnicate(self) - OptionT { Some(self.bar) } } let another_foo Foo { bar: 1 }; println!({:?}, another_foo.frobnicate()); // Some(1) // 函数指针类型 // fn fibonacci(n: u32) - u32 { match n { 0 1, 1 1, _ fibonacci(n - 1) fibonacci(n - 2), } } type FunctionPointer fn(u32) - u32; let fib : FunctionPointer fibonacci; println!(Fib: {}, fib(4)); // 5这一板块覆盖 Rust 类型系统的核心构件结构体struct命名命段的Point { x, y }以及字段匿名的元组结构体Point2(i32, i32)可通过origin2.0索引。枚举enum从类似 C 的无字段枚举Direction::Up到携带数据的枚举OptionalI32::AnI32(2)。这种代数数据类型是 Rust 表达可空值与错误的核心标准库OptionT就是Some(T) / None的泛型化用于替代空指针。泛型struct FooT { bar: T }让类型参数化教程中手写的OptionalT正是标准库OptionT的教学复刻。方法与 self 的三种形态implT FooT中的方法必须显式接收self——self不可变借用、mut self可变借用、self消费所有权。三种签名对应三种调用语义是 Rust所有权贯穿 API 设计的直接体现。trait类似其他语言的接口/typeclassimplT FrobnicateT for FooT为类型实现行为返回值OptionT与标准库衔接。函数指针类型英文原版补充type FunctionPointer fn(u32) - u32将函数作为一等公民赋值给变量fib(4)输出 5。3.7 模式匹配match 表达式的威力// 模式匹配 // let foo OptionalI32::AnI32(1); match foo { OptionalI32::AnI32(n) println!(its an i32: {}, n), OptionalI32::Nothing println!(its nothing!), } // 进阶模式匹配 struct FooBar { x: i32, y: OptionalI32 } let bar FooBar { x: 15, y: OptionalI32::AnI32(32) }; match bar { FooBar { x: 0, y: OptionalI32::AnI32(0) } println!(The numbers are zero!), FooBar { x: n, y: OptionalI32::AnI32(m) } if n m println!(The numbers are the same), FooBar { x: n, y: OptionalI32::AnI32(m) } println!(Different numbers: {} {}, n, m), FooBar { x: _, y: OptionalI32::Nothing } println!(The second number is Nothing!), }match是 Rust 最强大的控制结构要求穷尽所有分支编译器强制且每个分支可以绑定变量、嵌套解构并附加if守卫guard第一段匹配解构OptionalI32::AnI32(n)把内部值绑定到n第二段展示结构体模式FooBar { x: n, y: OptionalI32::AnI32(m) }同时解构外层结构体与内层枚举if n m是守卫条件_通配符匹配任意值。这种穷尽 解构 守卫的组合正是 Rust 用类型系统消灭空指针与未处理分支的根基。3.8 控制流for、if、while 与 loop// 控制流 // // for 循环/迭代 let array [1, 2, 3]; for i in array { println!({}, i); } // 范围Range for i in 0u32..10 { print!({} , i); } println!(); // 输出 0 1 2 3 4 5 6 7 8 9 // if if 1 1 { println!(Maths is working!); } else { println!(Oh no...); } // if 作为表达式 let value if true { good } else { bad }; // while 循环 while 1 1 { println!(The universe is operating normally.); // break 语句跳出 while 循环避免无用迭代 break } // 无限循环 loop { println!(Hello!); // break 语句跳出循环 break } }要点for遍历直接对数组/向量/范围迭代无需手写索引。范围语法0u32..10表示左闭右开区间[0, 10)输出0 1 2 ... 9。if 是表达式let value if true { good } else { bad }—— 每个分支的最后一个表达式即分支值Rust 中几乎所有控制结构都是表达式。while 与 looploop是永远循环的原生结构与while true等价但语义更明确教程中通过break立即退出避免死循环——这也说明直接复制本节代码运行时break保证了程序可以正常结束。3.9 内存安全与指针所有权、移动与借用// 内存安全与指针 // // 所有权指针owned pointer——同一时刻只能有一个东西拥有这个指针 // 这意味着当 Box 离开作用域时会被安全地自动释放。 let mut mine: Boxi32 Box::new(3); *mine 5; // 解引用 // 这里 now_its_mine 取得了 mine 的所有权。换句话说mine 被移动moved。 let mut now_its_mine mine; *now_its_mine 2; println!({}, now_its_mine); // 7 // println!({}, mine); // 这行无法编译因为 now_its_mine 现在拥有该指针 // 引用Reference——指向其他数据的不可变指针 // 当对一个值取引用时我们说这个值被借用borrowed。 // 当一个值被不可变借用时它不能被修改或移动。 // 借用从创建处持续到其最后一次使用非词法生命周期Non-Lexical Lifetimes。 let mut var 4; var 3; let ref_var: i32 var; println!({}, var); // 与 mine 不同var 仍可继续使用 println!({}, *ref_var); // *ref_var 6; // 这行无法编译因为 ref_var 是不可变引用 // 上面 ref_var 最后一次使用之后借用结束因此下面的重新赋值是允许的。 var 2; // 可变引用 // 当一个值被可变借用时它完全不能被访问。 let mut var2 4; let ref_var2: mut i32 mut var2; *ref_var2 2; // * 用于解引用指向被可变借用的 var2 println!({}, *ref_var2); // 6 // ref_var2 的类型是 mut i32存的是对 i32 的引用而非值本身。 // 上面 ref_var2 最后一次使用之后借用结束因此下面的重新赋值是允许的。 var2 2; }这一节是全篇的灵魂阐释 Rust 内存安全的三大支柱所有权与移动Ownership MoveBoxi32是堆上分配的智能指针同一时刻只有一个变量拥有它。let mut now_its_mine mine把所有权移动给新变量旧变量mine此后不可再用代码中的注释// println!({}, mine);若取消注释将无法编译。离开作用域时Box自动释放堆内存——无需 GC也不会有双重释放。不可变借用Borrowinglet ref_var: i32 var创建引用期间var不能被修改或移动但借用结束最后一次使用之后即可恢复写权限。英文原版明确这一点对应非词法生命周期NLL借用的有效期是创建处到最后一次使用而非整个词法作用域因此示例中ref_var最后使用后var 2得以合法执行。可变借用Mutable Referencelet ref_var2: mut i32 mut var2期间var2完全不能被其他路径访问防止数据竞争解引用*ref_var2 2修改原值借用结束后var2 2才被允许。这组规则被编译器在编译期强制检查使 Rust 在不引入运行时开销的前提下杜绝悬垂指针、数据竞争与 use-after-free——这正是文档引言所称无 GC、无运行时即实现安全保证的底层机制。4. 亲手运行从文档到可执行程序教程 frontmatter 中的filename: learnrust.rs表明你可以把第 3 节各代码片段按顺序拼接成一个learnrust.rs文件fn main()及全部struct/enum/trait定义放在同一文件内然后使用 Rust 工具链编译运行rustc learnrust.rs ./learnrust若尚未安装 Rust可通过官方推荐的rustup工具链管理器安装rustc与cargo。需要注意示例中的while 1 1与loop均带有break因此程序能正常退出而#[allow(dead_code)]、#[allow(unused_variables)]等属性则是为了压制教学代码中未使用变量/未调用的函数告警使示例可以零警告通过编译。5. 版本差异与仓库延伸对比英文原版 rust.md 与西班牙语版 es/rust.md 可以看到es 版完整继承并翻译了原版结构同样分为 Basics、Types、Pattern matching、Control flow、Memory safety pointers 五大板块原版额外包含的文档注释示例、bar/bar_mut/into_bar三种 self 方法形态、fibonacci函数指针以及 NLL 借用说明在本指南第 3 节中均已融合讲解中文读者还可以对照 zh-cn/rust.md 查看中译版本。这种同源多语言的组织方式正是 learnxinyminutes-docs 项目的协作模式每个语言目录下都维护着同一套教程骨架的本地化版本。若想继续深入可以对照同仓库中 C 与 C 的入门文档c.md、c.md体会 Rust 在无 GC 系统语言路线上的取舍阅读仓库根目录 CONTRIBUTING.md 了解贡献规范参考 README.md 了解项目以代码书写文档的格式约定将本教程代码放入 Rust 官方 Playground 在线运行验证文档 es/rust.md 末尾的Lectura adicional部分也推荐了该途径。es/rust.md 本身也提示这只是理解 Rust 最重要概念的基础入门Rust 远不止于此——但掌握这五大板块基础语法、类型系统、模式匹配、控制流、内存安全已经足以读懂绝大多数 Rust 示例代码并迈出编写自己第一个安全、高性能 Rust 程序的第一步。赞分享文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载相关推荐Rust 入门实战指南Learn X in Y Minutes 文档库 el/rust.md 深度解读Rust 入门实战指南Learn X in Y Minutes 文档库 el/rust.md 深度解读 Rust 是由 Mozilla Research 开发文档教程Learn X in Y minutes 系列CSS 层叠样式表核心技术速成指南Learn X in Y minutes 系列CSS 层叠样式表核心技术速成指南 导读 CSSCascading Style Sheets层叠样式表是与文档教程掌握 Hy基于 Python 构建的 Lisp 方言速成指南Learn X in Y minutes 系列掌握 Hy基于 Python 构建的 Lisp 方言速成指南Learn X in Y minutes 系列 Hy 是一种构建在 Python 之上的 Li文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考