Rust 程序设计语言 简体中文版 1.85.0
mkdir hello_world > cd hello_world 编写并运行 Rust 程序 接下来,新建一个源文件,命名为 main.rs。Rust 源文件总是以 .rs 扩展名结尾。如果文件名 包含多个单词,那么按照命名习惯,应当使用下划线来分隔单词。例如命名为 hello_world.rs, 而不是 helloworld.rs。 现在打开刚创建的 main.rs 文件,输入示例 1-1 目录(或者你存放代码的目录)。接着,可在任何操作系统下运行以下命令: $ cargo new hello_cargo $ cd hello_cargo 第一行命令新建了名为 hello_cargo 的目录和项目。我们将项目命名为 hello_cargo,同时 Cargo 在一个同名目录中创建项目文件。 进入 hello_cargo 目录并列出文件。将会看到 Cargo 生成了两个文件和一个目录:一个 Cargo.toml 常量的名称是 THREE_HOURS_IN_SECONDS,它的值被设置为 60(一分钟内的秒数)乘以 60(一 小时内的分钟数)再乘以 3(我们在这个程序中要计算的小时数)的结果。Rust 对常量的命名 40/562Rust 程序设计语言 简体中文版 约定是在单词之间使用全大写加下划线。编译器能够在编译时计算一组有限的操作,这使我们 可以选择以更容易理解和验证的方式写出此值,而不是将此常量设置为值0 码力 | 562 页 | 3.23 MB | 9 天前3Rust 程序设计语言简体中文版
> mkdir hello_world > cd hello_world 编写并运行 Rust 程序 接下来,新建一个源文件,命名为 main.rs。Rust 源文件总是以 .rs 扩展名结尾。如果文件名 包含多个单词,那么按照命名习惯,应当使用下划线来分隔单词。例如命名为 hello_world.rs, 而不是 helloworld.rs。 现在打开刚创建的 main.rs 文件,输入示例 1-1 目录(或者你存放代码的目录)。接着,可在任何操作系统下运行以下命令: $ cargo new hello_cargo $ cd hello_cargo 第一行命令新建了名为 hello_cargo 的目录和项目。我们将项目命名为 hello_cargo,同时 Cargo 在一个同名目录中创建项目文件。 进入 hello_cargo 目录并列出文件。将会看到 Cargo 生成了两个文件和一个目录:一个 Cargo.toml 常量的名称是 THREE_HOURS_IN_SECONDS ,它的值被设置为 60(一分钟内的秒数)乘以 60(一 小时内的分钟数)再乘以 3(我们在这个程序中要计算的小时数)的结果。Rust 对常量的命名 约定是在单词之间使用全大写加下划线。编译器能够在编译时计算一组有限的操作,这使我们 可以选择以更容易理解和验证的方式写出此值,而不是将此常量设置为值 10,800。有关声明 常量时可以使用哪些操作的详细信息,请参阅0 码力 | 600 页 | 12.99 MB | 1 年前3Comprehensive Rust(简体中文) 202412
different positions. • 对形参来说,impl Trait 就像是具有特征边界的匿名泛型形参。 • 对返回值类型来说,它则意味着返回值类型就是实现该特征的某具体类型,无需为该类型命名。如果 您不想在公共 API 中公开该具体类型,便可使用此方法。 在返回位置处进行推断有一定难度。会返回 impl Foo 的函数会挑选自身返回的具体类型,而不 必在来源中写出此信息。会返回 泛型类型(例如 convenience methods that use it. • The .. syntax is called struct update syntax. 17.7 闭包 闭包或 lambda 表达式具有无法命名的类型。不过,它们会 实现特殊的 Fn,FnMut 和 FnOnce 特征: fn apply_with_log(func: impl FnOnce(i32) -> i32, input: i32) use、super、self 10 minutes 练习:面向 GUI 库的模块 15 minutes 26.1 模块 我们已看了“impl”块如何让我们将函数的命名空间建为一种类型。 同样, “mod”让我们可为类型和函数建立命名空间: mod foo { pub fn do_something() { println!("In the foo module"); } } mod0 码力 | 359 页 | 1.33 MB | 10 月前3Comprehensive Rust(繁体中文)
methods that use it. • The .. syntax is called struct update syntax. 17.7 閉包 無論是閉包還是 lambda 運算式,都含有無法命名的型別。不過,這兩者都會實作特殊的 Fn、FnMut 和 FnOnce 特徵: fn apply_with_log(func: impl FnOnce(i32) -> i32, input: i32) use、super、self 10 minutes 練習:GUI 程式庫的模組 15 minutes 26.1 模組 我們已介紹 impl 區塊如何讓我們將函式的命名空間建立為型別。 同樣地,mod 可讓我們建立型別和函式的命名空間: mod foo { pub fn do_something() { println!("In the foo module"); } } mod bar 端橋接模組的獨立工具,屬於 Android 的一部分,並以 Soong 工具 的形式提供。 • 按照慣例,如果 Rust 來源檔案是 lib.rs,標頭檔案會命名為 lib.rs.h,來源檔案的名稱則是 lib.rs.cc。不過,系統不會強制執行這項命名慣例。 37.2.12 在 Android 中建構 建立依附於 libcxx 和 cc_library_static 的 rust_binary‘。0 码力 | 358 页 | 1.41 MB | 10 月前3Comprehensive Rust(繁体中文) 202406
methods that use it. • The .. syntax is called struct update syntax. 17.7 閉包 無論是閉包還是 lambda 運算式,都含有無法命名的型別。不過,這兩者都會實作特殊的 Fn、FnMut 和 FnOnce 特徵: fn apply_with_log(func: impl FnOnce(i32) -> i32, input: i32) use、super、self 10 minutes 練習:GUI 程式庫的模組 15 minutes 26.1 模組 我們已介紹 impl 區塊如何讓我們將函式的命名空間建立為型別。 同樣地,mod 可讓我們建立型別和函式的命名空間: mod foo { pub fn do_something() { println!("In the foo module"); } } mod bar 端橋接模組的獨立工具,屬於 Android 的一部分,並以 Soong 工具 的形式提供。 • 按照慣例,如果 Rust 來源檔案是 lib.rs,標頭檔案會命名為 lib.rs.h,來源檔案的名稱則是 lib.rs.cc。不過,系統不會強制執行這項命名慣例。 37.2.12 在 Android 中建構 建立依附於 libcxx 和 cc_library_static 的 rust_binary‘。0 码力 | 356 页 | 1.41 MB | 1 年前3Rust 语言学习笔记
减少复杂的项目管理配置参数。cargo 工具是官方正统出身。 在 cargo.toml 中不配置唯一的 lib crate 和 bin crate name 的话,会自动去 根据 package 进行命名。 约定的补充: cargo.toml 和 cargo.lock 文件总是位于项目根目录下。 源代码位于 src 目录下。 默认的库入口文件是 src/lib.rs。 默认的可执行程序入口文件是 mod,它主要起到两个用途,在一个文件中定义一个模 块,或者引用另外一个文件中的模块。 模块也有一些默认的约定: 1.每个 crate 中,默认实现了一个隐式的根模块(root module); 2.模块的命名风格也是 lower_snake_case,跟其它的 Rust 的标识符一样; 3.模块可以嵌套; 4.模块中可以写任何合法的 Rust 代码; 为了让外部能使用模块中 item,需要使用 函数仅仅接受一个 &str 类型的参数(x 为对某个 string 类型资源 Something 的借用),并返回对资源 Something 的一个新的借用。 实际上,上面函数包含隐性的生命周期命名,这是由编译器自动推导的,相当 于: fn foo<'a>(x: &'a str) -> &'a str { x } 3.4 高级所有权 前面三小节未大量涉及到关于所有权中的比较高级用法。0 码力 | 117 页 | 2.24 MB | 1 年前3Rust并行编译的挑战与突破
2017-2021,Rust编译速度已提升一倍以上 Rust社区编译器性能工作组 Rust编译器并行化 Cargo多crate并行 二进制生成并行 更多更好的并行化? Rust编译器架构 语法树生成 宏展开 命名解析 泛型解析 类型检查 借用检查 单态化 二进制生成 增量编译系统 底层数据 结构 Rust语言编译器结构总览 考虑内部编译流程并行化 Rust并行并发 编译时线程安全检查 一些常见线程安全数据结构0 码力 | 25 页 | 4.60 MB | 1 年前3应用 waPC (rust) 做软件测试工具
hostcall capability • Instantiate • Invoke - command with data • Guest 指 wasm • Operation 是我们要在 wasm 里注册 命名 • 以数据的长度,设置 wasm 的 linear memory 的指针 • Guest 可执行任务 • Guest 也可返回请求 host Invoke(ctx,operation,payload)0 码力 | 30 页 | 2.50 MB | 1 年前3Hello 算法 1.1.0 Rust版
图 5‑1 栈的先入后出规则 5.1.1 栈的常用操作 栈的常用操作如表 5‑1 所示,具体的方法名需要根据所使用的编程语言来确定。在此,我们以常见的 push()、 pop()、peek() 命名为例。 表 5‑1 栈的操作效率 方法 描述 时间复杂度 push() 元素入栈(添加至栈顶) ?(1) pop() 栈顶元素出栈 ?(1) peek() 访问栈顶元素 ?(1) 通常情 5 章 栈与队列 hello‑algo.com 98 5.2.1 队列常用操作 队列的常见操作如表 5‑2 所示。需要注意的是,不同编程语言的方法名称可能会有所不同。我们在此采用与 栈相同的方法命名。 表 5‑2 队列操作效率 方法名 描述 时间复杂度 push() 元素入队,即将元素添加至队尾 ?(1) pop() 队首元素出队 ?(1) peek() 访问队首元素 ?(1) 我们可以直接使用编程语言中现成的队列类:0 码力 | 388 页 | 18.50 MB | 1 年前3Hello 算法 1.2.0 简体中文 Rust 版
图 5‑1 栈的先入后出规则 5.1.1 栈的常用操作 栈的常用操作如表 5‑1 所示,具体的方法名需要根据所使用的编程语言来确定。在此,我们以常见的 push()、 pop()、peek() 命名为例。 表 5‑1 栈的操作效率 方法 描述 时间复杂度 push() 元素入栈(添加至栈顶) ?(1) pop() 栈顶元素出栈 ?(1) peek() 访问栈顶元素 ?(1) 通常情 栈与队列 www.hello‑algo.com 98 5.2.1 队列常用操作 队列的常见操作如表 5‑2 所示。需要注意的是,不同编程语言的方法名称可能会有所不同。我们在此采用与 栈相同的方法命名。 表 5‑2 队列操作效率 方法名 描述 时间复杂度 push() 元素入队,即将元素添加至队尾 ?(1) pop() 队首元素出队 ?(1) peek() 访问队首元素 ?(1) 我们可以直接使用编程语言中现成的队列类:0 码力 | 387 页 | 18.51 MB | 10 月前3
共 13 条
- 1
- 2