Rust 程序设计语言简体中文版
.................................................................................. 272 12.1. 接受命令行参数 .................................................................................................. 这几行定义了一个名叫 main 的函数。main 函数是一个特殊的函数:在可执行的 Rust 程序 中,它总是最先运行的代码。第一行代码声明了一个叫做 main 的函数,它没有参数也没有返 回值。如果有参数的话,它们的名称应该出现在小括号 () 中。 函数体被包裹在 {} 中。Rust 要求所有函数体都要用花括号包裹起来。一般来说,将左花括 号与函数声明置于同一行并以空格分隔,是良好的代码风格。 )。我们将在第十九章详细讨论宏。现在你只需记住,当看到符号 ! 的时候,就意味着调 用的是宏而不是普通函数,并且宏并不总是遵循与函数相同的规则。 第三,"Hello, world!" 是一个字符串。我们把这个字符串作为一个参数传递给 println! , 字符串将被打印到屏幕上。 第四,该行以分号结尾(; ),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以分号结尾。 编译和运行是彼此独立的步骤0 码力 | 600 页 | 12.99 MB | 1 年前3Rust 程序设计语言 简体中文版 1.85.0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 12.1. 接受命令行参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 这会将这些包的下载结果缓存起来,因此你之后就不需要再下载它们了。运行完该命令后,你 无需保留 get-dependencies 文件夹。一旦你运行了这些命令,就可以在本书之后所有的 cargo 命令中,使用 --offline 参数来使用这些缓存的版本,而不必尝试使用网络。 14/562Rust 程序设计语言 简体中文版 Hello, World! 既然安装好了 Rust,是时候来编写第一个 Rust 程序了。当学习一门新语言的时候,使用该语 } 这几行定义了一个名叫 main 的函数。main 函数是一个特殊的函数:在可执行的 Rust 程序中, 它总是最先运行的代码。第一行代码声明了一个叫做 main 的函数,它没有参数也没有返回值。 如果有参数的话,它们的名称应该出现在小括号 () 中。 函数体被包裹在 {} 中。Rust 要求所有函数体都要用花括号包裹起来。一般来说,将左花括号 与函数声明置于同一行并以空格分隔,是良好的代码风格。0 码力 | 562 页 | 3.23 MB | 9 天前3Rust 语言学习笔记
................................................................................ 38 3.4.1.函数传递参数和返回参数类似于 let 语句 .................................... 38 3.4.2 涉及到函数和结构体的借用检查器 ...................... ..................................................................................... 48 4.3.1 泛型参数约束...................................................................... 48 4.3.2 trait 与内置类型 ... 5.1.2 几种常见的属性 ................................................................... 54 5.2 cargo 参数配置 ............................................................................ 57 5.2.1 package 配置0 码力 | 117 页 | 2.24 MB | 1 年前3Comprehensive Rust(简体中文) 202412
} if i % 2 == 0 { continue; } println!("{}", i); } } 6.3.1 Labels continue 和 break 都可以选择接受一个标签参数,用来终止嵌套循环: fn main() { let s = [[5, 6, 7], [8, 9, 10], [21, 15, 32]]; let mut elements_searched = 32 gcd(b, a % b) } else { a } } fn main() { println!("gcd: {}", gcd(143, 52)); } • 类型跟随在声明的参数后(与某些编程语言相反),然后是返回类型。 • The last expression in a function body (or any block) becomes the return value implementation. – 始终采用固定数量的参数。不支持默认参数。宏可用于支持可变函数。 – Always takes a single set of parameter types. These types can be generic, which will be covered later. 6.6 宏 宏在编译过程中会扩展为 Rust 代码,并且可以接受可变数量的参数。它们以! 结尾来进行区分。Rust0 码力 | 359 页 | 1.33 MB | 10 月前3新一代分布式高性能图数据库的构建 - 沈游人
丰富的自研图算法 • 环路识别、链路识别、节点间全路径、 发散子图识别、汇聚子图识别、金字塔 子图识别 与图数据库的深度结合 使用 cypher 语句直接调用 支持在用户筛选出的子图上计算 灵活的参数设定 自研图计算系统架构、极致的性能优化 深度适应客户的系统环境和算法需求 • 机器数量有限,通常小于 10 • 网络带宽不高(千兆、万兆以太网) • 需要支持各种不同类型的图计算算法 客户的信任 • 上线某银行反欺诈场景 业务效果提升 10%+ 灵活易用的开发平台 • AtlasML Python Library • 集成 Jupyter Notebook 超参数自动优化 • 支持超参数自动调优,解放算 法科学家生产力,避免繁杂的 手动调参 海致图神经网络平台特点 Rust 语言特性助力构建高性能图数据库 01 利用 Rust Stream 进行数据流式 处理0 码力 | 38 页 | 24.68 MB | 1 年前3Hello 算法 1.1.0 Rust版
1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: // === File: recursion.rs === /* 尾递归 */ fn tail_recur(n: i32, res: i32) -> i32 { // 终止条件 后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式:0 码力 | 388 页 | 18.50 MB | 1 年前3Hello 算法 1.2.0 简体中文 Rust 版
1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: // === File: recursion.rs === /* 尾递归 */ fn tail_recur(n: i32, res: i32) -> i32 { // 终止条件 后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式:0 码力 | 387 页 | 18.51 MB | 10 月前3Hello 算法 1.0.0 Rust版
1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: // === File: recursion.rs === /* 尾递归 */ fn tail_recur(n: i32, res: i32) -> i32 { // 终止条件 后出”原则异曲同工。 事实上,“调用栈”和“栈帧空间”这类递归术语已经暗示了递归与栈之间的密切关系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式:0 码力 | 383 页 | 17.61 MB | 1 年前3洛佳 组件化驱动、ROM运行环境与RustSBI
常包含处理器配置、时 钟和闪存配置等部分 #[entry] 过程宏 • 过程宏是卫生宏,完成语法树间的转 换,此处用于将main函数转换为固 件需要的入口函数。 • 包含ABI转换、检查参数等步骤。 • 使用过程宏时,同时使用对应包中的 start初始化代码。start代码无需由 用户编写,而是包含在宏生成的输出 代码中。 • 编译即可获得包含镜像头的固件包, 这是传统开发方法不具备的功能。 向量化陷入:硬件取向量,分流mtime、msoft等中断 过程和异常过程,进一步细化通路,明确上下文保存 需求 • 不同等级的上下文保存到不同结构体中,地址存于突 发寄存器,快速处理程序可为完整处理程序提供参数 • 项目地址:https://github.com/YdrMaster/fast- trap 示例:RustSBI原型设计系统选型界面 RustSBI与生态后续引导链 • 对RISC-V UEFI,RustSBI准备好SBI0 码力 | 21 页 | 3.12 MB | 1 年前3Rust并行编译的挑战与突破
基于GAT的共享数据结构实现 接口 入口 非共享 数据结构 共享 数据结构 接口 实现 接口 实现 执行结果 同一份代码 线程数为1 线程数大于1 同一份代码 缺点:业务代码带有泛型参数 挑战:消减共享数据结构效率损失 动态线程安全检查 —— 自动切换数据同步模式 数据结 构方法 数据 同步 数据 同步 返回结果 线程数为1 线程数>1 Lock 单线程 同步器0 码力 | 25 页 | 4.60 MB | 1 年前3
共 13 条
- 1
- 2