 Borsh 安全高效的二进制序列化Rust 开发者大会 安全高效的二进制序列化 Daniel Wang @ NEAR Borsh • 运行、编码效率 • 确定性 • 跨平台兼容性 二进制序列化的问题 Binary Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射 • 不同的对象的二进制表示一定不同 • 便于基于二进制表示进行 Hash 字节级别确定性 • 在 Rust 中, borsh 并没有使用 serde • 全部逻辑原生实现 • 序列化、反序列化速度大幅领先其他解决方案 执行速度 执行速度 benchmark 执行速度 benchmark 执行速度 benchmark 执行速度 benchmark • 编译后的体积更小 • • borsh 序列化后的二进制更精简 轻量级 序列化结果体积对比 Borsh 基本用法 Case Study NEAR 智能合约 Case Study Solana 智能合约 Case Study • non self-describing • 保证序列化后的二进制唯一性和确定性 • 主要序列化规则 Borsh 规范 • 整数采用低字节序( little endian) 存储0 码力 | 21 页 | 3.35 MB | 1 年前3 Borsh 安全高效的二进制序列化Rust 开发者大会 安全高效的二进制序列化 Daniel Wang @ NEAR Borsh • 运行、编码效率 • 确定性 • 跨平台兼容性 二进制序列化的问题 Binary Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射 • 不同的对象的二进制表示一定不同 • 便于基于二进制表示进行 Hash 字节级别确定性 • 在 Rust 中, borsh 并没有使用 serde • 全部逻辑原生实现 • 序列化、反序列化速度大幅领先其他解决方案 执行速度 执行速度 benchmark 执行速度 benchmark 执行速度 benchmark 执行速度 benchmark • 编译后的体积更小 • • borsh 序列化后的二进制更精简 轻量级 序列化结果体积对比 Borsh 基本用法 Case Study NEAR 智能合约 Case Study Solana 智能合约 Case Study • non self-describing • 保证序列化后的二进制唯一性和确定性 • 主要序列化规则 Borsh 规范 • 整数采用低字节序( little endian) 存储0 码力 | 21 页 | 3.35 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.3 二叉树数组表示 二叉树数组表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.4 二叉搜索树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.5 AVL 树 * . . . . . . . . 213 10.1 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2 二分查找插入点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.3 二分查找边界 .0 码力 | 387 页 | 18.51 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Rust 版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.3 二叉树数组表示 二叉树数组表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.4 二叉搜索树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.5 AVL 树 * . . . . . . . . 213 10.1 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2 二分查找插入点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.3 二分查找边界 .0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.1.0 Rust版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.3 二叉树数组表示 二叉树数组表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.4 二叉搜索树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.5 AVL 树 * . . . . . . . . 213 10.1 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2 二分查找插入点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.3 二分查找边界 .0 码力 | 388 页 | 18.50 MB | 1 年前3 Hello 算法 1.1.0 Rust版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.3 二叉树数组表示 二叉树数组表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.4 二叉搜索树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.5 AVL 树 * . . . . . . . . 213 10.1 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2 二分查找插入点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.3 二分查找边界 .0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.0.0 Rust版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 7.3 二叉树数组表示 二叉树数组表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 7.4 二叉搜索树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 7.5 AVL 树 * . . . . . . . . 213 10.1 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2 二分查找插入点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.3 二分查找边界 .0 码力 | 383 页 | 17.61 MB | 1 年前3 Hello 算法 1.0.0 Rust版7.1 二叉树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.2 二叉树遍历 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 7.3 二叉树数组表示 二叉树数组表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 7.4 二叉搜索树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 7.5 AVL 树 * . . . . . . . . 213 10.1 二分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2 二分查找插入点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.3 二分查找边界 .0 码力 | 383 页 | 17.61 MB | 1 年前3
 Rust 程序设计语言简体中文版..................................................................... 362 14.4. 使用 cargo install 安装二进制文件 ........................................................................... 368 14.5. Cargo 自定义扩展命令 Rust 程序设计语言 简体中文版 这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注 意。首先 Rust 的缩进风格使用 4 个空格,而不是 1 个制表符(tab)。 第二,println! 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println (没 有! )。我们将在第十九章详细讨论宏。现在你只需记住,当看到符号 ! 的时候,就意味着调 编译器编译它,即输入 rustc 命令并传入源文件名 称,如下: $ rustc main.rs 如果你有 C 或 C++ 背景,就会发现这与 gcc 和 clang 类似。编译成功后,Rust 会输出一个 二进制的可执行文件。 在 Linux、macOS 或 Windows 的 PowerShell 上,在 shell 中输入 ls 命令可以看见这个可 执行文件。 $ ls main main.rs0 码力 | 600 页 | 12.99 MB | 1 年前3 Rust 程序设计语言简体中文版..................................................................... 362 14.4. 使用 cargo install 安装二进制文件 ........................................................................... 368 14.5. Cargo 自定义扩展命令 Rust 程序设计语言 简体中文版 这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注 意。首先 Rust 的缩进风格使用 4 个空格,而不是 1 个制表符(tab)。 第二,println! 调用了一个 Rust 宏(macro)。如果是调用函数,则应输入 println (没 有! )。我们将在第十九章详细讨论宏。现在你只需记住,当看到符号 ! 的时候,就意味着调 编译器编译它,即输入 rustc 命令并传入源文件名 称,如下: $ rustc main.rs 如果你有 C 或 C++ 背景,就会发现这与 gcc 和 clang 类似。编译成功后,Rust 会输出一个 二进制的可执行文件。 在 Linux、macOS 或 Windows 的 PowerShell 上,在 shell 中输入 ls 命令可以看见这个可 执行文件。 $ ls main main.rs0 码力 | 600 页 | 12.99 MB | 1 年前3
 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 14.4. 使用 cargo install 安装二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 目章节中,我们应用目前所学的知识一同构建小型程序。第二、十二和二十一章是项目章节; 其余都是概念章节。 第一章介绍如何安装 Rust,如何编写一个 “Hello, world!” 程序,以及如何使用 Rust 的包管理 器和构建工具 Cargo。第二章是一个编写 Rust 语言的实战介绍,我们会构建一个猜数字游戏。 我们会站在较高的层次介绍一些概念,而后续章节将提供更多细节。如果你希望立刻就动手实 践一下,第二章是开始的好地方。第三章介绍 Rust 中类似其他编程语言的特性,第四章会学 习 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在进入下一环节之前学习每一 个细节,你可能会想要跳过第二章,直接阅读第三章,等到你想要通过项目应用所学到的细节 时再回到第二章。 第五章讨论结构体(struct)和方法,第六章介绍枚举(enum)、match 表达式和 if let 控 制流结构。在 Rust 中,创建自定义类型需要用到结构体和枚举。0 码力 | 562 页 | 3.23 MB | 25 天前3 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 14.4. 使用 cargo install 安装二进制文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 目章节中,我们应用目前所学的知识一同构建小型程序。第二、十二和二十一章是项目章节; 其余都是概念章节。 第一章介绍如何安装 Rust,如何编写一个 “Hello, world!” 程序,以及如何使用 Rust 的包管理 器和构建工具 Cargo。第二章是一个编写 Rust 语言的实战介绍,我们会构建一个猜数字游戏。 我们会站在较高的层次介绍一些概念,而后续章节将提供更多细节。如果你希望立刻就动手实 践一下,第二章是开始的好地方。第三章介绍 Rust 中类似其他编程语言的特性,第四章会学 习 Rust 的所有权系统。如果你是一个特别细致的学习者,喜欢在进入下一环节之前学习每一 个细节,你可能会想要跳过第二章,直接阅读第三章,等到你想要通过项目应用所学到的细节 时再回到第二章。 第五章讨论结构体(struct)和方法,第六章介绍枚举(enum)、match 表达式和 if let 控 制流结构。在 Rust 中,创建自定义类型需要用到结构体和枚举。0 码力 | 562 页 | 3.23 MB | 25 天前3
 基于 Rust 语言编写的可编程的全球分布式 MQTT 服务器 王文庭⽐如说分布式消息⼀致性问题,边缘节 点⾃动发现等问题 传统⽅案痛点 1)数据传输量⼤,中⼼压⼒⼤,⾼可⽤要求⾼ 2)数据发布与订阅都在中⼼,延迟⾼ 3)源站直接暴露 4)数据不好就近进⾏脱敏处理 5)数据不好就近进⾏存储 新⽅案优势 1)分摊中⼼压⼒ 2)降低延迟 3)隐藏源站 4)边缘计算 5)边缘存储 场景:设备就近接⼊/处理0 码力 | 31 页 | 3.95 MB | 1 年前3 基于 Rust 语言编写的可编程的全球分布式 MQTT 服务器 王文庭⽐如说分布式消息⼀致性问题,边缘节 点⾃动发现等问题 传统⽅案痛点 1)数据传输量⼤,中⼼压⼒⼤,⾼可⽤要求⾼ 2)数据发布与订阅都在中⼼,延迟⾼ 3)源站直接暴露 4)数据不好就近进⾏脱敏处理 5)数据不好就近进⾏存储 新⽅案优势 1)分摊中⼼压⼒ 2)降低延迟 3)隐藏源站 4)边缘计算 5)边缘存储 场景:设备就近接⼊/处理0 码力 | 31 页 | 3.95 MB | 1 年前3
 Await-Tree Async Rust 可观测性的灵丹妙药 -  赵梓淇Cache Single-Flight Async Stuck :环形资源依赖 Await Tree 在 RisingWave 中的应用 • gRPC Streaming 连接复用 & 反压 Await-Tree Async Rust 可观测性的灵丹妙药 总结 • Async 生态下的 Stack Tree Backtrace 工具 • 实时观测各个 Task 的执行状态 • 直观分析0 码力 | 37 页 | 8.60 MB | 1 年前3 Await-Tree Async Rust 可观测性的灵丹妙药 -  赵梓淇Cache Single-Flight Async Stuck :环形资源依赖 Await Tree 在 RisingWave 中的应用 • gRPC Streaming 连接复用 & 反压 Await-Tree Async Rust 可观测性的灵丹妙药 总结 • Async 生态下的 Stack Tree Backtrace 工具 • 实时观测各个 Task 的执行状态 • 直观分析0 码力 | 37 页 | 8.60 MB | 1 年前3
 Rust算法教程 The Algos (algorithms)指针数组和结构数组等。数组还可以有⼀维、⼆维以及多维等表现形式。 2. 栈( Stack) 栈是⼀种特殊的线性表,它只能在⼀个表的⼀个固定端进⾏数据结点的插⼊和删 除操作。栈按照后进先出的原则来存储数据,也就是说,先插⼊的数据将被压⼊栈底,最后 插⼊的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语⾔程序中,经常⽤于重 要数据的现场保护。栈中没有数据时,称为空栈。 3. 队列(Queue) 队列和栈类似,也是⼀种特殊的线性表。和栈不同的是,队列只允许在表的⼀0 码力 | 270 页 | 8.46 MB | 1 年前3 Rust算法教程 The Algos (algorithms)指针数组和结构数组等。数组还可以有⼀维、⼆维以及多维等表现形式。 2. 栈( Stack) 栈是⼀种特殊的线性表,它只能在⼀个表的⼀个固定端进⾏数据结点的插⼊和删 除操作。栈按照后进先出的原则来存储数据,也就是说,先插⼊的数据将被压⼊栈底,最后 插⼊的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语⾔程序中,经常⽤于重 要数据的现场保护。栈中没有数据时,称为空栈。 3. 队列(Queue) 队列和栈类似,也是⼀种特殊的线性表。和栈不同的是,队列只允许在表的⼀0 码力 | 270 页 | 8.46 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Rust 版7.1 二元樹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2 二元樹走訪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.3 二元樹陣列表示 二元樹陣列表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.4 二元搜尋樹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.5 AVL 樹 * . . . . . . . . 214 10.1 二分搜尋 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 10.2 二分搜尋插入點 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 10.3 二分搜尋邊界 .0 码力 | 388 页 | 18.82 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 Rust 版7.1 二元樹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 7.2 二元樹走訪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 7.3 二元樹陣列表示 二元樹陣列表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 7.4 二元搜尋樹 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.5 AVL 樹 * . . . . . . . . 214 10.1 二分搜尋 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 10.2 二分搜尋插入點 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 10.3 二分搜尋邊界 .0 码力 | 388 页 | 18.82 MB | 10 月前3
共 24 条
- 1
- 2
- 3













