Rust 程序设计语言 简体中文版 1.85.0新构建代码,都会生成相同的构建 产物:Cargo 只会使用你指定的依赖版本,除非你明确指定其他版本。例如,如果下周 rand crate 的 0.8.6 版本出来了,该版本包含了一个重要的 bug 修复,但同时也引入了一个会破坏 你代码的回归问题。为了解决这个问题,Rust 在你第一次运行 cargo build 时创建了 Cargo.lock 文件,我们现在可以在 guessing_game 目录找到它。 简体中文版 变量和可变性 正如第二章中“使用变量储存值” 部分提到的那样,变量默认是不可改变的(immutable)。这 是 Rust 提供给你的众多优势之一,让你得以充分利用 Rust 提供的安全性和简单并发性来编写 代码。不过,你仍然可以使用可变变量。让我们探讨一下 Rust 为何及如何鼓励你利用不可变 性,以及何时你会选择禁用它。 当变量不可变时,一旦值被绑定一个名称上,你就不能改变这个值。为了对此进行说明,使用 i32 类型的值,不过语句并不会返回值,使用单位类型 () 表示不返回值。因为不返回值与函数定义相矛盾,从而出现一个错误。在输出中,Rust 提供 了一条信息,可能有助于纠正这个错误:它建议删除分号,这会修复这个错误。 56/562Rust 程序设计语言 简体中文版 注释 所有程序员都力求使其代码易于理解,不过有时还需要提供额外的解释。在这种情况下,程序 员在源码中留下 注释(comments),0 码力 | 562 页 | 3.23 MB | 28 天前3
Comprehensive Rust(简体中文) 202412桌面, – 服务器。 Rust 和 C++ 适用于类似的场景: • 极高的灵活性。 • 高度的控制能力。 • 能够在资源匮乏的设备(如手机)上运行。 • 没有运行时和垃圾收集。 • 关注程序可靠性和安全性,而不会牺牲任何性能。 4.2 Rust 的优势 Rust 有一些独特的卖点: 23 • 内存安全:在编译时可防止所有类内存 bug – 不存在未初始化的变量。 – 不存在“双重释放”。 – 警告。Clippy 提供了大量的 lint 文档,并且在不断添加新的 lint(包括默认拒绝 lint)。 请注意,带有 help: ... 的错误或警告可以通过 cargo Fix 或编辑器进行修复。 27.4 练习:卢恩算法 卢恩算法 卢恩算法用于验证信用卡号。该算法将字符串作为输入内容,并执行以下操作来验证信用卡号: • Ignore all spaces. Reject number 以下代码实现了一个非常简单的表达式语言解析器。不过,它通过 panic 机制来处理错误。请重写该代 码,改用惯用的错误处理方式,并将错误传播到 main 函数的返回值。您可以随意使用 thiserror 和 anyhow。 提示:请先修复 parse 函数中的错误处理问题。该部分正常运行后,请更新 Tokenizer 以实现 Iterator- >,并在解析器中进行相应处理。
0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust 程序设计语言简体中文版有一个机制来确保任何人在任何时候重新构建代码,都会产生相同的结果:Cargo 只会 使用你指定的依赖版本,除非你又手动指定了别的。例如,如果下周 rand crate 的 0.8.6 版 本出来了,它修复了一个重要的 bug,同时也含有一个会破坏代码运行的缺陷。为了处理这个 问题,Rust 在你第一次运行 cargo build 时建立了 Cargo.lock 文件,我们现在可以在 guessing_game 291bebc65379 正如第二章中“使用变量储存值” 部分提到的那样,变量默认是不可改变的(immutable)。这 是 Rust 提供给你的众多优势之一,让你得以充分利用 Rust 提供的安全性和简单并发性来编写 代码。不过,你仍然可以使用可变变量。让我们探讨一下 Rust 为何及如何鼓励你利用不可变 性,以及何时你会选择不使用不可变性。 当变量不可变时,一旦值被绑定一个名称上,你就不能改变这个值。为了对此进行说明,使用 类型的值,不过语句并不会返回值,使用单位类型 () 表示不返回值。因为不返回值与函数定义相矛盾,从而出现一个错误。在输出中,Rust 提 供了一条信息,可能有助于纠正这个错误:它建议删除分号,这会修复这个错误。 60/600 Rust 程序设计语言 简体中文版 3 . 4 . 注 释 注释 ch03-04-comments.md commit d0acb2595c890 码力 | 600 页 | 12.99 MB | 1 年前3
Hello 算法 1.1.0 Rust版等。它们可以将任意长 度的输入数据映射到恒定长度的哈希值。 近一个世纪以来,哈希算法处在不断升级与优化的过程中。一部分研究人员努力提升哈希算法的性能,另一 部分研究人员和黑客则致力于寻找哈希算法的安全性问题。表 6‑2 展示了在实际应用中常见的哈希算法。 ‧ MD5 和 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一 细心的你可能发现在不同控制台中运行程序时,输出的哈希值是不同的。这是因为 Python 解释器在每次启 动时,都会为字符串哈希函数加入一个随机的盐(salt)值。这种做法可以有效防止 HashDoS 攻击,提升哈 希算法的安全性。 6.4 小结 1. 重点回顾 ‧ 输入 key ,哈希表能够在 ?(1) 时间内查询到 value ,效率非常高。 ‧ 常见的哈希表操作包括查询、添加键值对、删除键值对和遍历哈希表等。 ,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为堆化(heapify)。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版等。它们可以将任意长 度的输入数据映射到恒定长度的哈希值。 近一个世纪以来,哈希算法处在不断升级与优化的过程中。一部分研究人员努力提升哈希算法的性能,另一 部分研究人员和黑客则致力于寻找哈希算法的安全性问题。表 6‑2 展示了在实际应用中常见的哈希算法。 ‧ MD5 和 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一 细心的你可能发现在不同控制台中运行程序时,输出的哈希值是不同的。这是因为 Python 解释器在每次启 动时,都会为字符串哈希函数加入一个随机的盐(salt)值。这种做法可以有效防止 HashDoS 攻击,提升哈 希算法的安全性。 6.4 小结 1. 重点回顾 ‧ 输入 key ,哈希表能够在 ?(1) 时间内查询到 value ,效率非常高。 ‧ 常见的哈希表操作包括查询、添加键值对、删除键值对和遍历哈希表等。 ,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为堆化(heapify)。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版等。它们可以将任意长 度的输入数据映射到恒定长度的哈希值。 近一个世纪以来,哈希算法处在不断升级与优化的过程中。一部分研究人员努力提升哈希算法的性能,另一 部分研究人员和黑客则致力于寻找哈希算法的安全性问题。表 6‑2 展示了在实际应用中常见的哈希算法。 ‧ MD5 和 SHA‑1 已多次被成功攻击,因此它们被各类安全应用弃用。 ‧ SHA‑2 系列中的 SHA‑256 是最安全的哈希算法之一 细心的你可能发现在不同控制台中运行程序时,输出的哈希值是不同的。这是因为 Python 解释器在每次启 动时,都会为字符串哈希函数加入一个随机的盐(salt)值。这种做法可以有效防止 HashDoS 攻击,提升哈 希算法的安全性。 6.4 小结 1. 重点回顾 ‧ 输入 key ,哈希表能够在 ?(1) 时间内查询到 value ,效率非常高。 ‧ 常见的哈希表操作包括查询、添加键值对、删除键值对和遍历哈希表等。 ,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为「堆化 heapify」。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆0 码力 | 383 页 | 17.61 MB | 1 年前3
简谈 Rust 与国密 TLS - 王江桐保证数据机密性、真实性和完整性。 • SM2 算法和 RSA 算法都是公钥加密算法,SM2 算法是一 种更先进安全的算法,其性能与安全性优于RSA,在我们国 家商用密码体系中被用来替换 RSA 算法。 • 椭圆曲线可使用更少的运算位数来达成与RSA相等的 安全性 • 椭圆曲线与RSA的安全性都依赖于离散对数问题的复 杂程度 • 离散对数问题:已知数A,B,且A = B^n,求数 n SM2 加解密算法:流程图 、迭代过程、消息扩展和压缩 函数所构成。 • 保证信息的完整性。 • 在商用密码体系中,SM3 主要用于数字签名及验证、消息认证码生成及验证、随机数生成、密钥 扩充等。据国家密码管理局表示,其安全性及效率要高于 MD5 算法和 SHA-1 算法,与 SHA- 256 相当。 • SM3 将对长度为l(l < 2^64) 比特的消息 m,经过填充和迭代压缩,生成杂凑值,杂凑值长度为 256比特。 SHA256,SM3 SM3 国密 TLS Introduction of Shangmi TLS Rust China Conf 2022 – 2023, Shanghai, China • 传输层安全性协议(Transport Layer Security,TLS)是一种密码协议,主要目的是在两个或多个通信计算机应用程 序之间提供加密,包括隐私(机密性),完整性和使用证书的真实性。TLS 协议广泛用于电子邮件、即时消息和0 码力 | 44 页 | 3.70 MB | 1 年前3
Comprehensive Rust(日语) 202412microcontrollers. • ランタイムやガベージコレクションがない。 • パフォーマンスを犠牲にせず、信頼性と安全性に焦点を当てている。 4.2 Rust のメリット Rust のユニークなセールスポイントをいくつか紹介します: 25 • コンパイル時のメモリ安全性 - クラス全体のメモリのバグをコンパイル時に防止します。 – 未初期化の変数がない。 – 二重解放が起きない。 – ることができます: • C または C++の経験がある場合:Rust は借用チェッカーを介して実行時エラーの一部を排除し てくれます。それに加え、C や C++と同等のパフォーマンスを得ることができ、メモリ安全性の 問題はありません。さらに、パターンマッチングや組み込みの依存関係管理などの構造要素を含 む現代的な言語です。 • Experience with Java, Go, Python, JavaScript はマルチパラダイムです。たとえば、強力なオブジェクト指向プログラミング機能を備えて いる一方、非関数型言語であるにもかかわらず、さまざまな関数的概念を内包しています。 5.2 変数 Rust は静的型付けによって型安全性を提供します。変数のバインディングは let を使用して行いま す。 fn main() { let x: i32 = 10; println!("x: {x}"); // x = 20; //0 码力 | 381 页 | 1.36 MB | 10 月前3
Comprehensive Rust(繁体中文)高靈活性。 • 提供高度主控權。 • 可縮減到十分受限的裝置規模,例如微控制器。 • 沒有執行階段,也不使用垃圾收集機制。 • 著重可靠性和安全性,但不犧牲效能。 4.2 Rust 的優點 Rust 的幾個獨特賣點如下: 22 • 「編譯期的記憶體安全性」- 在編譯期間就能避免各類記憶體錯誤 – 不會產生未初始化的變數。 – 不會導致重複釋放記憶體。 – 不會使用已釋放的記憶體。 – 不會產生 研究顯示,程式設計師難免會出錯。 • 透過在執行階段中自動管理記憶體,取得完整安全性:Java、Python、Go、Haskell... – 執行階段系統會確保在可以參照記憶體之後,才釋出記憶體。 – 通常透過參照計算、垃圾收集或 RAII 的方式實作。 Rust 則融合這兩種做法: 99 透過正確的記憶體管理編譯時間強制執行措施, 「同時」取得完整的掌控權和安全性。 Rust 運用明確所有權的概念實現這一點。 會納入值,並允許取得或設定該值,即使具有對 Cell 的共用參照也一樣。但是,它不允許對該值進 行任何參照。由於沒有參照,因此借用規則不得違反。 這張投影片的重點是 Rust 提供「安全的」方法,可讓您修改共用參照背後的資料。要確保安全性有許多方 式,而 RefCell 和 Cell 是其中兩種方法。 • RefCell 會透過執行階段檢查,強制使用 Rust 的一般借用規則 (多個共用參照或單一專屬參照)。 在本例中,所有借用都0 码力 | 358 页 | 1.41 MB | 10 月前3
Comprehensive Rust(繁体中文) 202406高靈活性。 • 提供高度主控權。 • 可縮減到十分受限的裝置規模,例如微控制器。 • 沒有執行階段,也不使用垃圾收集機制。 • 著重可靠性和安全性,但不犧牲效能。 4.2 Rust 的優點 Rust 的幾個獨特賣點如下: 21 • 「編譯期的記憶體安全性」- 在編譯期間就能避免各類記憶體錯誤 – 不會產生未初始化的變數。 – 不會導致重複釋放記憶體。 – 不會使用已釋放的記憶體。 – 不會產生 研究顯示,程式設計師難免會出錯。 • 透過在執行階段中自動管理記憶體,取得完整安全性:Java、Python、Go、Haskell... – 執行階段系統會確保在可以參照記憶體之後,才釋出記憶體。 – 通常透過參照計算、垃圾收集或 RAII 的方式實作。 Rust 則融合這兩種做法: 97 透過正確的記憶體管理編譯時間強制執行措施, 「同時」取得完整的掌控權和安全性。 Rust 運用明確所有權的概念實現這一點。 會納入值,並允許取得或設定該值,即使具有對 Cell 的共用參照也一樣。但是,它不允許對該值進 行任何參照。由於沒有參照,因此借用規則不得違反。 這張投影片的重點是 Rust 提供「安全的」方法,可讓您修改共用參照背後的資料。要確保安全性有許多方 式,而 RefCell 和 Cell 是其中兩種方法。 • RefCell 會透過執行階段檢查,強制使用 Rust 的一般借用規則 (多個共用參照或單一專屬參照)。 在本例中,所有借用都0 码力 | 356 页 | 1.41 MB | 1 年前3
共 23 条
- 1
- 2
- 3













