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 Python code Pros Cons 简单易上手 生态丰富 研发效率高 性能问题 无法满足自动化系统需求 稳定性问题 None 空对象,属性不存在等运行时错误 我们遇到了哪些问题? 1. Go, Python, Rust 性能对比 为什么选择 Rust? > https://github.com/Peefy/StackMachine CPython0 码力 | 25 页 | 3.50 MB | 1 年前3
Rust 语言学习笔记57 5.2.2 依赖的详细配置: ................................................................ 58 5.2.3 自定义编译器配置 ................................................................ 58 5.2.4 feature 段落.......... .. 92 7.1.4 线程与 move闭包 ................................................................ 93 7.2 消息传递 .................................................................................... 93 7.2.1 通道与所有权的转移 96 7.2.4 异步通道与同步通道 ............................................................. 97 7.2.5 可发送的消息类型 ................................................................ 99 7.3 send 与 sync...........0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9. 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 9.1. 用 panic! 处理不可恢复的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 9.2. 用 Result 处理可恢复的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 12.3. 重构以改进模块化与错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 562 页 | 3.23 MB | 29 天前3
Comprehensive Rust(简体中文) 202412. 156 27.2 其他类型的测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 27.3 编译器 Lint 和 Clippy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 27.4 练习:卢恩算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 VIII 第四天:下午 162 28 Welcome Back 163 29 错误处理 164 29.1 Panics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 29.3 尝试转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 29.4 动态错误类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 29.5 thiserror 和 anyhow0 码力 | 359 页 | 1.33 MB | 10 月前3
简谈 Rust 与国密 TLS - 王江桐10118-3:2018 计算密码杂凑 哈希 256 SHA256 是 TLCP、数字签名及验证、消息认 证码生成及验证、随机数生成、 密钥扩充 Sm4 GM/T 0002-2012 ISO/IEC WD1 18033- 3/AMD2 分组加解密 分组加 密 128 AES128,但 是更多次轮询 是 TLCP、消息加解密,用于替代 DES/AES 等国际算法 Sm7 / 分组加解密 分组加 Rust China Conf 2022 – 2023, Shanghai, China • SM1 是分组加密算法,实现对称加密,分组长度和密钥长度都为 128 位,对长消息进行加解密时, 若消息长度过长,需要进行分组,如果消息长度不足,则要进行填充。 • 保证数据机密性。 • 算法安全保密强度及相关软硬件实现性能与 AES 相当,该算法不公开,仅以 IP 核的形式存在于芯片 中,调用该算法时,需要通过加密芯片的接口进行调用。 MD5/SHA-1/SHA-2 等国际 算法,是在 SHA-256 基础上改进实现的一种算法,消息分组长度为 512 位,摘要值长度为 256 位,其中使用了异或、模、模加、移位、与、或、非运算,由填充、迭代过程、消息扩展和压缩 函数所构成。 • 保证信息的完整性。 • 在商用密码体系中,SM3 主要用于数字签名及验证、消息认证码生成及验证、随机数生成、密钥 扩充等。据国家密码管理局表示,其安全性及效率要高于0 码力 | 44 页 | 3.70 MB | 1 年前3
Rust 是否需要另⼀种“⾊彩”的 Future? - 郭⼦兴第三届中国Rust开发者⼤会 Rust 是否需要另⼀种“⾊彩”的 Future? 郭⼦兴,字节跳动服务框架团队研发⼯程师。 作者 Rust 是否需要另⼀种“⾊彩”的 Future? 标题 Rust 编译器将 async 块翻译成由标准库提供的 Future 类型,⽤户可以⽅便地通过⾃定义 Future 以实现⾮阻塞 的 IO 或并发控制语义。异步执⾏器被允许在任意时刻删除⽣成的 Future 实例以取消正在执⾏的异步操作,但取消 ⽀持基于 poll 的 IO,以及基于取消 Future 的流程控制 # 基于 Poll 的 Future io-uring 等异步模型让 Future 的取消不 再⽆副作⽤,这可能导致严重的错误 # 不再是⽆副作⽤的取消 # 最终与折中⽅案 引⼊另⼀种“颜⾊”的 Future 以最终解决 问题,或者基于字节跳动开源的异步驱动 器 monoio 探索的折中⽅案 ⽬录 Rust 中的异步 Err(e) �� Poll��Ready(Err(e)), } } } Future 中的 IO 基于 poll 的 IO 事件被表达为在内核通知消息 准备好时,⼀次性地同步获取。 struct PollOnce{ inner: F, } impl Future for PollOnce where 0 码力 | 19 页 | 7.77 MB | 1 年前3
Rust语言核心竞争力-庄晓立2016-4-23 新人分享新语言 2015年5月Rust语言刚刚发布1.0版本 2013年末我开始关注Rust,但尚未深入实践 在重大场合正式演讲这是人生第一次 2016年春节至今认真准备讲稿近三个月 如有错误或纰漏,敬请谅解! 感谢臧秀涛主编盛情邀请! Rust 安全、高效、并发的系统编程语言 2006年 2009年 2012年 超级计算机 • 科学运算/机器学习 • 图形图像处理 • 虚拟现实 ……都有系统编程的身影 • 操作系统 • 虚拟机/容器 • 数据库 • 3D游戏引擎 • 网络服务器 • 浏览器引擎 • 编译器、解释器 • 三维建模/动画/渲染 数据中心 • CPU/GPU • 内存/硬盘 • 电力 • 网络流量 • 其他设备和人员维护费用 都是白花花的银子,“硬件很便宜”的说法不靠 谱 你能买最新硬件,对手也能,无助于提升竞争力 内存不安全的后果非常严重 • ……“心脏出血”漏洞(Heartbleed)重创全球IT行 业 • ……源于OpenSSL【越界访问内存】 • OS/GLIBC/JAVA/浏览器等频繁爆出重大安全漏洞 • ……多与错误使用内存有关 • 传统C/C++语言放弃解决内存安全问题 • 程序员因疏忽或犯错很容易制造内存安全漏洞 • GC能基本保证内存安全,但牺牲了运行时性能 内存安全? 安全地读写内存 • 在限定时间和空间范围内读写内存0 码力 | 51 页 | 1.09 MB | 1 年前3
Rust 程序设计语言简体中文版........... 180 9. 错误处理 .............................................................................................................................. 185 9.1. 用 panic! 处理不可恢复的错误 ................... ................................................................. 186 9.2. 用 Result 处理可恢复的错误 ........................................................................................ 189 9.3. 要不要 panic ............................................................................... 276 12.3. 重构以改进模块化与错误处理 ................................................................................... 278 12.4. 采用测试驱动开发完善库的功能0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust分布式账务系统 - 胡宇1 2 3 4 ● 1. 接受转账请求,转换成 events ● 2. 将 events 送入 Raft 共识,等待 events 被多数节点保存 ○ 共识:基于 raft-rs 的可靠消息队 列 ○ 存储: Rocksdb with Rust 账户层: Auticuro 分布式账务系统 1 2 3 4 ● 1. 接受转账请求,转换成 events ● 2. 将 events JetBrains + Rust 插件 Gitlab CI/CD 心路历程 真刀实枪 – 文档工具 文档生成 CI/CD git page 作为文档 心路历程 吐槽点 ● Nightly 版本编译器: tikv , raft-rs ● 无官方库,官方库支持不成熟 ○ Kafka (第三方: https://github.com/kafka-rust/kafka-rust) ○ PostgreSQL0 码力 | 27 页 | 12.60 MB | 1 年前3
Hello 算法 1.1.0 Rust版”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo 所示,在触发终止条件前,同时存在 ? 个未返回的递归函数,递归深度为 ? 。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的思0 码力 | 388 页 | 18.50 MB | 1 年前3
共 28 条
- 1
- 2
- 3













