王宜国 - 基于 Rust 编程语⾔构建 Amphitheatre CLI  Desktop  Server 的全平台实践经验第三届中国Rust开发者⼤会 基于 Rust 编程语⾔构建 Amphitheatre CLI / Desktop / Server 的全平台实践经验 王宜国 - 独⽴开源软件作者 RUST CHINA CONF 2023 • 项⽬背景介绍 • 产品功能演示 • 应⽤场景概览 项⽬介绍 • 概念 • 架构设计 • 技术实现 设计与实现 ⼤纲 Amphitheatre 云开发环境(Cloud Amphitheatre 中创建 即可实时部署到云端 进⾏测试和验收 上线 利⽤ Amphitheatre 配置⽂ 件, 执⾏标准 CI/CD ⼯ 作流,轻松发布! 开发⼯程师需要在本机安装各种编程语⾔的运⾏时和相关的框 架以及库,随着业务规模的增⻓,多语⾔多版本的维护和管理 变得越来越复杂。 技术栈杂多 研发流程⻓达⼗⼏个步骤:安装开发软件、配置环境、克隆代 码、开发、本地调试、提交代码、编译构建、⾃动化测试、部 排练(申请环境) 2 替换(切换版本) 3 演出(运⾏) 搭档 适⽤于 29+ 种 编程语⾔ 您可以在⼀个地⽅测量项⽬中所有 语⾔以及领域中所有项⽬的可靠 性、安全性和可维护性。 从语⾔到语⾔,我们为您提供有凝 聚⼒的体验和⼀致的指标集以及数 百条静态代码分析规则。 ⽆需配置环境,⽀持多种编程语⾔和框架 Kayn Sona Redis ETCD Riven Event Account0 码力 | 34 页 | 10.81 MB | 1 年前3
 Rust 程序设计语言简体中文版........................................ 598 4/600 Rust 程序设计语言 简体中文版 R u s t 程 序 设 计 语 言 Rust 程序设计语言 title-page.md commit d94e03a18a2590ed3f1c67b859cb11528d2a2d5c 本书的英文原版作者为 Steve Klabnik Rust,都应该能正常运行本书中的内容。 命令行标记 本章和全书中,我们会展示一些在终端中使用的命令。所有需要输入到终端的行都以 $ 开头。你不需要输入 $ 字符;这里显示的 $ 字符表示命令行提示符,仅用于提示 每行命令的起点。不以 $ 起始的行通常展示前一个命令的输出。另外,PowerShell 专用的示例会采用 > 而不是 $ 。 在 Linux 或 macOS 上安装 rustup 如果你使用 md commit f801008f555e4e94aae826cf45f3a8011a773098 既然安装好了 Rust,是时候来编写第一个 Rust 程序了。当学习一门新语言的时候,使用该语 言在屏幕上打印 Hello, world! 是一项传统,我们将沿用这一传统! 注意:本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具,以及代码位 于何处并没有特定的要求,如果你更倾0 码力 | 600 页 | 12.99 MB | 1 年前3
 Rust 程序设计语言 简体中文版 1.85.0Rust,都应该能正常运行本书中的内容。 命令行标记 本章和全书中,我们会展示一些在终端中使用的命令。所有需要输入到终端的行都以 $ 开头。你不需要输入 $ 字符;这里显示的 $ 字符表示命令行提示符,仅用于提示每 行命令的起点。不以 $ 起始的行通常展示前一个命令的输出。另外,PowerShell 专 用的示例会采用 > 而不是 $。 在 Linux 或 macOS 上安装 rustup 如果你使用 --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh 此命令下载一个脚本并开始安装 rustup 工具,这会安装最新稳定版 Rust。过程中可能会提示 你输入密码。如果安装成功,将会出现如下内容: Rust is installed now. Great! 另外,你还需要一个 链接器(linker),它是 Rust 用来将其编译的输出链接成一个文件的程 Windows 上安装 rustup 在 Windows 上,前往 https://www.rust-lang.org/install.html 并按照说明安装 Rust。在安 装过程的某个步骤,你会被提示要安装 Visual Studio。它提供了一个链接器和编译程序所需 的原生库。如果你在此步骤需要更多帮助,请访问 https://rust-lang.github.io/rustup/ insta0 码力 | 562 页 | 3.23 MB | 29 天前3
 Comprehensive Rust(简体中文) 202412. . 343 66.3 并发编程:下午练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 XV 结束语 351 67 谢谢! 352 68 词汇表 353 69 其他 Rust 资源 357 70 鸣谢 358 9 欢迎来到 Comprehensive Rust build passing code sample that has focus. • s : Activate the search bar. 1.3 翻译 一批优秀的志愿者已将本课程翻译成其他语言: • 巴西葡萄牙语版本译者:@rastringer、@hugojacob、@joaovicmendes 和 @henrif75。 • 简体中文版本译者:@suetfei、@wnghl、@anlunx、@kongy、@n Korean by @keispace, @jiyongp, @jooyunghan, and @namhyung. • 西班牙语版本译者:@deavid。 使用右上角的语言选择器切换语言。 未完成的翻译 还有很多语言版本仍在翻译中。以下是最近更新的翻译版本的链接: • 孟加拉语版本译者:@raselmandol。 • 法语版本译者:@KookaS 和@vcaen。 15 • 德语版本译者:@Throvn0 码力 | 359 页 | 1.33 MB | 10 月前3
 Rust 语言学习笔记而表达式语句就是程序识别的一条执行表达式的语句。 例如 var a=b; 这条是赋值语句,这里微小的差别就是加上了分号;作为语句结 束符。 其实表达式简单的可以理解成某语言的语法,而由这些语法构成的一条执行语 句则是表达式语句。最直观的根据是否有分号来判断。 但是在 rust 语言中有点不同, “let a = 5”是表达式语句,即使没有分号。 let y = (let a = 4);会返回下面的错误: println!("{:?}",a) } 从上面可以看出,以 vec!为函数参数则发生了 move,在后面无法使用。 以&vec!为函数参数,后续仍然可以使用&vec!。 错误提示中也是说明根据是否实现 copy trait 来决定是否进行所有权的转移。 3.4.2 涉及到函数和结构体的借用检查器 在 rust 中引入引用后,我们需要使用引入借用检查器来保证引用的生命周期不 push_foo_element(foo3); } 以上代码中完全不知道 foo 是一个什么东西。安全也无从说起了,只能靠文档。 因此在 ffi 调用时往往会丧失掉 rust 类型系统带来的方便和安全。在这里提供 一个小技巧:使用 Box>来包装你的类型。 rust 的 Any 类型为 rust 带来了运行时反射的能力,使用 Any 跨越 ffi 边界将 极大提高程序安全性。 use std::any::Any; 0 码力 | 117 页 | 2.24 MB | 1 年前3
 Hello 算法 1.1.0 Rust版本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: 给定一个函数,我们可以用上述技巧来统计操作数量: fn algorithm(n: i32) { let mut a = 1; // +0(技巧 1) a = a + n; // +0(技巧 1) // +n(技巧 2) for i in 0..(5 * n + 1) { 第 2 章 复杂度分析 hello‑algo.com 32 println!("{}", 0); } // +n*n(技巧 3)0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: 给定一个函数,我们可以用上述技巧来统计操作数量: fn algorithm(n: i32) { let mut a = 1; // +0(技巧 1) a = a + n; // +0(技巧 1) // +n(技巧 2) for i in 0..(5 * n + 1) { 第 2 章 复杂度分析 www.hello‑algo.com 32 println!("{}", 0); } // +n*n(技巧0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.0.0 Rust版本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 “如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 出以下计数简化技巧。 1. 忽略 ?(?) 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: 给定一个函数,我们可以用上述技巧来统计操作数量: fn algorithm(n: i32) { let mut a = 1; // +0(技巧 1) a = a + n; // +0(技巧 1) // +n(技巧 2) for i in 0..(5 * n + 1) { 第 2 章 复杂度分析 hello‑algo.com 32 println!("{}", 0); } // +n*n(技巧 3)0 码力 | 383 页 | 17.61 MB | 1 年前3
 KCL: Rust 在编译器领域的实践与探索可以用统一的组织和操作界面定义应用交付生命周期,充分 利用Kubernetes和云的混合能力,通过端到端的交付工作 流程,真正实现集中定义、随处交付。 KusionStack 架构 • KCL:面向应用研发者的 配置策略专用高级编程语 言,及其协议组,工具链及 IDE 插件 • Kusion:运维引擎、工具 链、服务层,IDE 工作空间 及社区技术集成套件 • Konfig:应用配置及基础 模型共享仓库,及面向 GitOps 800 900 单文件 用户定义 + Konfig (120+) Python Rust Parser Resolver e2e IDE: 用户体验的提升 基于编译器前中端数十倍的 性能提示,Rust 重写的 LSP 极大的提升了用户体验 端到端响应时间: 6s -> 100 ms 04 更多的探索 CompilerBase: 通用编译器组件 IDE 友好的编译器架构 RustCodeBook:0 码力 | 25 页 | 3.50 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Rust 版出以下計數簡化技巧。 1. 忽略 ?(?) 中的常數項。因為它們都與 ? 無關,所以對時間複雜度不產生影響。 2. 省略所有係數。例如,迴圈 2? 次、5? + 1 次等,都可以簡化記為 ? 次,因為 ? 前面的係數對時間複 雜度沒有影響。 3. 迴圈巢狀時使用乘法。總操作數量等於外層迴圈和內層迴圈操作數量之積,每一層迴圈依然可以分別 套用第 1. 點和第 2. 點的技巧。 給定一個函式,我們可以用上述技巧來統計操作數量: 給定一個函式,我們可以用上述技巧來統計操作數量: fn algorithm(n: i32) { let mut a = 1; // +0(技巧 1) a = a + n; // +0(技巧 1) // +n(技巧 2) for i in 0..(5 * n + 1) { 第 2 章 複雜度分析 www.hello‑algo.com 32 println!("{}", 0); } // +n*n(技巧 +n*n(技巧 3) for i in 0..(2 * n) { for j in 0..(n + 1) { println!("{}", 0); } } } 以下公式展示了使用上述技巧前後的統計結果,兩者推算出的時間複雜度都為 ?(?2) 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整統計 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?20 码力 | 388 页 | 18.82 MB | 10 月前3
共 20 条
- 1
 - 2
 













