 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 8.2. 使用字符串储存 UTF-8 编码的文本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 中,创建自定义类型需要用到结构体和枚举。 第七章介绍 Rust 的模块(module)系统,其中的私有性规则用来组织代码和公开的 API(应 用程序接口)。第八章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第九章探索 Rust 的错误处理的理念与技术。 第十章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类 在 Windows 上,输入命令 .\main.exe,而不是 ./main: > rustc main.rs > .\main Hello, world! 不管使用何种操作系统,终端应该打印字符串 Hello, world!。如果没有看到这些输出,回到 安装部分的 “故障排除” 小节查找有帮助的方法。 如果 Hello, world! 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名0 码力 | 562 页 | 3.23 MB | 26 天前3 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 8.2. 使用字符串储存 UTF-8 编码的文本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 中,创建自定义类型需要用到结构体和枚举。 第七章介绍 Rust 的模块(module)系统,其中的私有性规则用来组织代码和公开的 API(应 用程序接口)。第八章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第九章探索 Rust 的错误处理的理念与技术。 第十章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类 在 Windows 上,输入命令 .\main.exe,而不是 ./main: > rustc main.rs > .\main Hello, world! 不管使用何种操作系统,终端应该打印字符串 Hello, world!。如果没有看到这些输出,回到 安装部分的 “故障排除” 小节查找有帮助的方法。 如果 Hello, world! 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名0 码力 | 562 页 | 3.23 MB | 26 天前3
 Comprehensive Rust(简体中文) 20241244 9.3 切片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 9.4 字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 9.5 练习:几何图形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 51 微控制器 250 51.1 原始 MMIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 51.2 外围设备访问 crate 开头。 • 像 C 和 C++ 一样,块由花括号分隔。 • main 函数是程序的入口点。 • Rust 有卫生宏 (hygienic macros),println! 就是一个例子。 • Rust 字符串是 UTF-8 编码的,可以包含任何 Unicode 字符。 This slide tries to make the students comfortable with Rust code. They0 码力 | 359 页 | 1.33 MB | 10 月前3 Comprehensive Rust(简体中文) 20241244 9.3 切片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 9.4 字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 9.5 练习:几何图形 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 51 微控制器 250 51.1 原始 MMIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 51.2 外围设备访问 crate 开头。 • 像 C 和 C++ 一样,块由花括号分隔。 • main 函数是程序的入口点。 • Rust 有卫生宏 (hygienic macros),println! 就是一个例子。 • Rust 字符串是 UTF-8 编码的,可以包含任何 Unicode 字符。 This slide tries to make the students comfortable with Rust code. They0 码力 | 359 页 | 1.33 MB | 10 月前3
 Rust 语言学习笔记3 函数指针............................................................................ 64 6.2 unsafe 与原始指针 ........................................................................ 65 6.2.1 裸指针 ........ (a, b); } 2.4.2 原生类型 在所有 rust 的类型中,比较复杂的是字符串类型。当然不仅仅在 rust 中,包 括 golang 等其它语言中,字符串类型和字符类型都是值得推敲的地方。 在本部分内容中,单独拿出字符类型和字符串类型放到最后进行讨论。 字符类型和字符串类型最好和其它语言对比讨论,例如 go。 2.4.2.1 bool 类型 Rust 自带了 2.4.2.9 字符串类型 如果要说 rust 的字符串类型,就不得不先提 go 的字符串类型。 2.4.2.9.1 Golang 中的字符串类型 Go 没有专门的字符类型,存储字符直接使用 byte 来存储,字符串就是一串固 定长度的字符连接起来字符序列。与其他编程语言不同之处在于,Go 的字符串 是字节组成,而其他的编程语言是字符组成。 Go 的字符串可以把它当成字节数组来用,并且是不可变的。0 码力 | 117 页 | 2.24 MB | 1 年前3 Rust 语言学习笔记3 函数指针............................................................................ 64 6.2 unsafe 与原始指针 ........................................................................ 65 6.2.1 裸指针 ........ (a, b); } 2.4.2 原生类型 在所有 rust 的类型中,比较复杂的是字符串类型。当然不仅仅在 rust 中,包 括 golang 等其它语言中,字符串类型和字符类型都是值得推敲的地方。 在本部分内容中,单独拿出字符类型和字符串类型放到最后进行讨论。 字符类型和字符串类型最好和其它语言对比讨论,例如 go。 2.4.2.1 bool 类型 Rust 自带了 2.4.2.9 字符串类型 如果要说 rust 的字符串类型,就不得不先提 go 的字符串类型。 2.4.2.9.1 Golang 中的字符串类型 Go 没有专门的字符类型,存储字符直接使用 byte 来存储,字符串就是一串固 定长度的字符连接起来字符序列。与其他编程语言不同之处在于,Go 的字符串 是字节组成,而其他的编程语言是字符组成。 Go 的字符串可以把它当成字节数组来用,并且是不可变的。0 码力 | 117 页 | 2.24 MB | 1 年前3
 Hello 算法 1.1.0 Rust版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 388 页 | 18.50 MB | 1 年前3 Hello 算法 1.1.0 Rust版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 387 页 | 18.51 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Rust 版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.0.0 Rust版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 383 页 | 17.61 MB | 1 年前3 Hello 算法 1.0.0 Rust版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 383 页 | 17.61 MB | 1 年前3
 基于静态分析的Rust内存安全缺陷检测研究Memory Reclaim ❑ Unsound Function ❑ Unsound Generic or Trait Auto Memory Reclaim问题:示例1 创建一个临时字符串s 通过unsafe将v指向临时内存 返回v 自动析构s,造成悬空指针v 访问v造成use-after-free 从Rust MIR分析Auto Memory Reclaim问题 _1 = 基于GitHub上其 它开源Rust项目 的实验 高召回率 低误报率 double free和悬空指 针问题比较多 案例分析 Panic将导致双重释放 提前 性能:SafeDrop vs 原始Rust编译器 总结和思考 ❑ 问题根源是Rust的自动析构机制 ▪ XOR Mutability保证自动析构的安全性 ▪ Unsafe会破坏安全性保证 ▪ 自动析构优于手动析构 ▪ 该问题的反面是内存泄露问题0 码力 | 28 页 | 1.55 MB | 1 年前3 基于静态分析的Rust内存安全缺陷检测研究Memory Reclaim ❑ Unsound Function ❑ Unsound Generic or Trait Auto Memory Reclaim问题:示例1 创建一个临时字符串s 通过unsafe将v指向临时内存 返回v 自动析构s,造成悬空指针v 访问v造成use-after-free 从Rust MIR分析Auto Memory Reclaim问题 _1 = 基于GitHub上其 它开源Rust项目 的实验 高召回率 低误报率 double free和悬空指 针问题比较多 案例分析 Panic将导致双重释放 提前 性能:SafeDrop vs 原始Rust编译器 总结和思考 ❑ 问题根源是Rust的自动析构机制 ▪ XOR Mutability保证自动析构的安全性 ▪ Unsafe会破坏安全性保证 ▪ 自动析构优于手动析构 ▪ 该问题的反面是内存泄露问题0 码力 | 28 页 | 1.55 MB | 1 年前3
 Comprehensive Rust(繁体中文)Crate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 46.8 將 Crate 登錄為 Chromium 原始碼 . . . . . . . . . . . . . . . . . . . . . . . . 241 46.9 保持 Crate 為最新版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 51 微控制器 250 51.1 原始 MMIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 51.2 周邊裝置存取 Crate Rust Fundamentals. 在此基礎上,我們將誠摯邀請您深入探討一或多個專題: • Android:這是半天的課程,會說明如何針對 Android 平台開發作業 (Android 開放原始碼計畫) 使用 Rust,並介紹與 C、C++ 和 Java 的互通性。 • Chromium: a half-day course on using Rust within Chromium based0 码力 | 358 页 | 1.41 MB | 10 月前3 Comprehensive Rust(繁体中文)Crate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 46.8 將 Crate 登錄為 Chromium 原始碼 . . . . . . . . . . . . . . . . . . . . . . . . 241 46.9 保持 Crate 為最新版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 51 微控制器 250 51.1 原始 MMIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 51.2 周邊裝置存取 Crate Rust Fundamentals. 在此基礎上,我們將誠摯邀請您深入探討一或多個專題: • Android:這是半天的課程,會說明如何針對 Android 平台開發作業 (Android 開放原始碼計畫) 使用 Rust,並介紹與 C、C++ 和 Java 的互通性。 • Chromium: a half-day course on using Rust within Chromium based0 码力 | 358 页 | 1.41 MB | 10 月前3
 Comprehensive Rust(繁体中文) 202406Crate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 46.8 將 Crate 登錄為 Chromium 原始碼 . . . . . . . . . . . . . . . . . . . . . . . . 239 46.9 保持 Crate 為最新版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 51 微控制器 248 51.1 原始 MMIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 51.2 周邊裝置存取 Crate Rust Fundamentals. 在此基礎上,我們將誠摯邀請您深入探討一或多個專題: • Android:這是半天的課程,會說明如何針對 Android 平台開發作業 (Android 開放原始碼計畫) 使用 Rust,並介紹與 C、C++ 和 Java 的互通性。 • Chromium: a half-day course on using Rust within Chromium based0 码力 | 356 页 | 1.41 MB | 1 年前3 Comprehensive Rust(繁体中文) 202406Crate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 46.8 將 Crate 登錄為 Chromium 原始碼 . . . . . . . . . . . . . . . . . . . . . . . . 239 46.9 保持 Crate 為最新版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 51 微控制器 248 51.1 原始 MMIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 51.2 周邊裝置存取 Crate Rust Fundamentals. 在此基礎上,我們將誠摯邀請您深入探討一或多個專題: • Android:這是半天的課程,會說明如何針對 Android 平台開發作業 (Android 開放原始碼計畫) 使用 Rust,並介紹與 C、C++ 和 Java 的互通性。 • Chromium: a half-day course on using Rust within Chromium based0 码力 | 356 页 | 1.41 MB | 1 年前3
 Rust 程序设计语言简体中文版257 变成 1 ,依此类推。程序不会 panic,不过变量 可能也不会是你所期望的值。依赖整型溢出 wrapping 的行为被认为是一种错误。 为了显式地处理溢出的可能性,可以使用这几类标准库提供的原始数字类型方法: • 所有模式下都可以使用 wrapping_* 方法进行 wrapping,如 wrapping_add • 如果 checked_* 方法出现溢出,则返回 None 值 • 用 &mut self 。通过仅仅使用 self 作为第一个参数来使方法获取实例的所有 权是很少见的;这种技术通常用在当方法将 self 转换成别的实例的时候,这时我们想要防止 调用者在转换之后使用原始的实例。 使用方法替代函数,除了可使用方法语法和不需要在每个函数签名中重复 self 的类型之外, 其主要好处在于组织性。我们将某个类型实例能做的所有事情都一起放入 impl 块中,而不是 让将来的用户在我们的库中到处寻找 符号本身并没有任何意义。 最后,如果以字形簇的角度理解,就会得到人们所说的构成这个单词的四个字母: ["न", "म", "स्", "ते"] Rust 提供了多种不同的方式来解释计算机储存的原始字符串数据,这样程序就可以选择它需 要的表现方式,而无所谓是何种人类语言。 最后一个 Rust 不允许使用索引获取 String 字符的原因是,索引操作预期总是需要常数时间 (O(1))。但是对于0 码力 | 600 页 | 12.99 MB | 1 年前3 Rust 程序设计语言简体中文版257 变成 1 ,依此类推。程序不会 panic,不过变量 可能也不会是你所期望的值。依赖整型溢出 wrapping 的行为被认为是一种错误。 为了显式地处理溢出的可能性,可以使用这几类标准库提供的原始数字类型方法: • 所有模式下都可以使用 wrapping_* 方法进行 wrapping,如 wrapping_add • 如果 checked_* 方法出现溢出,则返回 None 值 • 用 &mut self 。通过仅仅使用 self 作为第一个参数来使方法获取实例的所有 权是很少见的;这种技术通常用在当方法将 self 转换成别的实例的时候,这时我们想要防止 调用者在转换之后使用原始的实例。 使用方法替代函数,除了可使用方法语法和不需要在每个函数签名中重复 self 的类型之外, 其主要好处在于组织性。我们将某个类型实例能做的所有事情都一起放入 impl 块中,而不是 让将来的用户在我们的库中到处寻找 符号本身并没有任何意义。 最后,如果以字形簇的角度理解,就会得到人们所说的构成这个单词的四个字母: ["न", "म", "स्", "ते"] Rust 提供了多种不同的方式来解释计算机储存的原始字符串数据,这样程序就可以选择它需 要的表现方式,而无所谓是何种人类语言。 最后一个 Rust 不允许使用索引获取 String 字符的原因是,索引操作预期总是需要常数时间 (O(1))。但是对于0 码力 | 600 页 | 12.99 MB | 1 年前3
共 14 条
- 1
- 2














