WebAssembly 简介 - 陈思衡因为 Rust 的 async 机制是无栈协程,会将 async 部分在编译时隐式转换成一个 Future。 所以我们可以利用这一点来实现一个 Async 的 Wasm。 Async Wasm 解决方案 Photo / image / chart 利用本身 Async 机制 自行实现 Async Runtime Async 的 Wasm • 在 wasm 中把 future 存入固定内存处。 fiber / ucontext Async Wasm 解决方案 wasmtime-fiber 是一个通过内联汇编,保存当前寄存 器和栈数据来实现有栈协程的 rust 库。 wasmtime-fiber Ucontext 和 fiber 功能相同,但是 linux 的系统库。 ucontext 执行流程 Async Wasm 解决方案 • 与 WASM 的语言无关。 • 可以复用 WASM ucontext 优点 • 实现困难,涉及到汇编。容易出错。 • 需要极其注意内存安全。 缺点 Async Wasm 解决方案 效果示例 Async Wasm 解决方案 基于 Asyncify(Binaryen) Async Wasm 解决方案 Binaryen 是一个编译器基础架构库,提供了一套用于处理 WebAssembly 的工具。 其中一个功能是 asyncify,它允许将同步的0 码力 | 24 页 | 773.46 KB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人企业级数据解决方案专家 为建行、工行、交行、招行、上交所、深交所、中国人寿等 70+ 银行证券保险 企业、公安部、上海市公安局、武汉市公安局等 100+ 公安机构,国家电网、 国信通产业集团等电力能源行业提供数据智能产品解决方案及长期服务。 海致专注为政府、金融、能源等客户提供大数据处理、分析、挖掘服务,在互 联网技术基础上,打造专业、易用的企业级大数据实战应用产品及解决方案。 北京中关村总部 KDnuggets 图技术全景图—— Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source : Graph Aware 图数据库发展趋势0 码力 | 38 页 | 24.68 MB | 1 年前3
Hello 算法 1.1.0 Rust版结构, 拼装积木的步骤则对应算法。 17 第 2 章 复杂度分析 Abstract 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。 Unicode 码点同时出现在一个文本中时,系统如 何解析字符?例如给定一个长度为 2 字节的编码,系统如何确认它是一个 2 字节的字符还是两个 1 字节的字 符? 对于以上问题,一种直接的解决方案是将所有字符存储为等长的编码。如图 3‑7 所示,“Hello”中的每个字 符占用 1 字节,“算法”中的每个字符占用 2 字节。我们可以通过高位填 0 将“Hello 算法”中的所有字符都 编码为 4 章 数组与链表 hello‑algo.com 69 图 4‑3 数组插入元素示例 值得注意的是,由于数组的长度是固定的,因此插入一个元素必定会导致数组尾部元素“丢失”。我们将这个 问题的解决方案留在“列表”章节中讨论。 // === File: array.rs === /* 在数组的索引 index 处插入元素 num */ fn insert(nums: &mut Vec0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版问题就会越深入,问题就能被解决得更优雅。 17 第 2 章 复杂度分析 Abstract 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 www.hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。 Unicode 码点同时出现在一个文本中时,系统如 何解析字符?例如给定一个长度为 2 字节的编码,系统如何确认它是一个 2 字节的字符还是两个 1 字节的字 符? 对于以上问题,一种直接的解决方案是将所有字符存储为等长的编码。如图 3‑7 所示,“Hello”中的每个字 符占用 1 字节,“算法”中的每个字符占用 2 字节。我们可以通过高位填 0 将“Hello 算法”中的所有字符都 编码为 数组与链表 www.hello‑algo.com 69 图 4‑3 数组插入元素示例 值得注意的是,由于数组的长度是固定的,因此插入一个元素必定会导致数组尾部元素“丢失”。我们将这个 问题的解决方案留在“列表”章节中讨论。 // === File: array.rs === /* 在数组的索引 index 处插入元素 num */ fn insert(nums: &mut [i32],0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版方式等代表数据结构, 拼装积木的步骤则对应算法。 17 第 2 章 复杂度分析 � 复杂度分析犹如浩瀚的算法宇宙中的时空向导。 它带领我们在时间与空间这两个维度上深入探索,寻找更优雅的解决方案。 第 2 章 复杂度分析 hello‑algo.com 18 2.1 算法效率评估 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。 Unicode 码点同时出现在一个文本中时,系统如 何解析字符?例如给定一个长度为 2 字节的编码,系统如何确认它是一个 2 字节的字符还是两个 1 字节的字 符? 对于以上问题,一种直接的解决方案是将所有字符存储为等长的编码。如图 3‑7 所示,“Hello”中的每个字 符占用 1 字节,“算法”中的每个字符占用 2 字节。我们可以通过高位填 0 将“Hello 算法”中的所有字符都 编码为 4 章 数组与链表 hello‑algo.com 69 图 4‑3 数组插入元素示例 值得注意的是,由于数组的长度是固定的,因此插入一个元素必定会导致数组尾部元素“丢失”。我们将这个 问题的解决方案留在“列表”章节中讨论。 // === File: array.rs === /* 在数组的索引 index 处插入元素 num */ fn insert(nums: &mut Vec0 码力 | 383 页 | 17.61 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0什么问题,并调用 continue 开始下一次循 环,请求另一个猜测。if 表达式之后,就可以在知道 guess 在 1 到 100 之间的情况下与秘密 数字作比较了。 然而,这并不是一个理想的解决方案:如果让程序仅仅处理 1 到 100 之间的值是一个绝对需 要满足的要求,而且程序中的很多函数都有这样的要求,在每个函数中都有这样的检查将是非 常冗余的(并可能潜在地影响性能)。 相反我们可以在 longest 函数的结尾将离开作用域并被清理,而我们尝试从函数返回 一个 result 的引用。无法指定生命周期参数来改变悬垂引用,而且 Rust 也不允许我们创建一 个悬垂引用。在这种情况,最好的解决方案是返回一个有所有权的数据类型而不是一个引用, 这样函数调用者就需要负责清理这个值了。 综上,生命周期语法是用于将函数的多个参数与其返回值的生命周期进行关联的。一旦它们形 成了某种关联,Rust 之前,思考一下这个引用是否真的在整个程序的生命周期里都有效,以及你是否希望 它存在得这么久。大部分情况中,推荐 'static 生命周期的错误信息都是尝试创建一个悬垂引 用或者可用的生命周期不匹配的结果。在这种情况下的解决方案是修复这些问题而不是指定一 个 'static 的生命周期。 结合泛型类型参数、trait bounds 和生命周期 让我们简要的看一下在同一函数中指定泛型类型参数、trait bounds 和生命周期的语法!0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版题,并调用 continue 开始下一次循 环,请求另一个猜测。if 表达式之后,就可以在知道 guess 在 1 到 100 之间的情况下与秘 密数字作比较了。 然而,这并不是一个理想的解决方案:如果让程序仅仅处理 1 到 100 之间的值是一个绝对需 要满足的要求,而且程序中的很多函数都有这样的要求,在每个函数中都有这样的检查将是非 常冗余的(并可能潜在的影响性能)。 相反我们可以创 longest 函数的结尾将离开作用域并被清理,而我们尝试从函数返 回一个 result 的引用。无法指定生命周期参数来改变悬垂引用,而且 Rust 也不允许我们创 建一个悬垂引用。在这种情况,最好的解决方案是返回一个有所有权的数据类型而不是一个引 用,这样函数调用者就需要负责清理这个值了。 综上,生命周期语法是用于将函数的多个参数与其返回值的生命周期进行关联的。一旦它们形 成了某种关联,Rust 之前,思考一下这个引用是否真的在整个程序的生命周期里都有效,以及你是否希望 它存在得这么久。大部分情况中,推荐 'static 生命周期的错误信息都是尝试创建一个悬垂 引用或者可用的生命周期不匹配的结果。在这种情况下的解决方案是修复这些问题而不是指定 一个 'static 的生命周期。 结合泛型类型参数、trait bounds 和生命周期 让我们简要的看一下在同一函数中指定泛型类型参数、trait bounds 和生命周期的语法!0 码力 | 600 页 | 12.99 MB | 1 年前3
Borsh 安全高效的二进制序列化不同的对象的二进制表示一定不同 • 便于基于二进制表示进行 Hash 字节级别确定性 • 在 Rust 中, borsh 并没有使用 serde • 全部逻辑原生实现 • 序列化、反序列化速度大幅领先其他解决方案 执行速度 执行速度 benchmark 执行速度 benchmark 执行速度 benchmark 执行速度 benchmark • 编译后的体积更小 • borsh 序列化后的二进制更精简0 码力 | 21 页 | 3.35 MB | 1 年前3
硬件创业公司的Rust应用和转型 - 陈昱衡采集+计算+自适应滤波 全自动脑立体定位仪(在研) 电机控制移动 传感器精度增到100nm 远程控制 自动运行 关注逻辑本身不用过分关心内存安全 嵌入式项目评估 Rust物联网不足 解决方案:屏幕上云 冷热板刺激仪 老项目评估 新项目评估 简单工期长,探索型项目优先选择Rust 糖水偏好仪 尾部打标机 已经立项 UI端Rust应用 UI 端 Rust 桌面端0 码力 | 23 页 | 4.95 MB | 1 年前3
Rust在Substrate 开发框架中的使用web 2.0 中心应用的问题: ● 难以保证不作恶 ● 用户隐私问题 ● 代码安全 ● 隐藏成本高 ● 服务不可用 ● …… web 2.0 Vs web 3.0 去中心应用 – 解决方案 ● 分叉、链上治理 ● 用户拥有数据主权 ● 开源可审查 ● 分享权益 ● 永不离线 ● …… 协议: ● IPFS ● Matrix ● BitTorrent 特点: ●0 码力 | 37 页 | 967.22 KB | 1 年前3
共 13 条
- 1
- 2













