ebook img

The Rust Programming Language Rust编程语言 PDF

290 Pages·2015·0.96 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview The Rust Programming Language Rust编程语言

The Rust Programming Language Rust 编程语言 The Rust Team,hainuo 2015-05-15 2 Contents 1 Introduction 介绍说明 11 1.1 Contributing 社区贡献 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.2 A brief introduction to Rust Rust 简单说明 . . . . . . . . . . . . . . . . . . . . . 12 2 Getting Started 开始使用 Rust 17 2.1 Installing Rust 安装 Rust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Hello, world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 Hello, Cargo! Cargo 命令介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3 Learn Rust Rust 入门 25 3.1 Guessing Game 猜数字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.1 Set up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.1.2 Processing a Guess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.3 Generating a secret number . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.1.4 Comparing guesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.1.5 Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.1.6 Complete! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.2 Dining Philosophers 哲学家就餐问题 . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.3 Rust inside other languages Rust 与其他语言 . . . . . . . . . . . . . . . . . . . . 53 3.3.1 The problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.3.2 A Rust library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.3.3 Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.3.4 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.3.5 Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.3.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4 CONTENTS 4 Efective Rust 高效的 Rust 61 4.1 The Stack and the Heap 栈和堆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.1.1 Memory management 内存管理 . . . . . . . . . . . . . . . . . . . . . . . . 61 4.1.2 The Stack 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.1.3 The Heap 堆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.1.4 Arguments and borrowing 参数和引用 . . . . . . . . . . . . . . . . . . . . 68 4.1.5 A complex example 一个复杂的例子 . . . . . . . . . . . . . . . . . . . . . 69 4.1.6 What do other languages do? 其他的语言是怎么做的? . . . . . . . . . . 74 4.1.7 Which to use? 到底该使用哪一种 . . . . . . . . . . . . . . . . . . . . . . . 74 4.2 Testing 测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.2.1 The test attribute test 属性 . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.2.2 The tests module tests 单元 . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.2.3 The tests directory tests 目录 . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.2.4 Documentation tests 文档测试 . . . . . . . . . . . . . . . . . . . . . . . . 83 4.3 Conditional Compilation 条件编译 . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.3.1 cfg_attr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.3.2 cfg! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.4 Documentation 文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.5 Iterators 迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.6 Concurrency 并发 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.7 Error Handling 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.7.1 Failure vs. Panic 失败和 panic . . . . . . . . . . . . . . . . . . . . . . . . 114 4.7.2 Handling errors with Option and Result 使用option选项和Result结果来处理 错误信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 4.7.3 Non-recoverable errors with panic! 无法恢复的错误panic . . . . . . . . . . 118 4.7.4 Upgrading failures to panics 将失败升级为 panic . . . . . . . . . . . . . . 119 4.7.5 Using try! 使用 try! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.8 FFI 对外函数接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.8.1 Introduction 说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.8.2 Creating a safe interface 创建一个安全的接口 . . . . . . . . . . . . . . . . 123 4.8.3 Destructors 析构函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 4.8.4 Callbacks from C code to Rust functions 从 C 代码到 Rust 函数的回调方法125 4.8.5 Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 CONTENTS 5 4.8.6 Unsafe blocks 不安全代码块 . . . . . . . . . . . . . . . . . . . . . . . . . . 130 4.8.7 Accessing foreign globals 全局外部访问 . . . . . . . . . . . . . . . . . . . 130 4.8.8 Foreign calling conventions 外部调用约定 . . . . . . . . . . . . . . . . . . 131 4.8.9 Interoperability with foreign code . . . . . . . . . . . . . . . . . . . . . . . 132 4.8.10 The “nullable pointer optimization” 空指针的优化 . . . . . . . . . . . . . 133 4.8.11 Calling Rust code from C . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.9 Borrow and AsRef 借用和引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.9.1 Borrow 借用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 4.9.2 AsRef 地址引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.9.3 Which should I use? 我应该用哪一个? . . . . . . . . . . . . . . . . . . . 135 4.10 Release Channels 发行通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.10.1 Overview 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.10.2 Choosing a version 选择版本 . . . . . . . . . . . . . . . . . . . . . . . . . 136 4.10.3 Helping the ecosystem through CI 通过 CI 来帮助生态链 . . . . . . . . . 137 5 Syntax and Semantics 语法和语义 139 5.1 Variable Bindings 变量绑定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 5.2 Functions 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5.3 Primitive Types 原始数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.3.1 Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.3.2 char . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.3.3 Numeric types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.3.4 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.3.5 Slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.3.6 str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.3.7 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 5.3.8 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 5.4 Comments 注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 5.5 if if 条件语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 5.6 for loops for 循环语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 5.7 while loops while 循环语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 5.8 Ownership 所有权 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 5.8.1 Meta 元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 5.8.2 Ownership 所有权 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 6 CONTENTS 5.8.3 Move semantics 移动语义 . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 5.8.4 More than ownership 不只是所有权 . . . . . . . . . . . . . . . . . . . . . 163 5.9 References and Borrowing 地址引用和借用 . . . . . . . . . . . . . . . . . . . . . . 164 5.9.1 Meta 元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 5.9.2 Borrowing 借用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 5.9.3 &mut references 可变的地址引用 . . . . . . . . . . . . . . . . . . . . . . . 166 5.9.4 The Rules 规则 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 5.10 Lifetimes 生命周期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 5.10.1 Meta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 5.10.2 Lifetimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 5.11 Mutability 可变性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 5.11.1 Interior vs. Exterior Mutability . . . . . . . . . . . . . . . . . . . . . . . . 178 5.12 Structs 结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 5.12.1 Update syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 5.12.2 Tuple structs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 5.12.3 Unit-like structs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 5.13 Enums 枚举 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 5.14 Match 比较匹配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 5.14.1 Matching on enums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 5.15 Patterns 模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 5.15.1 Multiple patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 5.15.2 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 5.15.3 Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 5.15.4 Ignoring variants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 5.15.5 Guards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 5.15.6 ref and ref mut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.15.7 Destructuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 5.15.8 Mix and Match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 5.16 Method Syntax 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 5.16.1 Method calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 5.16.2 Chaining method calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 5.16.3 Associated functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 5.16.4 Builder Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 CONTENTS 7 5.17 Vectors 向量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 5.18 Strings 字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 5.19 Generics 泛型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 5.20 Traits 特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 5.20.1 Multiple trait bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 5.20.2 Where clause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 5.20.3 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 5.21 Drop 丢弃 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 5.22 if let if-let 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 5.23 Trait Objects 特质对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 5.24 Closures 闭包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.24.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 5.24.2 Closures and their environment . . . . . . . . . . . . . . . . . . . . . . . . 216 5.24.3 Closure implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 5.24.4 Taking closures as arguments . . . . . . . . . . . . . . . . . . . . . . . . . 219 5.24.5 Returning closures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 5.25 Universal Function Call Syntax 通用函数调用语法 . . . . . . . . . . . . . . . . . 223 5.25.1 Angle-bracket Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 5.26 Crates and Modules 箱型和模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 5.26.1 Basic terminology: Crates and Modules . . . . . . . . . . . . . . . . . . . 225 5.26.2 Defning Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 5.26.3 Multiple fle crates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 5.26.4 Importing External Crates . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 5.26.5 Exporting a Public Interface . . . . . . . . . . . . . . . . . . . . . . . . . 230 5.26.6 Importing Modules with use . . . . . . . . . . . . . . . . . . . . . . . . . . 231 5.27 const and static 常量定义与静态型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 5.27.1 static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 5.27.2 Initializing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 5.27.3 Which construct should I use? . . . . . . . . . . . . . . . . . . . . . . . . 235 5.28 Attributes 属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 5.29 type aliases 类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 5.30 Casting between types 类型转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 5.30.1 as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 8 CONTENTS 5.30.2 transmute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 5.31 Associated Types 事务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 5.32 Unsized Types 动态大小类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 5.32.1 ?Sized . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 5.33 Operators and Overloading 运行和重载 . . . . . . . . . . . . . . . . . . . . . . . 243 5.34 Deref coercions 强制 Deref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 5.35 Macros 宏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 5.35.1 Defning a macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 5.35.2 Hygiene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 5.35.3 Recursive macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 5.35.4 Debugging macro code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 5.35.5 Syntactic requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 5.35.6 Scoping and macro import/export . . . . . . . . . . . . . . . . . . . . . . 255 5.35.7 The variable $crate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 5.35.8 The deep end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 5.35.9 Common macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 5.35.10 Procedural macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 5.36 Raw Pointers 原始指针 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 5.36.1 Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 5.36.2 FFI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 5.36.3 References and raw pointers . . . . . . . . . . . . . . . . . . . . . . . . . . 262 5.37 unsafe 不安全块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 5.37.1 What does ‘safe’ mean? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 5.37.2 Unsafe Superpowers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 6 Nightly Rust 每日 Rust 版本 265 6.1 Compiler Plugins 编译插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 6.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 6.1.2 Syntax extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 6.1.3 Lint plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 6.2 Inline Assembly 内联汇编 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 6.3 No stdlib 没有 std 库文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 6.4 Intrinsics 内部函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 6.5 Lang items 组件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 CONTENTS 9 6.6 Link args 连接属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 6.7 Benchmark Tests 基准测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 6.8 Box Syntax and Patterns Box 语法和模式 . . . . . . . . . . . . . . . . . . . . . . 282 6.8.1 Returning Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 6.9 Slice Patterns 分片模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 6.10 Associated Constants 关联常量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 7 Glossary 专业术语 287 8 Academic Research 学术研究 289 10 CONTENTS

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.