Rust HTTP 协议栈在终端通信场景的实践 - 胡凯第三届中国Rust开发者大会 Rust HTTP 协议栈在终端通信场景的实践 胡凯 hukai45@huawei.com 华为 公共开发部 嵌入式软件能力中心 什么是 HTTP 协议? ⚫ HTTP 协议介绍 目录 终端场景下 HTTP 协议的主要使用场景,以及需要思考的问题。 ⚫ 终端 HTTP 通信场景浅析 我们当前结合 Rust 和终端通信场景的实践的简单介绍。 ⚫ Rust Rust 与终端 HTTP 通信场景结合 介绍 Rust 与 HTTP 协议栈结合的业界实现。 ⚫ Rust 与 HTTP 协议 HTTP 协议介绍 Part 01 什么是 HTTP 协议? Rust China Conf 2022 – 2023, Shanghai, China Rust China Conf 2022 – 2023, Shanghai, China HTTP 协议介绍 HTTP Secure,缩写:HTTPS)是一种通过计算 机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。 Rust 与 HTTP 协议 Part 02 介绍 Rust 与 HTTP 协议栈结合的业界实现 Rust China Conf 2022 – 2023, Shanghai, China Rust China Conf 2022 – 2023, Shanghai, China0 码力 | 26 页 | 1.25 MB | 1 年前3
Comprehensive Rust(简体中文) 20241219.1 回顾:程序的内存分配 程序通过以下两种方式分配内存: • 栈:局部变量的连续内存区域。 – 值在编译时具有已知的固定大小。 – 速度极快:只需移动一个栈指针。 – 易于管理:遵循函数调用规则。 – 优秀的内存局部性。 • 堆:函数调用之外的值的存储。 – 值具有动态大小,具体大小需在运行时确定。 – 比栈稍慢:需要向系统申请空间。 – 不保证内存局部性。 示例 Creating trait 的类型可能大小不同。因此,上例中不可能具有像 Vec这样的项。 • 可通过“dyn Pet”这个方法向编译器告知实现“Pet”的动态大小类型。 • 在本例中,pets 在栈上分配内存,矢量数据存储在堆上。这两个矢量元素是 胖指 : – 胖指针属于全角指针。它包含两个部分:指向实际对象的指针,以及指向该特定对象的 Pet 实 现的虚拟方法表 (vtable) 的指针。 {p3:?}"); } • add 函数“借用”两个点并返回一个新点。 • 调用方会保留输入的所有权。 此幻灯片是对第 1 天引用材料的回顾,并稍作了扩展,添加了函数参数和返回值。 探索更多 关于栈返回的说明: 121 • Demonstrate that the return from add is cheap because the compiler can eliminate the copy 0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust语言核心竞争力-庄晓立重点项目&热门领域 • 大数据 • 云计算 • 物联网 • 航空航天 • 超级计算机 • 科学运算/机器学习 • 图形图像处理 • 虚拟现实 ……都有系统编程的身影 • 操作系统 • 虚拟机/容器 • 数据库 • 3D游戏引擎 • 网络服务器 • 浏览器引擎 • 编译器、解释器 • 三维建模/动画/渲染 数据中心 • CPU/GPU • 内存/硬盘 • 电力 • 网络流量 • 其他设备和人员维护费用 Minimal Runtime Overhead 系统编程+零运行时+内存安全 • 极小的运行时开销(与C语言相当) • Zero-cost abstractions • 无垃圾收集器(GC) • 无虚拟机(JVM/.Net) • 无解释器(Python/JS) • 运行效率很高(与C语言相当) • 充分高效利用CPU和内存等系统资源 零运行时 零开销原则/zero-overhead principle cap: usize, len: usize, } Very big data in the heap ... ptr cap len ptr cap len 栈(Stack) 堆(Heap) 浅拷贝(Shallow Copy) 附加Move语义 Drop & RAII 变量(bindings)和资源(resources)的关系 Resources:0 码力 | 51 页 | 1.09 MB | 1 年前3
洛佳 组件化驱动、ROM运行环境与RustSBI共 同 设 计 无 线 连 接 外 设 W i - F i 基 带 、 蓝 牙 、 U W B 等 , 合 理 编 写 频 域 、 功 率 等 软 件 限 制 , 结 合 开 源 协 议 栈 A I 加 速 外 设 包 括 自 研 A I 核 、 核 显 和 向 量 扩 展 等 , 编 写 专 用 驱 动 后 , 对 接 常 用 软 件 框 架 中 断 控 制 器 统 一 器 支 持 , 填 入 常 量 泛 型 , 即 可 用 于 运 行 环 境 ROM运行环境 第 02 部分 裸机和引导程序的ROM阶段 高级语言环境 初始化bss段、data段, 加载栈寄存器,构成高级 语言运行的最小环境 生成镜像结构 外设和时钟 提供具备所有权的外设 列表,提供ROM初始化 完成的时钟配置 编译时生成镜像头,通 常包含处理器配置、时 钟和闪存配置等部分 RustSBI软件架构更新 • RISC-V SBI可运用于机器态和虚拟化 的宿主态,此时RustSBI实现应为虚 拟机提供电源、核管理等功能。 • 嵌套虚拟化存在时,RustSBI实现应 当为内部虚拟机软件模拟H指令集。 在这方面,Dramforever的项目1提 供了很好的例子。 • LARVa2项目是固件充当模拟器的例 子,这里RustSBI被编译到RISC-V之 外的指令集。 • Ydr0 码力 | 21 页 | 3.12 MB | 1 年前3
KCL: Rust 在编译器领域的实践与探索KusionStack 与 KCL KusionStack是什么? KusionStack架构 KCL KusionStack 是什么? KusionStack 是开源的云原生可编程技术栈! 1. 围绕现代应用程序交付以及使用 OCI 镜像对配置和策略进 行编码和统一 2. 组织应用程序资源,并在整个交付过程中通过身份确保安 全 3.为 Kubernetes 和云精简应用交付工作流,并提供开发友 Test LSP KCL 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 Source0 码力 | 25 页 | 3.50 MB | 1 年前3
Hello 算法 1.1.0 Rust版都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 第 5 章 栈与队列 90 5.1 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.2 本书的主要内容如图 0‑1 所示。 ‧ 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度和空间复杂度的推算方法、常见类型、示 例等。 ‧ 数据结构:基本数据类型和数据结构的分类方法。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤 和示例问题等。0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 第 5 章 栈与队列 90 5.1 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.2 本书的主要内容如图 0‑1 所示。 ‧ 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度和空间复杂度的推算方法、常见类型、示 例等。 ‧ 数据结构:基本数据类型和数据结构的分类方法。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤 和示例问题等。0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 第 5 章 栈与队列 90 5.1 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.2 本书的主要内容如图 0‑1 所示。 ‧ 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度和空间复杂度的推算方法、常见类型、示 例等。 ‧ 数据结构:基本数据类型和数据结构的分类方法。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤 和示例问题等。 递归:将问题分解为子问题 ?(?) = ?+?(?−1) ,不断(递归地)分解下去,直至基本情况 ?(1) = 1 时终止。 1. 调用栈 递归函数每次调用自身时,系统都会为新开启的函数分配内存,以存储局部变量、调用地址和其他信息等。 这将导致两方面的结果。 ‧ 函数的上下文数据都存储在称为“栈帧空间”的内存区域中,直至函数返回后才会被释放。因此,递归 通常比迭代更加耗费内存空间。 ‧ 递归调用函数会产生额0 码力 | 383 页 | 17.61 MB | 1 年前3
Rust 在算法交易中的实际应用与积极效应10% 市场商务 上海 徐汇漕河泾 总部 浦东世纪汇 策略中心 北京/成都 分公司 研发中心 自建超算中心 徐州 新加坡/美国 海外 研发中心 Rust 在非凸算法交易服务中的全栈应用实践 内 部 智 能 引 擎 行情服务 总控模块 预测模型 策略模块 数据总线 智 能 特 征 工 程 去量纲:标准化、归一化 缺失值处理:样条插值 降维:PCA A I 信 号 基于共享内存,全用户态,零拷贝(配合 capnproto) 3. 针对 x86_64、AArch64 架构分别优化,CPU Cache 友好 Rust 进程间通信 XSHM Rust 全栈应用实践 - 行情、与API接入 Rust 在非凸算法交易服务中的全栈应用实践 内 部 智 能 引 擎 行情服务 总控模块 预测模型 策略模块 数据总线 智 能 特 征 工 程 去量纲:标准化、归一化 缺失值处理:样条插值 统计信息查询等 数据获取 模型训练 信号预测 交易指令 交易指令 与非 Rust 世界交互的主要边界 Rust FFI 网络协议栈参数优化,多路行情冗余互备 UDP 组播 Rust 全栈应用实践 - 行情、与API接入 Rust 在非凸算法交易服务中的全栈应用实践 内 部 智 能 引 擎 行情服务 总控模块 预测模型 策略模块 数据总线 智 能 特 征 工 程 去量纲:标准化、归一化0 码力 | 18 页 | 3.49 MB | 1 年前3
Rust 语言学习笔记...................................... 71 6.4 堆,栈,BOX............................................................................... 74 6.4.1 堆和栈 .................................................. // 变量 a 和 c 的作用域结束 尽管可以编译通过,但这是一段非常糟糕的代码,变量 a 和 c 都是局部变量, 函数结束后将局部变量 a 的地址返回,但局部变量 a 存在栈中,在离开作用域 后,局部变量所申请的栈上内存都会被系统回收,从而造成了 Dangling Pointer 的问题。这是一个非常典型的内存安全问题。很多编程语言都存在类 似这样的内存安全问题。 再来看变量 c,c x } 3.4 高级所有权 前面三小节未大量涉及到关于所有权中的比较高级用法。 3.4.1.函数传递参数和返回参数类似于 let 语句 在 rust 中,函数是存放在函数栈,为了更为快速的运行。 函数输入参数的传递和返回参数的赋值类似于 let 语句,都看传递的参数和返 回的参数是否实现了 copy trait。 如果实现了 copy trait,那么就不会夺走它的所有权,标识符在函数外部还可0 码力 | 117 页 | 2.24 MB | 1 年前3
共 20 条
- 1
- 2













