Rust 语言学习笔记....................................... 39 第四章 面向对象编程 ............................................................................... 43 4.1 面向对象数据结构 .............................................. Trait ........................................................................... 50 4.3.7 trait 对象............................................................................ 52 4.3.8 trait 定义中的生命周期和可变性声明 u64, f32, f64, (), bool, char 等 等。 3.1.5 浅拷贝与深拷贝 对于基本数据类型来说,“深拷贝”和“浅拷贝“产生的效果相同。对于引用 对象类型来说,”浅拷贝“更像仅仅拷贝了对象的内存地址。 如果我们想实现 对 String 的”深拷贝“怎么办? 可以直接调用 String 的 Clone 特性实现对内 存的值拷贝而不是简单的地址拷贝。 3.1.6 高级0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust 程序设计语言简体中文版...................... 433 17. Rust 的面向对象编程特性 ................................................................................................ 435 17.1. 面向对象语言的特点 ................................... ...................... 436 17.2. 顾及不同类型值的 trait 对象 ..................................................................................... 440 17.3. 面向对象设计模式的实现 ......................................... 8/600 Rust 程序设计语言 简体中文版 第 16 章将引导我们了解不同的并发编程模型,并探讨 Rust 如何帮助你无畏地进行多线程编 程。第 17 章着眼于比较 Rust 风格与 OOP(面向对象编程)原则。 第 18 章介绍模式和模式匹配,它是在 Rust 程序中表达思想的有效方式。第 19 章是一个高级 主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、Trait、0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . 422 18. 面向对象编程特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 18.1. 面向对象语言的特征 . . . . . . . . . . . . 426 18.2. 顾及不同类型值的 trait 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 18.3. 面向对象设计模式的实现 . . . . . . . . . . . . . . . 如何帮助你无畏地进行多线程编 程。第十七章将在此基础上进一步探索 Rust 的 async 和 await 语法,以及它们所支持的轻量 级并发模型。 第十八章着眼于 Rust 风格与你可能比较熟悉的 OOP(面向对象编程)原则之间的比较。第十 九章是一个模式和模式匹配的参考,它们是在 Rust 程序中表达思想的有效方式。第二十章是 一个高级主题大杂烩,包括不安全 Rust(unsafe Rust)、宏(macro)和更多关于生命周期、0 码力 | 562 页 | 3.23 MB | 25 天前3
Hello 算法 1.2.0 简体中文 Rust 版。 ‧ 源代码可一键运行,帮助读者在练习中提升编程技能,了解算法工作原理和数据结构底层实现。 ‧ 提倡读者互助学习,欢迎大家在评论区提出问题与分享见解,在交流讨论中共同进步。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那 输入空间:用于存储算法的输入数据。 ‧ 暂存空间:用于存储算法在运行过程中的变量、对象、函数上下文等数据。 ‧ 输出空间:用于存储算法的输出数据。 一般情况下,空间复杂度的统计范围是“暂存空间”加上“输出空间”。 暂存空间可以进一步划分为三个部分。 第 2 章 复杂度分析 www.hello‑algo.com 42 ‧ 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据 // 暂存数据(变量) let node = Node::new(0); // 暂存数据(对象) let c = function(); // 栈帧空间(调用函数) return a + b + c; // 输出数据 } 2.4.2 推算方法 空间复杂度的推算方法与时间复杂度大致相同,只需将统计对象从“操作数量”转为“使用空间大小”。 而与时间复杂度不同的是,我们通常只关注最差空间复杂0 码力 | 387 页 | 18.51 MB | 10 月前3
Comprehensive Rust(简体中文) 2024122 Rc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 20.3 特征对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 20.4 练习:二叉树 . . . 197 34.2.2 数组(Arrays). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 34.2.3 特征对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 34.2.4 变量 . . . . . . . . overloading). • 宏是“卫生的”,这意味着它们不会意外地捕获它们所在作用域中的标识符。实际上,Rust 的宏只是 部分卫生。 • Rust 是多范式编程语言。例如,它具有强大的面向对象的编程功能,虽然它不是函数式语言,但包括 一系列的函数概念。 5.2 变量 Rust provides type safety via static typing. Variable bindings0 码力 | 359 页 | 1.33 MB | 10 月前3
Hello 算法 1.1.0 Rust版JavaScript、TypeScript、Dart、 Rust、C 和 Zig 等语言。 ‧ 鼓励读者在线上章节评论区互帮互助、共同进步,提问与评论通常可在两日内得到回复。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那 输入空间:用于存储算法的输入数据。 ‧ 暂存空间:用于存储算法在运行过程中的变量、对象、函数上下文等数据。 ‧ 输出空间:用于存储算法的输出数据。 一般情况下,空间复杂度的统计范围是“暂存空间”加上“输出空间”。 暂存空间可以进一步划分为三个部分。 第 2 章 复杂度分析 hello‑algo.com 42 ‧ 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据。系 // 暂存数据(变量) let node = Node::new(0); // 暂存数据(对象) let c = function(); // 栈帧空间(调用函数) return a + b + c; // 输出数据 } 2.4.2 推算方法 空间复杂度的推算方法与时间复杂度大致相同,只需将统计对象从“操作数量”转为“使用空间大小”。 而与时间复杂度不同的是,我们通常只关注最差空间复杂0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.0.0 Rust版JavaScript、TypeScript、Dart、 Rust、C 和 Zig 等语言。 ‧ 鼓励读者在线上章节评论区互帮互助、共同进步,提问与评论通常可在两日内得到回复。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那 输入空间:用于存储算法的输入数据。 ‧ 暂存空间:用于存储算法在运行过程中的变量、对象、函数上下文等数据。 ‧ 输出空间:用于存储算法的输出数据。 一般情况下,空间复杂度的统计范围是“暂存空间”加上“输出空间”。 暂存空间可以进一步划分为三个部分。 第 2 章 复杂度分析 hello‑algo.com 42 ‧ 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据。 // 暂存数据(变量) let node = Node::new(0); // 暂存数据(对象) let c = function(); // 栈帧空间(调用函数) return a + b + c; // 输出数据 } 2.4.2 推算方法 空间复杂度的推算方法与时间复杂度大致相同,只需将统计对象从“操作数量”转为“使用空间大小”。 而与时间复杂度不同的是,我们通常只关注最差空间复杂0 码力 | 383 页 | 17.61 MB | 1 年前3
基于静态分析的Rust内存安全缺陷检测研究但一般意义上的指针分析是NP-hard问题 ▪ 智能指针可行,但作为运行时方案,效率低 ▪ Rust在语法设计中引入所有权机制,简化指针分析问题 Rust所有权模型 => XOR Mutability ❑ 一个对象有且只有一个所有者 ❑ 所有权可以转移给其它变量 ▪ 用完不用还 ❑ 所有权可以被其它变量借用 ▪ 用完自动归还 ▪ 只读(immutable)借用:& ▪ 可变(mutable )借用:& alice拥有Box对象 转移所有权转移给 bob,alice失去Box 对象的所有权 fn main(){ let mut alice = Box::new(1); let bob = &alice; println!("alice:{}", alice); println!("bob:{}", bob); *alice = 2; } bob只读借用Box对象, alice临时失去修改权, alice临时失去修改权, 保留只读权 alice可读 bob自动归还Box对象, alice恢复修改权 如果需要违背XOR Mutability怎么办? ❑ 以双向链表为例,中间节点被前后两个节点访用 ❑ Rust为了提升可用性所做的妥协 ▪ 智能指针(性能损失) ▪ 允许使用裸指针(unsafe模式) • 逃逸编译器的借用检查 => 指针别名 next prev next prev next0 码力 | 28 页 | 1.55 MB | 1 年前3
Real world Rust
- Why and how we use Rust in TiKV如果 T: Send,那么可以安全的在线程间传递 T ○ 不同线程即使销毁也无所谓 ● 如果 T: Sync,那么可以安全的在线程间共享 T ● Rust 的类型推导系统和编译检查跨线程传递和共享的对象 是否满足 Send + Sync TiKV ● 大规模分布式 Key-Value 数据库 ● 支持 ACID 跨行事务支持 ● 支持 MVCC 无锁的快照读 ● 构建于 Raft 之上,不依赖分布式文件系统 snapshot ... Main thread Worker threads IO threads 跨线程通信 - 如何选择 ● Channel ○ 异构线程之间传递对象 ● Arc + Mutex ○ 同构的工作线程间共享对象 Rust 和 C ● Rust 对 C 的调用没有任何 overhead ● C 区域的调用没法保证安全 ● TiKV 场景的特殊性 ○ RocksDB 周边工具0 码力 | 29 页 | 506.53 KB | 1 年前3
Borsh 安全高效的二进制序列化Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射 • 不同的对象的二进制表示一定不同 • 便于基于二进制表示进行 Hash 字节级别确定性 • 在 Rust 中, borsh 并没有使用 serde • 全部逻辑原生实现 •0 码力 | 21 页 | 3.35 MB | 1 年前3
共 14 条
- 1
- 2













