Rust 程序设计语言 简体中文版 1.85.0出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名 Rust 程序员,欢迎! Rust 程序的结构 现在,让我们回过头来仔细看看这个 “Hello, world!” 程序。这是第一块拼图: fn main() { } 这几行定义了一个名叫 main 的函数。main 函数是一个特殊的函数:在可执行的 Rust 程序中, 它总是最先运行的代码。第一行代码声明了一个叫做 main [dependencies] 这个文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。 第一行,[package],是一个片段 section 标题,表明下面的语句用来配置一个包。随着我们 在这个文件增加更多的信息,还将增加其他 section。 接下来的三行设置了 Cargo 编译程序所需的配置:项目的名称、项目的版本以及要使用的 Rust 我们现在想将某个值绑定在变量上。等号的右边是 guess 所绑定的值,它是 String::new 的结果,这个函数会返回一个 String 的新实例。String 是一个标准库提供的字 符串类型,它是 UTF-8 编码的可增长文本块。 ::new 那一行的 :: 语法表明 new 是 String 类型的一个 关联函数(associated function)。关 联函数是针对某个类型实现的函数,在这个例子中是 String。这个0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名 Rust 程序员,欢迎! 分析这个 Rust 程序 现在,让我们回过头来仔细看看这个 “Hello, world!” 程序。这是第一块拼图: fn main() { } 这几行定义了一个名叫 main 的函数。main 函数是一个特殊的函数:在可执行的 Rust 程序 中,它总是最先运行的代码。第一行代码声明了一个叫做 main 的内容 这个文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,这是 Cargo 配置文件的格式。 第一行,[package] ,是一个片段(section)标题,表明下面的语句用来配置一个包。随着我 们在这个文件增加更多的信息,还将增加其他片段(section)。 接下来的三行设置了 Cargo 编译程序所需的配置:项目的名称、项目的版本以及要使用的 Rust guess 所绑定的值,它 是 String::new 的结果,这个函数会返回一个 String 的新实例。String 是一个标准库提供 的字符串类型,它是 UTF-8 编码的可增长文本块。 ::new 那一行的 :: 语法表明 new 是 String 类型的一个 关联函数(associated function)。 关联函数是针对类型实现的,在这个例子中是 String ,而不是0 码力 | 600 页 | 12.99 MB | 1 年前3
Hello 算法 1.1.0 Rust版衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 Tip 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 专业术语会使用黑体(纸质版和 PDF 版)或添加下划线(网页版),例如数组(array)。建议记住它们, 以便阅读文献。 以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 第 0 章 前言 hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 Tip 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 专业术语会使用黑体(纸质版和 PDF 版)或添加下划线(网页版),例如数组(array)。建议记住它们, 以便阅读文献。 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 第 0 章 前言 www.hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 � 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 重要专有名词及其英文翻译会用「」 括号标注,例如「数组 array」 。建议记住它们,以便阅读文献。 ‧ 专有名词和有特指含义的词句会使用“引号” 当涉及编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 第 0 章 前言 hello‑algo.com 5 * 注释 */ 0.2 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观0 码力 | 383 页 | 17.61 MB | 1 年前3
Rust 是否需要另⼀种“⾊彩”的 Future? - 郭⼦兴第三届中国Rust开发者⼤会 Rust 是否需要另⼀种“⾊彩”的 Future? 郭⼦兴,字节跳动服务框架团队研发⼯程师。 作者 Rust 是否需要另⼀种“⾊彩”的 Future? 标题 Rust 编译器将 async 块翻译成由标准库提供的 Future 类型,⽤户可以⽅便地通过⾃定义 Future 以实现⾮阻塞 的 IO 或并发控制语义。异步执⾏器被允许在任意时刻删除⽣成的 Future 实例以取消正在执⾏的异步操作,但取消 poll_cancel(self: Pin<&mut Self>, cx: &mut Context<'_>) �� Poll<()>; } 另⼀种“⾊彩”的 Future 相对于现有的“红⾊” async 块: “红⾊” 只能 await “红⾊”,但“蓝⾊”可以 await “蓝⾊”与“红 ⾊”,以确保 cancel 信号能正确地递归响应。 pub trait CompletionFuture0 码力 | 19 页 | 7.77 MB | 1 年前3
Comprehensive Rust(简体中文) 202412. 31 6.3.1 Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.4 代码块和作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1 6.4.1 作用域和遮蔽(Shadowing) 程,并确保所有人都能获得一致的体验。 我们仍然建议你安装 Cargo:它有助于你更轻松地完成练习。在最后一天,我们要做一个综合的练习,向 你展示如何使用依赖项,因此你需要安装 Cargo。 本课程中的代码块是完全交互式的: fn main() { println!("Edit me!"); } You can use Ctrl + Enter to execute the code when 程序,一个经典的 Hello World 程序: fn main() { println!("Hello !"); } 你看到的: • 函数以 fn 开头。 • 像 C 和 C++ 一样,块由花括号分隔。 • main 函数是程序的入口点。 • Rust 有卫生宏 (hygienic macros),println! 就是一个例子。 • Rust 字符串是 UTF-8 编码的,可以包含任何0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust 语言学习笔记类似。不过,这时候段落名称'[[test]]'分别替换为:'[[example]]'或者 '[[bin]]' 1.2 module Rust 提供了一个关键字 mod,它主要起到两个用途,在一个文件中定义一个模 块,或者引用另外一个文件中的模块。 模块也有一些默认的约定: 1.每个 crate 中,默认实现了一个隐式的根模块(root module); 2.模块的命名风格也是 lower_snake_case,跟其它的 的类型,但是不确定 其具体的类型”。在例子中返回了一个 Tweet,不过调用方并不知情。 3. 使用 trait bound 有条件地实现方法 通过使用带有 trait bound 的泛型参数的 impl 块,可以有条件地只为那些 实现了特定 trait 的类型实现方法。例如,下面例子中的类型 Pair总 是实现了 new 方法,不过只有那些为 T 类型实现了 PartialOrd trait (来允许比较) 枚举类型定义 8. 常量定义 9. 静态变量定义 10. Trait 定义 11. 实现(Impl) 这些 Item 是可以互相嵌套的,比如在一个函数中定义一个静态变量、在一个模 块中使用 use 声明或定义一个结构体。 5.1 属性 5.1.1 属性的语法 Rust 包括两种 attribute : #![attribute 属性描述] 第一种的含义是: 0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust语言核心竞争力-庄晓立Unsafe // A unsafe { // B } // A Rust类型系统和编译器从机制上保证,unsafe 代码块以外的代码(A区),一定是内存安全的。 不能被编译器确认是内存安全的代码,必须且 只能写在unsafe代码块内(B区)。 尽量把unsafe代码块限制在最小范围内,并且 用关键字unsafe突出标识出来,便于集中审查 review。 Redox OS kernel: 16 16.52%, userspace: 0.3% Safe V.S. Unsafe 有很多人望文生义、想当然的以为unsafe代码块内都是 “不安全”的代码。其实不然。 unsafe代码块内,经过专业资深程序员谨慎编写的代码, 同样是能保证内存安全的。(通过人脑保证,而非机器) 机器通过执行一系列冰冷的规则拒绝不安全代码。但是机 器有机器的局限。unsafe代码充分发挥人的主观能动性,0 码力 | 51 页 | 1.09 MB | 1 年前3
尝试用RUST写教学操作系统尝试把系统正确性证明整合到语 ⾔言本身当中 • Rust有严格的安全约束,也可以 把编译时约束转移到运⾏时(例 如Mutex,RefCell),也允许程序 员显式地指出不安全(unsafe块), 并使⽤安全封装和管理不安全 • unsafe块是一个精妙的设计,在你 想偷懒破坏安全性时给你带来⼩ 小的骚扰 13 Rust的安全特征 • 类型安全: 远离void* 保安全. 远离隐式cast • 内存安全: 对于全局变量, 它自带一个锁. 访问全局变 量的过程必须取得锁 -> C里面全局变量和锁时分离 的, 时常会忘记加锁,当锁离开作用域时自动释放, 防 止造成死锁 • Rust 提供了unsafe 这种块能够做不安全但必须的事 情如指针算术. 但不安全的代码越少越好 14 RUST的运行时约束: 所有权机制和资源管理 • RefCell– borrow() – borrow_mut() 0 码力 | 23 页 | 1.53 MB | 1 年前3
共 11 条
- 1
- 2













