Hello 算法 1.1.0 Rust版
将“Hello 算法”中的所有字符都 编码为 2 字节长度。这样系统就可以每隔 2 字节解析一个字符,恢复这个短语的内容了。 图 3‑7 Unicode 编码示例 然而 ASCII 码已经向我们证明,编码英文只需 1 字节。若采用上述方案,英文文本占用空间的大小将会是 ASCII 编码下的两倍,非常浪费内存空间。因此,我们需要一种更加高效的 Unicode 编码方法。 3.4.4 UTF‑8 一个错误的字节开始解析文本,字节头部的 10 能够帮助系统快速判断出异常。 之所以将 10 当作校验符,是因为在 UTF‑8 编码规则下,不可能有字符的最高两位是 10 。这个结论可以用 反证法来证明:假设一个字符的最高两位是 10 ,说明该字符的长度为 1 ,对应 ASCII 码。而 ASCII 码的最 高位应该是 0 ,与假设矛盾。 图 3‑8 UTF‑8 编码示例 除了 UTF‑8 之外,常见的编码方式还包括以下两种。 我们主要探究贪心选择性质的判断方法。虽然它的描述看上去比较简单,但实际上对于许多问题,证明贪心 选择性质并非易事。 例如零钱兑换问题,我们虽然能够容易地举出反例,对贪心选择性质进行证伪,但证实的难度较大。如果问: 满足什么条件的硬币组合可以使用贪心算法求解?我们往往只能凭借直觉或举例子来给出一个模棱两可的答 案,而难以给出严谨的数学证明。 Quote 有一篇论文给出了一个 ?(?3) 时间复杂度的算法0 码力 | 388 页 | 18.50 MB | 1 年前3Hello 算法 1.2.0 简体中文 Rust 版
将“Hello 算法”中的所有字符都 编码为 2 字节长度。这样系统就可以每隔 2 字节解析一个字符,恢复这个短语的内容了。 图 3‑7 Unicode 编码示例 然而 ASCII 码已经向我们证明,编码英文只需 1 字节。若采用上述方案,英文文本占用空间的大小将会是 ASCII 编码下的两倍,非常浪费内存空间。因此,我们需要一种更加高效的 Unicode 编码方法。 3.4.4 UTF‑8 一个错误的字节开始解析文本,字节头部的 10 能够帮助系统快速判断出异常。 之所以将 10 当作校验符,是因为在 UTF‑8 编码规则下,不可能有字符的最高两位是 10 。这个结论可以用 反证法来证明:假设一个字符的最高两位是 10 ,说明该字符的长度为 1 ,对应 ASCII 码。而 ASCII 码的最 高位应该是 0 ,与假设矛盾。 图 3‑8 UTF‑8 编码示例 除了 UTF‑8 之外,常见的编码方式还包括以下两种。 我们主要探究贪心选择性质的判断方法。虽然它的描述看上去比较简单,但实际上对于许多问题,证明贪心 选择性质并非易事。 例如零钱兑换问题,我们虽然能够容易地举出反例,对贪心选择性质进行证伪,但证实的难度较大。如果问: 满足什么条件的硬币组合可以使用贪心算法求解?我们往往只能凭借直觉或举例子来给出一个模棱两可的答 案,而难以给出严谨的数学证明。 Quote 有一篇论文给出了一个 ?(?3) 时间复杂度的算法0 码力 | 387 页 | 18.51 MB | 9 月前3Hello 算法 1.0.0 Rust版
将“Hello 算法”中的所有字符都 编码为 2 字节长度。这样系统就可以每隔 2 字节解析一个字符,恢复这个短语的内容了。 图 3‑7 Unicode 编码示例 然而 ASCII 码已经向我们证明,编码英文只需 1 字节。若采用上述方案,英文文本占用空间的大小将会是 ASCII 编码下的两倍,非常浪费内存空间。因此,我们需要一种更加高效的 Unicode 编码方法。 3.4.4 UTF‑8 一个错误的字节开始解析文本,字节头部的 10 能够帮助系统快速判断出异常。 之所以将 10 当作校验符,是因为在 UTF‑8 编码规则下,不可能有字符的最高两位是 10 。这个结论可以用 反证法来证明:假设一个字符的最高两位是 10 ,说明该字符的长度为 1 ,对应 ASCII 码。而 ASCII 码的最 高位应该是 0 ,与假设矛盾。 图 3‑8 UTF‑8 编码示例 除了 UTF‑8 之外,常见的编码方式还包括以下两种。 我们主要探究贪心选择性质的判断方法。虽然它的描述看上去比较简单,但实际上对于许多问题,证明贪心 选择性质并非易事。 例如零钱兑换问题,我们虽然能够容易地举出反例,对贪心选择性质进行证伪,但证实的难度较大。如果问: 满足什么条件的硬币组合可以使用贪心算法求解?我们往往只能凭借直觉或举例子来给出一个模棱两可的答 案,而难以给出严谨的数学证明。 � 有一篇论文给出了一个 ?(?3) 时间复杂度的算法,用于判断一个硬币组合能否使用贪心算法0 码力 | 383 页 | 17.61 MB | 1 年前3Rust 程序设计语言简体中文版
提供了控制底层细节(如内存使用)的选项,而无需承受通常与此类控制相关的所有繁琐细 节。 Rust 适合哪些人 Rust 因多种原因适合许多人。让我们看看几个最重要的群体。 开发者团队 Rust 已证明是一个对于具有不同系统编程知识水平的大型开发团队协作而言,非常高效的工 具。底层代码容易出现各种微妙的错误,在大多数其他语言中,这些错误只能通过广泛的测试 和经验丰富的开发者的仔细审核代码来捕捉。在 --release 并使用 target/release 下的可执行文件进行测试。 把 Cargo 当作习惯 对于简单项目,Cargo 并不比 rustc 提供了更多的优势,不过随着开发的深入,终将证明其 价值。一旦程序壮大到由多个文件组成,亦或者是需要其他的依赖,让 Cargo 协调构建过程 就会简单得多。 即便 hello_cargo 项目十分简单,它现在也使用了很多在你之后的 Rust 生涯将会用到的实用 1); let loopback = IpAddr::V6(String::from("::1")); # } 这些代码展示了使用枚举来存储两种不同 IP 地址的几种可能的选择。然而,事实证明存储和 编码 IP 地址实在是太常见了以致标准库提供了一个开箱即用的定义!让我们看看标准库是如 何定义 IpAddr 的:它正有着跟我们定义和使用的一样的枚举和成员,不过它将成员中的地址 数据嵌入0 码力 | 600 页 | 12.99 MB | 1 年前3Rust 程序设计语言 简体中文版 1.85.0
提供了控制底层细节(如内存使用)的选项,而无需承受通常与此类控制相关的所有繁琐细 节。 Rust 适合哪些人 Rust 因多种原因适合许多人。让我们看看几个最重要的群体。 开发者团队 Rust 已被证明是一个对于具有不同系统编程知识水平的大型开发团队协作而言,非常高效的 工具。底层代码容易出现各种微妙的错误,在大多数其他语言中,这些错误只能通过广泛的测 试和经验丰富的开发者的仔细审核代码来捕捉。在 0, 1); let loopback = IpAddr::V6(String::from("::1")); 这些代码展示了使用枚举来存储两种不同 IP 地址的几种可能的选择。然而,事实证明存储和 编码 IP 地址实在是太常见了以致标准库提供了一个开箱即用的定义!让我们看看标准库是如 何定义 IpAddr 的:它正有着跟我们定义和使用的一样的枚举和变体,不过它将变体中的地址 数据嵌入到 file or directory" } 在生产级别的代码中,大部分 Rustaceans 选择 expect 而不是 unwrap 并提供更多关于为何操 作期望是一直成功的上下文。如此如果该假设真的被证明是错的,你也有更多的信息来用于调 试。 177/562Rust 程序设计语言 简体中文版 传播错误 当函数的实现中调用了可能会失败的操作时,除了在这个函数中处理错误外,还可以选择让调 用者知道0 码力 | 562 页 | 3.23 MB | 9 天前3尝试用RUST写教学操作系统
匿名函数->一部分的函数式特性 • 比C/C++ 更好的代码管理, 重用: cargo 和 crate • 干净宏->简化静态分析 12 RUST的安全哲学 • 尝试把系统正确性证明整合到语 ⾔言本身当中 • Rust有严格的安全约束,也可以 把编译时约束转移到运⾏时(例 如Mutex,RefCell),也允许程序 员显式地指出不安全(unsafe块), 并使⽤安全封装和管理不安全0 码力 | 23 页 | 1.53 MB | 1 年前3基于静态分析的Rust内存安全缺陷检测研究
问题根源是Rust的自动析构机制 ▪ XOR Mutability保证自动析构的安全性 ▪ Unsafe会破坏安全性保证 ▪ 自动析构优于手动析构 ▪ 该问题的反面是内存泄露问题 ❑ SafeDrop证明可在Rust编译器中适当增加相应的缺陷检测功能 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 论文发表心得 ❑ 优先选择(发现)新场景:容易发表 ▪0 码力 | 28 页 | 1.55 MB | 1 年前3新一代分布式高性能图数据库的构建 - 沈游人
其中科技进步卓越奖是 CCF 科技进步奖评选中的最高级别奖项,旨在嘉奖在计 算机科学、技术或工程领域具有重要发现、发明、原始创新,在相关领域有一 定国际影响的优秀成果, AtlasGraph 的获奖证明了其技术领先性、创新性、 重要性,在自主可控浪潮下,实现了对国外产品的有效替代,防止高新技术领 域“卡脖子”现象的发生。 海致科技集团、海致星图联合清华大学研发的“ AtlasGraph 大规模图数据分析平0 码力 | 38 页 | 24.68 MB | 1 年前3Comprehensive Rust(简体中文) 202412
main() { let x: i32 = 10; println!("x: {x}"); // x = 20; // println!("x: {x}"); } • 取消备注 x = 20,以证明变量默认是不可变的。添加 mut 关键字以允许进行更改。 • 这里的 i32 是变量的类型。编译时必须已知类型,但在很多情况下,由于具有类型推理功能(稍后介 绍),程序员可以忽略这一点。 5.3 设计策略,要构建能导致这种情况的示例颇为困难。 237 第 46 部分 添加第三方Crate Rust 库被称为 crate,可在 crates.io 中找到。Rust 的 crate 之间非常容易相互依赖。事实证明,他们确 实如此! 属性 C++ library Rust crate Build system 很多 保持一致:Cargo.toml 典型库的大小 大 小 传递依赖项 很少 很多 对于 Chromium0 码力 | 359 页 | 1.33 MB | 10 月前3Rust 语言学习笔记
String::from(" world!"); let pushed_data = |x: &mut String| { // b 再这里被引用, 但是最后还能被打印, 证明它是被 immutable 引用. x.push_str(&*b); println!("{}: {}", fn_name, x); println0 码力 | 117 页 | 2.24 MB | 1 年前3
共 10 条
- 1