KCL: Rust 在编译器领域的实践与探索第三届中国Rust开发者大会 KCL: Rust 在编译器领域的实践与探索 张正 蚂蚁集团 Agenda 01 KusionStack 与 KCL 02 用 Rust 重写 KCL 03 Rust 重写后的收益 04 更多的探索 01 KusionStack 与 KCL KusionStack是什么? KusionStack架构 KCL KusionStack 是什么? Language Server KCL Compiler KCL Package Manager 02 用 Rust 重写 KCL Python 代码翻译 栈式虚拟机 Rust 编译器 KCL 编译器架构升级 Source Code AST LLVM IR Native/WASM Source Code AST Bit code VM Source Code Python 更少的 Bug 稳定性提升 端到端编译执行性能提升了 66% 66 % 20 & 40 前端解析器性能提升 20倍 中端语义分析器性能提升40倍 稳定性和性能的巨大提升 50 % 语言编译器编译过程平均内存使用 量变为原来 Python 版本的一半 01 02 03 04 Case1: 单文件编译 > https://github.com/KusionStack/kcl#showcase0 码力 | 25 页 | 3.50 MB | 1 年前3
Rust 语言学习笔记57 5.2.2 依赖的详细配置: ................................................................ 58 5.2.3 自定义编译器配置 ................................................................ 58 5.2.4 feature 段落.......... html 相关内容。 理性看待 rust 语言的升级。只是升级频度高一些,这样的升级在 java 和 go 中 也普遍存在。go 中的感知稍微小一些。 每次升级都要更新相应的工具链。保证最新的编译器和链接器可以将新生成的 程序生成出来。 Rust 的包管理系统非常明显地体现了它的与众不同。 1.3 版本管理工具 作为一门更新快速的语言,rust 开发了专用的版本管理工具 rustup。 断的时候,直接做一次模式匹配,方便代码书写,使代码更紧凑。 2.3 循环表达式 2.3.1 for 循环 Rust 的 for 循环实际上和 C 语言的循环语句是不同的。这是为什么呢?因为, for 循环不过是 Rust 编译器提供的语法糖!在 rust 中,for 语句用于遍历一 个迭代器。 Rust 迭代器返回一系列的元素,每个元素是循环中的一次重复。然后它的值与 var 绑定,它在循环体中有效。每当循环体执行完后,我们从迭代器中取出下0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0会自然而然地引导你编写出 可靠的代码,并且运行速度和内存使用上都十分高效。 已经在从事编写底层代码的程序员可以使用 Rust 来提升信心。例如,在 Rust 中引入并行是相 对低风险的操作,因为编译器会替你找到经典的错误。同时你可以自信地采取更加激进的优 化,而不会意外引入崩溃或漏洞。 但 Rust 并不局限于底层系统编程。它表达力强、写起来舒适,让人能够轻松地编写出命令行 应用、网络服务器等 常高效的 工具。底层代码容易出现各种微妙的错误,在大多数其他语言中,这些错误只能通过广泛的测 试和经验丰富的开发者的仔细审核代码来捕捉。在 Rust 中,编译器充当了守门员的角色,拒 绝编译包含这些难以察觉的错误的代码,包括并发错误。通过与编译器合作,团队可以将时间 集中在程序逻辑上,而不是追踪 bug。 Rust 也为系统编程世界带来了现代化的开发工具: • Cargo 是内置的依赖管理器和 简体中文版 重视速度和稳定性的开发者 Rust 适合那些渴望在编程语言中寻求速度与稳定性的开发者。对于速度来说,既是指 Rust 可 以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)——0 码力 | 562 页 | 3.23 MB | 23 天前3
Comprehensive Rust(简体中文) 202412. 156 27.2 其他类型的测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 27.3 编译器 Lint 和 Clippy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 27.4 练习:卢恩算法 . . Cargo。 安装 请按照 https://rustup.rs/ 上的说明操作。 这将为你提供 Cargo 构建工具 (cargo) 和 Rust 编译器 (rustc)。你还将获得 rustup,这是一个命令 行实用程序, 你可以用它来安装不同的编译器版本。 安装 Rust 之后,你应当配置你的编辑器或 IDE 以开始使用 Rust。大多数编辑器使用了 rust-analyzer。 它为 VS 版本,这可能会导致意外的行为。命令如下: sudo apt install cargo rust-src rustfmt 2.1 Rust 生态系统 Rust 生态系统由许多工具组成,主要包括: • rustc:Rust 编译器,可将 .rs 文件转换为二进制文件和其他中间格式。 • cargo:Rust 依赖项管理器和构建工具。Cargo 知道如何下载托管在 https://crates.io 上的依赖 项, 并在构建项目时将它们传递给0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust并行编译的挑战与突破相关浅谈 Rust编译速度之殇 编译器设计造成编译速度缓慢 · 单态化 · 借用检查 · 宏展开 · MIR优化 ... Rust规模编译速度慢于C++ Rust编译速度之殇 提升编译效率成为近年社区重点工作 并行编译或成下一代编译效率突破利器 2017-2021,Rust编译速度已提升一倍以上 Rust社区编译器性能工作组 Rust编译器并行化 Cargo多crate并行 二进制生成并行 二进制生成并行 更多更好的并行化? Rust编译器架构 语法树生成 宏展开 命名解析 泛型解析 类型检查 借用检查 单态化 二进制生成 增量编译系统 底层数据 结构 Rust语言编译器结构总览 考虑内部编译流程并行化 Rust并行并发 编译时线程安全检查 一些常见线程安全数据结构 常用Rust并行并发库 Rust并行并发 增加程序复杂度 线程安全数据结构造成效率损失 Mutex与RwLock profileing成本 ... 收益 > 代价? Rust并行编译的挑战与突破 挑战:消减共享数据结构效率损失 共享数据结构的性能损耗问题 基于条件编译的共享数据结构实现 缺点:用户需自行生成编译器 挑战:消减共享数据结构效率损失 Specailization —— 基于GAT的共享数据结构实现 接口 入口 非共享 数据结构 共享 数据结构 接口 实现 接口 实现 执行结果 同一份代码0 码力 | 25 页 | 4.60 MB | 1 年前3
Rust语言核心竞争力-庄晓立超级计算机 • 科学运算/机器学习 • 图形图像处理 • 虚拟现实 ……都有系统编程的身影 • 操作系统 • 虚拟机/容器 • 数据库 • 3D游戏引擎 • 网络服务器 • 浏览器引擎 • 编译器、解释器 • 三维建模/动画/渲染 数据中心 • CPU/GPU • 内存/硬盘 • 电力 • 网络流量 • 其他设备和人员维护费用 都是白花花的银子,“硬件很便宜”的说法不靠 谱 你能买最新硬件,对手也能,无助于提升竞争力 get<'a>(&'a 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, 编译期保证:没有数据竞争(No Data Race) Safe V.S. Unsafe // A unsafe { // B } // A Rust类型系统和编译器从机制上保证,unsafe 代码块以外的代码(A区),一定是内存安全的。 不能被编译器确认是内存安全的代码,必须且 只能写在unsafe代码块内(B区)。 尽量把unsafe代码块限制在最小范围内,并且 用关键字unsafe突出标识出来,便于集中审查0 码力 | 51 页 | 1.09 MB | 1 年前3
基于静态分析的Rust内存安全缺陷检测研究Mutability怎么办? ❑ 以双向链表为例,中间节点被前后两个节点访用 ❑ Rust为了提升可用性所做的妥协 ▪ 智能指针(性能损失) ▪ 允许使用裸指针(unsafe模式) • 逃逸编译器的借用检查 => 指针别名 next prev next prev next prev struct List{ val: u64, next: *mut List, prev: *mut access call Rust实际表现如何? ❑ 调研了2020年12月31日前报告的185个内存安全漏洞[TOSEM'21] ▪ Rust在内存安全防护方面效果不错 ▪ 所有的漏洞(除了1个编译器漏洞)都需要unsafe code ▪ 大部分CVEs都是 API soundness的问题(未在可执行程序中发现) Std Lib 3rd-party Libs Executables Compiler Panic将导致双重释放 提前 性能:SafeDrop vs 原始Rust编译器 总结和思考 ❑ 问题根源是Rust的自动析构机制 ▪ XOR Mutability保证自动析构的安全性 ▪ Unsafe会破坏安全性保证 ▪ 自动析构优于手动析构 ▪ 该问题的反面是内存泄露问题 ❑ SafeDrop证明可在Rust编译器中适当增加相应的缺陷检测功能 大纲 一、问题背景 二、Rust指针缺陷检测方法0 码力 | 28 页 | 1.55 MB | 1 年前3
Rust 到底香不香?Meetup Kotlin 协程那些事儿 2020.10 / 11 GDG DevFest / 全球移动开发者峰会 Kotlin多平台在移动端应用与展望 2021.7 GDG 社区说 Kotlin 编译器插件:我们究竟在期待什么? 2021.11 / 12 GDG DevFest / Kotlin 中文开发者大会 从注解处理器 KAPT 到 符号处理器 KSP 2022.9 GDG 社区说 KLUE:统一 2022.10 GDG DevFest 小猿口算 Android 项目优化实践 2023.4 GDG 社区说 如何开发一款 Kotlin 编译器插件 2023.5 Kotlin 北京 Meetup 你想知道的 Jetpack Compose 的编译器黑魔法 Rust 锈 需求背景 实现思路 Hello0 码力 | 10 页 | 484.75 KB | 1 年前3
WebAssembly 简介 - 陈思衡WebAssembly 设计为安全地嵌入到网页 中。它提供一种沙箱环境,禁止直接访问 浏览器功能或用户数据。而是需要通过 host function 来访问宿主环境。 # 安全性 现在多种语言都有编译器支持 WebAssembly,如 C/C++、Rust、Go、Zig 等。 WebAssembly 简介 Photo / image / chart Wasm 的 memory 是 host 缺点 Async Wasm 解决方案 效果示例 Async Wasm 解决方案 基于 Asyncify(Binaryen) Async Wasm 解决方案 Binaryen 是一个编译器基础架构库,提供了一套用于处理 WebAssembly 的工具。 其中一个功能是 asyncify,它允许将同步的 WebAssembly 代码转换为异步代码。 就像 rust 对 async function0 码力 | 24 页 | 773.46 KB | 1 年前3
简谈 Rust 与国密 TLS - 王江桐Channel 共享状态 所有权 Send && Sync Trait 编译器静态检查 高可靠 1 2 3 ü 无GC、无Runtime、无解释器 ü 零成本抽象 ü 后端LLVM优化 ü 支持C-ABI的FFI方式 ü 支持自定义内存分配器 Rust性能基本和C、C++持平,适用于系统级编程领域 ü 强大编译器 ü 全开源方式运作 ü Cargo ü Crates.io ü0 码力 | 44 页 | 3.70 MB | 1 年前3
共 18 条
- 1
- 2













