王宜国 - 基于 Rust 编程语⾔构建 Amphitheatre CLI Desktop Server 的全平台实践经验第三届中国Rust开发者⼤会 基于 Rust 编程语⾔构建 Amphitheatre CLI / Desktop / Server 的全平台实践经验 王宜国 - 独⽴开源软件作者 RUST CHINA CONF 2023 • 项⽬背景介绍 • 产品功能演示 • 应⽤场景概览 项⽬介绍 • 概念 • 架构设计 • 技术实现 设计与实现 ⼤纲 Amphitheatre 云开发环境(Cloud Pod、Service 等同样极其简单。 kube-rs: Kubernetes Controller ⼀个典型的控制器(Controller) 即是⼀个反射器(reflector),连 同任意数量的观察者,在内部调谐 事件,通过⼀个调节器发送事件。 GitHub CI Runner 太慢? 基于 Github Actions 构建容器镜像及优化策略 • Dockerfile 多阶段构建,充分利⽤层(Layer)缓存加速能⼒;0 码力 | 34 页 | 10.81 MB | 1 年前3
Rust 语言学习笔记2.4.2.9.2.1 &str let s ="hello world";那 s 的类型就是&str,右边称为字符串字面量 literal, 程序编译成二进制文件后,这个字符串会被保存在文件内部,所以 s 是特定位 置字符串的引用,这就是为什么 s 是&str 类型。 str 生命周期是 static,但是引用是有生命周期限制的。 可以在字符串字面量前加上 r 来避免转义 //没有转义序列 需要注意的主要就是:String 类型底层实现是 vec,unicode 类型,并且拿着引用 可以改变 String 内容。有点类似中在 go 做一个特殊的 String 类型,并且内部包着一个 byte 数组。 第三章 所有权 引用借用 生命周期 一个 C 语言的例子: int* foo() { int a; // 变量 a 的作用域开始 b: bool, } 3.1.6.2 手动实现 不推荐 会进入 unsafe rust 3.1.7 Copy trait 与 Clone trait Copy 内部没有方法,Clone 内部有两个方法。 1.Copy trait 是给编译器用的,告诉编译器这个类型默认采用 copy 语义,而 不是 move 语义。Clone trait 是给程序员用的,我们必须手动调用 0 码力 | 117 页 | 2.24 MB | 1 年前3
Comprehensive Rust(简体中文) 202412121 22.2 借用检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 22.3 内部可变性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 22.4 练习:健康统计 . . 为你展示常见的 Rust 习惯用法。 我们将前四天的课程称为“Rust 基础”。 在此基础上,你可以选择深入研究一个或多个专门的主题: • Android:为期半天的课程,介绍如何在 Android 平台开发中使用 Rust(AOSP)。课程内容包括 与 C、C++ 和 Java 的互操作性。 • Chromium:为期半天的课程,介绍如何在基于 Chromium 的浏览器中使用 Rust。课程内容包括 Notes)的示例。页面中使用它来为幻灯片添加备注信息,其内容包括讲师应涉 及的要点,以及对课堂上可能出现的典型问题的回答。 11 第 1 部分 授课 本页供课程讲师使用。 以下是有关 Google 内部开展课程的一些相关背景。 上课时间通常是从上午 9:00 到下午 4:00,中间有 1 小时的午餐休息时间。这样上午和下午就各有 3 小时 上课时间。上下午上课时间段内都有多次休息时间和学生做练习的时间。0 码力 | 359 页 | 1.33 MB | 11 月前3
在Solana合约链实现IBC协议跨链互操作 - 苏胤榕IBC协议的核心已经被协议核心团队用Rust语言实现。 - 对于本身就是使用Rust语言作为智能合约开发的区块链 平台来说,支持集成支持IBC协议会很方便。 - 这里优先构想了在Solana链上实现IBC协议,因为 Solana平台本身极 低的gas消耗,很适合我现在构思 的这套实现方案。(后面会做解释) 引入Solana作为示例平台 - Solana极低的Gas花销。 - Anchor合约开发框架,大大降低了Rust合 Anchor合约开发框架,大大降低了Rust合 约开发者在Solana上开发智能合约的难度。 - 以及本人对Solana平台的喜欢,优先考虑 了Solana平台,但是这套方案是可以推广到 任何的Rust智能合约平台的。 大致讲解下IBC协议的原理, 以及参与整个IBC协议活动的不同决策 IBC协议概述> 详细介绍IBC协议的基本概念和原理 Connection创建原理 Connection创建OpenInit Connection创建OpenTry 3.Solana平台的支持:Solana是一个基于Rust开发 的 高性能区块链平台,提供了完善的开发工具和文档,可 以帮助开发者更加便捷地进行Rust合约链开发。 4. Informal Systems提供的IBC协议Rust语言实现和 协议的形式化验证可以有效提高IBC协议的安全性和可 靠性,保障跨链交易的安全和正确性。 简要介绍Solana作为使用Rust开发智能合约的平台 在Solana链上实现IBC协议的核心要点0 码力 | 29 页 | 3.05 MB | 1 年前3
Hello 算法 1.1.0 Rust版‧“时间和空间的增长趋势”表示复杂度分析关注的不是运行时间或占用空间的具体值,而是时间或空间 增长的“快慢”。 复杂度分析克服了实际测试方法的弊端,体现在以下两个方面。 ‧ 它独立于测试环境,分析结果适用于所有运行平台。 第 2 章 复杂度分析 hello‑algo.com 19 ‧ 它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。 Tip 如果你仍对复杂度的概念感到困惑,无须担心,我们会在后续章节中详细介绍。 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 2. 评估各种计算操作所需的运行时间,例如加法操作 + 需要 1 ns ,乘法操作 * 需要 10 ns ,打印操作 print() 需要 5 ns 等。 3. 统计代码中所有的计算操作,并将所有操作的执行时间求和,从而得到运行时间。 例如在以下代码中,输入数据大小为 ? : // 在某运行平台下 fn (6? + 12) ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版复杂度分析克服了实际测试方法的弊端,体现在以下几个方面。 第 2 章 复杂度分析 www.hello‑algo.com 19 ‧ 它无需实际运行代码,更加绿色节能。 ‧ 它独立于测试环境,分析结果适用于所有运行平台。 ‧ 它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。 Tip 如果你仍对复杂度的概念感到困惑,无须担心,我们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 2. 评估各种计算操作所需的运行时间,例如加法操作 + 需要 1 ns ,乘法操作 * 需要 10 ns ,打印操作 print() 需要 5 ns 等。 3. 统计代码中所有的计算操作,并将所有操作的执行时间求和,从而得到运行时间。 例如在以下代码中,输入数据大小为 ? : // 在某运行平台下 fn (6? + 12) ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版‧“时间和空间的增长趋势”表示复杂度分析关注的不是运行时间或占用空间的具体值,而是时间或空间 增长的“快慢”。 复杂度分析克服了实际测试方法的弊端,体现在以下两个方面。 ‧ 它独立于测试环境,分析结果适用于所有运行平台。 第 2 章 复杂度分析 hello‑algo.com 19 ‧ 它可以体现不同数据量下的算法效率,尤其是在大数据量下的算法性能。 � 如果你仍对复杂度的概念感到困惑,无须担心,我们会在后续章节中详细介绍。 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 2. 评估各种计算操作所需的运行时间,例如加法操作 + 需要 1 ns ,乘法操作 * 需要 10 ns ,打印操作 print() 需要 5 ns 等。 3. 统计代码中所有的计算操作,并将所有操作的执行时间求和,从而得到运行时间。 例如在以下代码中,输入数据大小为 ? : // 在某运行平台下 fn (6? + 12) ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。0 码力 | 383 页 | 17.61 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 15.5. RefCell与内部可变性模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . only show the file names =% main.exe main.pdb main.rs 这展示了扩展名为 .rs 的源文件、可执行文件(在 Windows 下是 main.exe,其它平台是 main),以及当使用 CMD 时会有一个包含调试信息、扩展名为 .pdb 的文件。从这里开始运行 main 或 main.exe 文件,如下: $ ./main # Windows 是 .\main 我们把每种可能的状态称为一种 枚举成员(variant)。 第六章将介绍枚举的更多细节。这里的 Result 类型将用来编码错误处理的信息。 Result 的成员是 Ok 和 Err,Ok 成员表示操作成功,内部包含成功时产生的值。Err 成员则意 味着操作失败,并且 Err 中包含有关操作失败的原因或方式的信息。 Result 类型的值,像其他类型一样,拥有定义于其实例上的方法。Result 的实例拥有 0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版............................................................................ 388 15.5. RefCell与内部可变性模式 ................................................................................... 393 15.6. only show the file names =% main.exe main.pdb main.rs 这展示了扩展名为 .rs 的源文件、可执行文件(在 Windows 下是 main.exe,其它平台是 main),以及当使用 CMD 时会有一个包含调试信息、扩展名为 .pdb 的文件。从这里开始运行 main 或 main.exe 文件,如下: $ ./main # Windows 是 .\main 一种 枚举成员(variant)。 第六章将介绍枚举的更多细节。这里的 Result 类型将用来编码错误处理的信息。 Result 的成员是 Ok 和 Err ,Ok 成员表示操作成功,内部包含成功时产生的值。Err 成员 则意味着操作失败,并且包含失败的前因后果。 这些 Result 类型的作用是编码错误处理信息。Result 类型的值,像其他类型一样,拥有定 义于其上的方法。Result 0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust语言核心竞争力-庄晓立(路还很长) • 姗姗来迟的11, 小幅改进的14, 眼前的17, 未来的 2x… • 本文后面不再涉及现代C++,因为对其了解有限 系统编程小结 • 系统编程是软件行业的基石 • 很多基础性的、平台性的大中型项目…… • ……或隶属于系统编程,或依赖于系统编程 • 系统编程强调底层控制、运行性能和系统安全 • 当前主流的系统编程语言C/C++在内存安全方面有 重大欠缺 零运行时 Minimal self) -> &'a i32 { &self.x } struct Foo<'a, T: 'a> { x: &'a T, } Borrow Checker Borrowck是编译器内部组件,负责在 “编译期” 追踪审查引 用的有效性,是保证内存安全的重要功臣。运行时零开销。 fn main() { let mut v = vec![0, 1, 2, 3, 4, 5, 6];0 码力 | 51 页 | 1.09 MB | 1 年前3
共 36 条
- 1
- 2
- 3
- 4













