共计 22414 个字符,预计需要花费 57 分钟才能阅读完成。
文前
半年前,我写了一篇《三万言|2021 年 Rust 行业调研报告》[1],内容次要围绕 Rust 语言介绍 和 行业畛域开源利用盘点 两大部分内容。时隔半年,我感觉有必要再写一篇年初的 Rust 生态调研报告。因为我想给大家提供一个比拟全面的视角,通过开掘互联网上的各种散落且暗藏的信息,最终绘制出一张 Rust 的“生态地图”,让大家尽量主观公正地去意识 Rust 语言。
在实现本篇报告之后,我得出一个观点:Rust 的呈现并不是要你去用它重写所有,而是心愿你能够用它发明新的将来。当然这只是我个人观点,不代表任何人任何机构和公司。如果您有不同观点,欢送探讨。
本次报告的所有内容都来自于互联网公开信息,如有谬误或不宜在本报告中提及的内容,请及时告知。
纲要
本次报告蕴含以下内容:
- Rust 在各个领域中的利用状态和趋势
- Rust 职业岗位散布
- Rust 语言在高校教育的遍及状态
- Rust Project 本身状态
截止 2021 年底,间隔 Rust 语言 2015 年 5 月 15 日正式公布曾经长达六年半的工夫。在这六年半的工夫内,Rust 每隔三年公布一个大版本,叫做 Edition,中文翻译为版次。
版次这个翻译来自于书籍出版术语。比方《Rust 编程之道》第一版、第二版 等。
版次(Edition)的意义
版次(edition)的引入次要是为了 Rust 能在倒退过程中不便地引入一些不向后兼容的个性,而不会影响之前的代码。比方 Rust 2018 edition 中没有 async / await 关键字,然而在 2021 editon 中引入了 async/await 关键字,这样就防止毁坏旧代码中 let async = 1;
这样的写法。版次和语义化版本是正交的概念。
Rust 公布的每个版次都有其外围主题意义:
- 2015 Edition:主题是「稳定性(Stability)」。2015 edition 代表 Rust 语言 1.0 将趋于稳定。在 1.0 之前 Rust 每天都在变动,而 1.0 之后则意味着团队会致力于向后兼容,这样开发者能力稳固地应用 Rust 构建我的项目。版次的概念其实在 2017 年才引入,所以将 2015 年正式公布之前的语义版本号,即 1.0 之前,都归为 2015 edition。
- 2018 Edition:主题是「生产力(Productivity)」。2018 edition 中引入的内容大部分是向后兼容的,即,在 2015 中能够应用其中一些个性,比方对借用查看的改良 NLL。然而对模块零碎的改良则只能用于 2018 edition 中。2018 eidtion 既然是以生产力为主题,那么个性的优先级都会优先服务于这个主题。
- 2021 Edition:主题是「成熟(Mature)」。2021 edition 并没有引入太多新个性,而是清理了一些技术债权,比方继续对 Rust 编译器进行重构和改良,包含外部应用的新的 trait 零碎 chalk 和 query 零碎(开源版本:https://github.com/nikomatsak…)。另外还解决了一些向后兼容的问题,以及继续投入一些影响将来倒退的要害个性,比方 常量泛型、泛型关联类型等。
Rust Edition 当初曾经确定了,每三年公布一个版次。这就意味着 Rust 每三年都会围绕一个引领 Rust 倒退的主题。
2024 Edition 瞻望
2024 Edition:主题兴许是「广泛应用」。
2021 年 2 月 9 号,Rust 基金会发表成立。华为、AWS、Google、微软、Mozilla、Facebook 等科技行业领军巨头退出 Rust 基金会,成为白金成员,以致力于在寰球范畴内推广和倒退 Rust 语言。
随后,ARM、AUTOMATA、1PASSword、丰田汽车、动视、Knoldus [2]、Tangram [3] 等各个领域中对将来充斥野心的公司都退出了基金会,为推动 Rust 做奉献。
最近 Rust 基金会又推选 在非营利组织有十五年教训的 Rebecca 称为了基金会的执行董事(ED)和 CEO。置信在 Rust 基金会的领导下,Rust 会有宽泛的利用前景。
Rust Project 时机与挑战
Rust 语言是齐全开源的,它也是世界上最大的开源社区组织。由不同职责的团队和工作组独特合作。具体能够在 Rust 官网 [4]看到相干信息。目前领有 3539 个贡献者。
截止目前,crates.io [5]下面 crates 的下载总量达到 11,012,362,794 次,即 110 亿次。
咱们能够通过这些指标来评判一下 Rust 的成熟度。
- 用户数:Rust 间断六年是用户最受欢迎的语言,但理论用户数,能够从 TIOBE 编程语言排行榜中看进去,截止 2021 年 11 月,Rust 排名 29,风行度是 0.54%。任何没有进入 TIOBE 榜单前 20 的语言,其实都还须要进行营销和宣传,这意味着 Rust 仍旧属于小众语言。
- 贡献者数量。Rust 贡献者数量截止目前为 3539 个。咱们比照一下 Github 开源的其余语言:风行的 Go 语言目前贡献者是 1758 个;Kotlin 目前的贡献者是 516 个。看一下风行的框架 Rails 的贡献者是 4379 个。相对而言,Rust 语言贡献者是相当多的。
- 谬误修复 / 补丁频率。依据 Github issues 相干数据,Rust 目前肉眼可见每小时均匀修复一个 issue 问题。从 2010 年 6 月 17 号 Rust 创始人 Graydon 的第一个提交开始,一共修复了 33942 个 issues 和 49011 个 PR,十年间按 3832 天计算,均匀一天修复 8 个 issue,13 个 PR。
- 未解决问题数。目前有 7515 个 凋谢的问题,如果按下面的均匀问题修复频率来计算,预计 3 年左右能够修复结束。3 年当前,又是新的 Edition 公布:2024 Edtion。
- 存储库统计:目前 star 数有 60500 个,watch 数有 15000 个。
- StackOverflow 问题数量:Rust 相干问题一共有 24924 个,均匀每周 150 个问题左右,每天 20 个问题左右。相比其余语言,javascript 问题 2299100 个,Java 问题 1811376 个,Go 问题 57536 个,C 问题 368957 个,Cpp 问题 745313 个。相比于 Go,Rust 的问题数简直是它的一半。
- 新个性公布频率:Rust 稳定版 每六周发一个新版。
- 是否稳固:Rust 早已稳固。
- API 更改频率:稳定版 API 根本不会更改。
- 是否存在“外围”开发人员:Rust 外围开发人员十分多,按工作小组来组织调配,参考 Rust 团队治理[6]
- 文档数量和品质:API 文档、书籍、教程和博客。Rust API 文档相当成熟和先进,目前国内外 Rust 书籍也越来越丰盛,Rust Weekly 每周都会公布社区很多 Rust 相干博客、视频等文章。
- 社区响应频率:有教训的用户如何帮忙新用户。Rust 社区国内外都有,通过 群组织、论坛、线下流动等帮忙社区成员进行交换。
- 商业反对度:Rust 基金会曾经成立:Google、华为、微软、亚马逊、Facebook、Mozilla、丰田、动视等公司都是其董事成员。
- 出名我的项目和产品利用的数量:开源 CNCF 的一些出名我的项目:数据库(TiKV)、云原生(Linkerd,Krustlet)、事件流零碎(Tremor),还有 Google Andriod、亚马逊、微软等都反对 Rust 开发,区块链(Near、Solana、Parity 等)。国内应用 Rust 的公司:蚂蚁金服、PingCAP、字节跳动、秘猿、溪塔、海致星图、非凸科技等。还有很多优良的我的项目或产品这里没有列出来。
- “恐怖事变”的数量,如果没有这一项,则证实它并未在理论具备挑战性的生产环境中应用。Rust 有专门的 信息安全工作组,并且有专门的网站记录 Rust 生态中相干“恐怖事变”: https://rustsec.org/[7]。
- 工具链反对:新的链接器反对(mold[8])/ 新的 trace 工具(tracy[9])/ profiler 商业产品也反对 Rust 了(superluminal[10])等等。
如果拿动物的成长阶段(「收获 - 发芽 – 开花 – 后果」)来类比的话,Rust 的成熟度应该属于「开花」阶段。
Rust 语言作为一门新生语言,尽管目前倍受欢迎,然而面临的挑战还很多。
挑战次要来自两个方面:
- 畛域的抉择。一门语言唱的再好,如果不被利用,也是没有什么用途。Rust 语言以后面临的挑战就是在畛域中的利用。而目前最受关注的是,Rust 进入 Linux 内核开发,如果胜利,其意义是划时代的。
- 语言本身个性的进化。Rust 语言还有很多个性须要反对和进化,这里列举了一些待欠缺的相干个性。
对于畛域的抉择,咱们在下一节「Rust 在各个领域中的利用状态和趋势」中探讨。先来看看 Rust 语言本身还有哪些个性须要进化能力顺利完成 2024 Edition 的阶段指标。
Rust 语言内存平安初步成绩浮现
据 2021 年 12 月 31 日公布于 arXiv 的论文《SOK: On the Analysis of Web Browser Security》[11] 中所言:
比拟了四种浏览器架构,以及近十年来浏览器中内存平安问题仍然是支流。然而察看 Firefox 通过 Oxidation 我的项目(Rust)替换了 12% 的组件。自 2015 年以来,Firefox 的内存安全漏洞数量呈现了小幅但稳固的降落,其中,渲染器的内存安全漏洞显著降落。
“Oxidation[12] 是专门用于将 Rust 代码集成到 Firefox 中的一个我的项目。Firefox 54 以来,所有平台都须要 Rust 反对,并且第一个次要的 Rust 组件是在 Firefox 56 (encoding_rs) 和 57 (Stylo) 中公布的。展望未来,Oxidation 的指标是让在 Firefox 中应用 Rust 变得更容易和更高效,并相应地减少 Firefox 中的 Rust 代码量。
能够说通过六年的利用,Rust 语言的内存平安保障终于看到了初步的成果。该论文倡议浏览器供应商遵循这一最佳实际,并逐渐将他们的浏览器转向内存平安的语言。
待欠缺的 Rust 语言个性
Rust 语言必须解决以下问题能力顺利往前倒退:
- 错误处理改良。在 RFC 3058[13] 中形容了 Try trait 的改良,为了达成错误处理大一统。
- 平安 I/O。最近 Rust 官网合并了一个 RFC 3128[14],通过引入 I / O 平安的概念和一套新的类型和特质,为 AsRawFd 和相干特质的用户提供对于其原始资源句柄的保障,从而补救 Rust 中封装边界的破绽。
- 泛型关联类型 GAT。泛型关联类型在 RFC 1598 [15] 中被定义。该性能个性常常被比照于 Haskell 中的 HKT(Higher Kinded Type),即 高阶类型。尽管相似,然而 Rust 并没有把 Haskell 的 HKT 原样照搬,而是针对 Rust 本身个性给出 GAT(Generic associated type) 的概念。
- 泛型特化(Specialization)。泛型特化这个概念,对应 Cpp 的模版特化。然而 Cpp 对特化的反对是相当欠缺,而 Rust 中特化还未稳固。在 RFC #1210[16] 中定义了 Rust 的泛型特化的实现规范,在 issue #31844[17] 对其实现状态进行了跟踪。目前还有很多未解决的问题。
- 异步:async trait && async drop。Rust 目前异步尽管早已稳固,但还有很多须要欠缺的中央。为此,官网创立了异步工作组,并且创立了 异步根底打算[18] 来推动这一过程。另外,官网也开启了异步运行时标准化的探讨,为了达成可移植性和可互操性的异步运行时在致力中。
- 协程的稳定化。目前 Rust 的异步是基于一种半协程机制 生成器(Generator)来实现的,但生成器个性 并未稳固。围绕 生成器个性 稳固的话题在 Rust 论坛不定期会提出,因为 生成器个性 在其余语言中也是比拟常见且有用的个性。
- 可移植的 SIMD。Rust 官网团队公布了
portable-simd
[19],你能够在 Nightly 下应用这个库来代替 packed_simd[20] 了。这个库使得用 Rust 开发跨平台 SIMD 更加容易和平安。在不久的未来,也会引入到规范库中稳定下来。 - 新的 asm! 反对。asm! 宏容许在 Rust 中内联汇编。在 RFC #2873[21] 中规定了新的 asm! 宏语法,将用于兼容 ARM、x86 和 RISC-V 架构 等,不便在将来增加更多架构反对。之前的 asm! 宏被重命名为 llvm_asm!。目前新的 asm! 曾经靠近稳固状态,可在 issue #72016[22] 中跟踪。总的来说,就是让 asm! 宏更加通用,相比于 llvm_asm!,它有更好的语法。
- Rustdoc 晋升。Rust 是一门优雅的语言。并且这份优雅是十分残缺的。除了语言的诸多个性设计优雅之外,还有一个亮点就是 Rustdoc。Rust 官网 doc 工作组励志让 Rustdoc 成为一个平凡的工具。Rustdoc 应用简略,能够创立十分丑陋的页面,并使 编写文档成为一种乐趣。对于 Rustdoc 具体介绍你能够去看 Rustdoc book[23]。
- 继续稳固 Rust for Linux 未稳固个性宿愿单[24] 中所列清单。这个是和 Rust for Linux 团队一起实现的。
- 新的 GCC 后端。为了推动 Rust for Linux,Rust 反对新的 GCC 后端也是早已提上日程的事了。其中 rustc_codegen_gcc 停顿最快,目前已通过了局部的 rustc 测试,rustc_codegen_llvm 是目前的次要开发我的项目,Rust GCC 预计在 1~2 年内实现。
- 稳固 分配器 API。增加规范分配器接口并反对用户定义的分配器,容许不同的汇合反对不同的分配器,等等。具体在 RFC 1398[25] 中有残缺形容。目前状态是为 Vec<T> 减少了一个分配器泛型参数。
下面列举的只是 Rust 待欠缺问题的一部分工作而已,还有很多内容没有列出来。Rust 语言还在一直进化中。
Rust 开源治理中凸显的问题
往年 Rust 开源组织产生了 Rust 语言审核团队(mod team)个体到职的事件,引起国内外技术社区宽泛探讨。
据官网形容 [26] 矛盾产生于审核团队和外围团队成员之间对于如何解决审核问题时造成的一致。因为这些矛盾波及了很多相干人员很多个人隐私,所以官网也不能走漏更多底细信息,这就导致外界对这件事有很多猜想和夸张影响。这件事原本也就是 Rust 官网团队外部事件,其实基本没有必要让外界晓得。
要治理一个规模超过大多数公司,却由志愿者组成的开源我的项目是很艰难的。他们有很多工作要做,但他们置信 Rust Project 会因而变得更加弱小。尽管这些问题很重大,须要审慎地得出踊跃的论断,但他们置信这不会对 Rust 语言及其外围工具、文档和反对进行改良的能力产生负面影响。
对于关怀 Rust 的 中文社区的敌人和技术媒体而言,我感觉没必要适度解读。因为咱们不理解美国社会以及处于该社会下人们所关怀和敏感的问题是什么,真正想去了解也是比拟艰难的,因为有文化差异。咱们只晓得,这是一个超过大多数公司人员规模且都是志愿者组成的开源组织所要面临和解决的问题,问题一旦通过解决,那么这个社区将失去进化,会更加弱小。所以没必要放心什么 Rust 会被负面影响。
但此时,我又想起 2020 年 Rust 1.44 版本公布时,官网博客说过这么一句话:「tech is and always will be political」。
过后,正好赶上了明洲白人警察跪杀黑人事件,美国的所有企业当初都在站队。所以,Rust 官网也必须得表个态:坚定拥护美国警察的暴行。过后看上去如同很失常,但我没有留神到在官网内网上对此曾经有了 很多探讨[27],当初回头再看这件事,感觉审核团队到职事件并非偶尔。
对于美国文化不太理解的我,之前还对审核团队存在的重要性不屑一顾,当初感觉审核团队的存在对于 Rust 这样深处文化政治简单的美国是如许重要。我终于了解 Rust 官网团队所说这件事的背景相当简单的起因了。
真心心愿 Rust 社区少一些政治、种族等非技术舆论和矛盾。Rust 语言是寰球的,不是某个国家的。真心心愿 Rust 团队能解决好这件事。对此,咱们能做些什么呢?兴许只能祷告世界战争。
Rust 在各个领域中的利用状态和趋势
接下来,咱们来盘点一下 2021 年 Rust 在各个领域中利用的状态和可能的趋势是什么。
操作系统
先从操作系统来看起。
Rust for Linux
从 2020 年 6 月,Rust 进入 Linux 就开始成为一个话题。Linux 创建者 Linus 在过后的开源峰会和 嵌入式 Linux 会议上谈到了为开源内核寻找将来维护者的问题。
Linus 提到:“内核很无聊,至多大多数人认为它很无聊。许多新技术对很多人来说应该更加乏味。事实证明,很难找到维护者。尽管有很多人编写代码,然而很难找到站在上游对他人代码进行 Review 的人选。这不仅仅是来自其余维护者的信赖,也来自所有编写代码的人的信赖……这只是须要工夫的”。
Rust 作为一门天生平安的语言,作为 C 的备选语言,在帮忙内核开发者之间建设彼此的信赖,是十分有帮忙的。三分之二的 Linux 内核安全漏洞 (PDF[28] ) 来自内存平安问题,在 Linux 中引入 Rust 会让其更加平安,这目前根本曾经达成一种共识。
在往年(2021)的 开源峰会上,Linus 说道:“我认为 C 语言是一种平凡的语言,对我来说,C 语言的确是一种在相当低的程度上管制硬件的办法。因而,当我看到 C 语言代码时,我能够十分靠近地猜想编译器的工作。它是如此靠近硬件,以至于你能够用它来做任何事件。然而,C 语言奥妙的类型交互并不总是合乎逻辑的,对简直所有人来说都是陷阱。它们很容易被忽视,而在内核中,这并不总是一件坏事。Rust 语言是我看到的第一种看起来像是真的能够解决问题的语言。人们当初曾经议论 Rust 在内核中的利用很久了,但它还没有实现,可能在明年,咱们会开始看到一些首次用 Rust 编写的无畏的模块,兴许会被整合到主线内核中。”
Linus 认为 Linux 之所以如此长青,其中一个重要的基石就是 乐趣(Fun),并且 乐趣也是他始终谋求的货色。当人们探讨 应用 Rust 编写一些 Linux 内核模块的可能性时,乐趣就呈现了。
在刚过去的 2021 年 9 月 的 Linux Plumbers 大会上,再一次探讨了 Rust 进入 Linux 内核的停顿。
- Rust for Linux 的主力开发者 Miguel Ojedal 说,Rust 如果进入内核,就应该是一等公民的角色。Linus 则答复,内核社区简直必定会用该语言进行试验。
- Rust 进入内核必定会有一些维护者须要学习该语言,用来 review Rust 代码。Linus 说,Rust 并不难懂,内核社区任何有能力 review patch 的人都应该把握 Rust 语言到足以 Review 该语言代码的水平。
- Ojedal 说,目前内核工作还再应用一些 Unstable 的 Rust 个性,导致兼容性不够好,不能确保当前更新的 Rust 编译器能失常编译相干代码。然而 如果 Rust 进入 Linux 内核,就会扭转这种状况,对于 一些 Unstable Rust 个性,Rust 官网团队也会思考让其稳固。这是一种推动力,迟早会建设一个只应用 Rust 稳定版的 内核,到时候兼容问题就会隐没。
- 另一位内核开发者 Thomas Gleixner 放心 Rust 中并没有正式反对内存程序,这可能会有问题。然而另一位从事三十年 cpp 并发编程的 Linux 内核维护者 Paul McKenney 则写了一系列文章 [29] 来探讨 Rust 社区该如何就 Rust 进入 Linux 内核这件事正确处理 内存程序模型。对此我也写了另一篇文章【我读】Rust 语言应该应用什么内存模型?。
- 对于 Rust 对 GCC 的反对,其中 rustc_codegen_gcc 停顿最快,目前已通过了局部的 rustc 测试,rustc_codegen_llvm 是目前的次要开发我的项目,Rust GCC 预计在 1~2 年内实现。
这次大会的论断是:
- Rust 必定会在 Linux 内核中进行一次具备时代意义的试验。
- Rust 进入 Linux 内核,对于 推动 Rust 进化具备很重要的战略意义。
2021 年 11 月 11 日,在 Linux 基金会网站上,又放出另一场录制的网络会议:Rust for Linux:编写平安形象和驱动程序[30],该视频中 Miguel Ojeda 介绍了 Rust 如何在内核中工作,包含整体基础设施、编译模型、文档、测试和编码指南等。
我对这部分视频内容做了一个简要总结:
- 介绍 Unsafe Rust 和 Safe Rust。
- 在 Linux 内核中应用 Rust,采纳一个理念:封装 Unsafe 操作,提供一个 平安形象给 内核开发者应用。这个平安形象位于 https://github.com/Rust-for-L…[31] 的 kernel 模块中。
- 给出一个简略的示例来阐明如何编写 内核驱动
- 比照 C 语言示例,给出 Rust 中什么是 Safety 的行为。
- 介绍了文档、测试和遵循的编码准则。
2021.12.6 早上收回了更新的补丁,介绍了在内核中解决 Rust 的初始反对和基础设施。
这次更新的内容包含:
- 降级到了最新 Stable 编译器和 Rust 2021 edition。因而能够解脱了 const_fn_transmute,const_panic、const_unreachable_unchecked、core_panic 和 try_reserve 这几个之前未稳固的个性。未稳固个性宿愿单[32]。
- 自定义 core 和 alloc。为 alloc 增加了更加模块化的选项,以便禁用一些他们不须要的性能:no_rc 和 no_sync,次要是为上游 Rust 我的项目增加。
- 更严格的代码、文档和新的 lint。
- 形象和驱动程序更新。增加了序列锁、电源治理回调的形象,io 内存(readX/writeX)、irq 芯片和高级流处理程序,gpio 芯片(包含 irq 芯片)、设施、amba 设施和驱动程序以及证书。此外,也改良并简化了 Ref(refcount_t 反对)对象并用它替换了 Rust 的 Arc 的所有实例。齐全地从 alloc crate 中删除了 Arc 和 Rc。
从当初开始,Rust for linux 团队将开始定期提交补丁,每两周左右。
除了来自 Arm、Google 和 Microsoft 的反对外,这次该团队又收到一封来自红帽的信:红帽对 Rust 用于内核的工作也十分感兴趣(There is interest in using Rust for kernel work that Red Hat is considering)。
- v2 补丁:https://lore.kernel.org/lkml/…[33]
- https://www.phoronix.com/scan…[34]
- kernel crate 文档[35]
综合下面咱们理解到的这些信息,2022 年,咱们很可能会看到 Linux 内核中的实验性 Rust 编程语言反对成为支流。如果这次试验胜利,那么就意味着 Rust 正式从 C 语言手里拿到了时代的交接棒。
Redox + Theseus
Redox 是 纯 Rust 实现的相似于 MINIX[36] 的微内核设计,它提供了内存分配器、文件系统、显示管理器、外围实用程序等等,它们独特形成了一个功能性操作系统。
Redox 的发起者尽管在 System76 工作,但实际上 Redox 这个我的项目并未失去 System76 的资助。我已经认为 Redox 属于 System76 的商业开源我的项目,但最近才发现,Redox 的破费都是来自于社区资助。Redox 的次要开销根本都是用于 Redox OS Summer of Code,招募一些学生,为其欠缺性能。
Redox 在 2021 年比拟重要的一个动静是,另一个 Rust 实现的操作系统 Theseus[37] 发表退出 Redox。
古代 OS 中不同过程会共享很多状态,这会导致 state spill 的问题,比方,如果 Android 零碎服务失败,“整个用户空间框架”就会解体,影响所有应用程序,甚至影响那些不应用失败服务的应用程序。
Theseus OS 有许多渺小的组件,称为单元,每个都有明确的界线。每个单元都是一个 Rust crate。然而,更大的翻新是他们所谓的“语内(Intralingual)操作系统设计”,他们的意思是应用编程语言机制来实现操作系统,即,“将语义谬误从运行时谬误转变为编译时谬误”。这意味着,Theseus 相比于其余 OS 与 Rust 的关系更加严密。
Theseus OS 故障复原波及用新的单元替换损坏的单元。钻研人员宣称,这“容许 Theseus 在面对多个故障子系统时容忍最低零碎层中的故障。”这是一种单元替换技术,兴许这就是 Theseus 这个名字的由来,忒修斯之船的故事应该都听过吧?
嵌入式 OS
Tock OS 2.0
Tock[38] 是一个嵌入式操作系统,设计用于在基于 Cortex- M 和 RISC- V 的嵌入式平台上运行多个并发的、互不信赖的应用程序。Tock 的设计以爱护为核心,既能够避免潜在的歹意应用程序,也能够避免设施驱动程序。Tock 应用两种机制来爱护操作系统的不同组件。首先,内核和设施驱动程序是用 Rust 编写的,Rust 是一种提供 compile-time 内存平安、类型平安和严格别名的零碎编程语言。Tock 应用 Rust 来爱护内核(例如调度程序和硬件形象层)不受特定于平台的设施驱动程序的影响,并将设施驱动程序彼此隔离。其次,Tock 应用内存保护单元将应用程序彼此和内核隔离开来。
“Google 公布的这个 OpenSK 是跑在 Tock 下面的!OpenSK [39]是用 Rust 编写的平安密钥的开源实现,该密钥同时反对 FIDO U2F 和 FIDO2 规范。
往年 Tock OS 的一个动作是,它降级到了 2.0 版本,并且这次降级是一次重大更新,齐全是新内核,外围内核 API 被从新设计。
并且对芯片和开发板的反对根本笼罩的十分全面:RISC-V / ARM CortexM0+ / ARM CortexM7 / Nano RP2040 / Rapsberry Pi Pico/ ESP32-C3-DevKitM-1 等等。
Hubris
Hubris[40] 没有运行时创立或销毁工作的操作,没有动静资源分配,没有以特权模式运行的驱动程序代码,零碎中也没有 C 代码。通过这种结构,打消了许多通常存在于相似零碎中的攻击面。
OXide 公司在往年 OSFF Mini Summit 2021 会议上分享了 行将到来的固件反动[41] 中提到,Rust 将会是行将到来的固件反动的一部分。所以,他们从新扫视嵌入式操作系统并用 Rust 开发了 Hubris。Hubris 目前只反对 Arm Cortex M 平台。
Hubris vs TockOS:
- Tock 应用动静加载,Hubris 是动态的
- Tock 是十分异步的,Hubris 是严格同步的
- Tock 的驱动程序与内核在同一保护区,Hubris 的驱动程序位于不同的投影域中
其余
新版 VxWorks
风河 VxWorks[42] 是一款确定性、基于优先级的抢占式实时操作系统,具备超低提早和最小抖动。其官网在最新版发表 惟一反对 C ++ 17、Boost、Rust、Python、pandas 等开发语言的实时操作系统。
云原生
Linkerd2
2021 年对于 Linkerd 来说是标志性的一年。该我的项目在 Cloud Native Computing Foundation 中毕业了[43],它代表我的项目成熟度的最高级别。Linkerd 的采用率在往年飙升,组织范畴宽泛,如 Microsoft[44]、S&P Global[45],以及挪威劳工和福利管理局[46],以及许多其余机构,都公开采纳了 Linkerd。
Linkerd 2.11 在 2021 年 9 月公布[47],更多组件向 Rust 迁徙。Linkerd 之前只有 proxy 局部是 Rust 实现,公布的 2.11.0 版本中,Linkerd 采纳了一个用 Rust 编写的新策略控制器组件!它应用 kube-rs 与 Kubernetes API 进行通信,并裸露了一个用 Tonic 实现的 gRPC API。
尽管 Linkerd 在数据面有丰盛的 Rust 教训,但他们抉择 Go 作为管制面组件,因为 Kubernetes 生态系统(以及它的 API 客户端等)是如此重大地偏向于 Go。然而,因为 u /clux 在 kube-rs 上的杰出工作,当初用 Rust 实现控制器曾经变得可行。这对 Linkerd 我的项目来说是一大提高,他们打算在整个我的项目中更多地应用 Rust。它公布了多个基准测试,显示性能和资源应用当先于 Istio 一个数量级 [48];它持续引领着将 Rust 带入[49] 云原生畛域。他们心愿 Linkerd 的这个新方向将有助于欢送更多心愿增长 Rust 实践经验的贡献者。
如果对 Linkerd2 的 2022 年路线图感兴趣能够点击这里[50]。
Deislabs[51] 的我的项目
Akri
Akri [52] 是 云原生计算基金会 (CNCF)的一个沙盒我的项目,用于为 Kubernetes 提供边缘计算解决方案。Akri 旨在成为在边缘的 Kubernetes 集群上应用物联网设施的规范形式,这就是为什么 Akri 在希腊语中不仅意味着“边缘”,而且还代表 Kubernetes 资源接口。
Krustlet
Krustlet[53] 是一种 kubelet[54] 实现,使用户可能在同一个 Kubernetes 集群中运行 WebAssembly 和传统容器工作负载。
在 2021 年,Krustlet 和 krator[55] 我的项目(Kubernetes Rust 状态机操作框架)一起成为了 CNCF 的沙盒我的项目,到目前为止,曾经公布了 1.0-alpha.1 版本,1.0 正式版本行将公布。
那么,这个 1.0 到底意味着什么?它意味着稳定性和向后兼容性保障。人们就能够开始用它构建一些真正的产品了。随着 WebAssembly 和 WASI 的成熟,前面还会增加更多功能。
WebAssembly ServerSide 与 边缘计算
Lucet
在 Fastly 2021 回顾[56] 文章中提到:
“Daily request traffic for Compute@Edge experienced explosive growth in 2021, skyrocketing over 31,000% from January’s daily traffic. Customer usage is on pace to reach 2 trillion total requests across 2021, with a target to reach 50 trillion requests[57] by the end of 2022.2021 年,Compute@Edge 的每日申请流量经验了爆炸性的增长,比 1 月份的每日流量暴涨了 31,000% 以上。客户使用量无望在 2021 年达到 2 万亿次总申请,指标是在 2022 年底达到 50 万亿次。
而这个 Compute@朝夕相处 58 是 Fastly 的边缘计算平台,它可能运行你在本人的零碎上编译并上传到 Fastly 的自定义二进制文件。通过将代码编译到 WebAssembly[59]来提供安全性和可移植性,他们应用 Lucet[60] 在边缘运行它,Lucet 是由 Fastly 创立的开源 WebAssembly 运行时。而 Lucet 是基于字节码联盟的 wasmtime[61] WebAssembly 运行时来实现的。
其余
在 WebAssembly Serverside 畛域,还有很多极具翻新的产品:
- WasmEdge,是用于边缘计算和软件定义车辆的轻量级、疾速和工作要害型代码 runtime。指标是大幅升高复杂性并进步开发速度。它是目前市场上最快的 Wasm 虚拟机,由 Cpp 开发,然而当初正在开发 Rust SDK,会全面拥抱 Rust。
- WasmCloud[62],是一个基于 WebAssembly 的分布式计算平台,目前也是 CNCF 沙盒我的项目。比拟有翻新的中央在于,它制订了一个 waPC 规范,用于 Guest 和 Host 的平安过程调用,来解决以后 WASI 等个性不欠缺的问题。
字节跳动的飞书、安全部门、基础设施部门都曾经用上了 Rust,并且还开源了一些根底库[63]。
其中比拟杰出的可用于云原生我的项目的有:
- monoio[64],是一个基于 io-uring 的 Thread-per-core 模型的异步 Runtime,具体介绍参见:《Rust 异步运行时的设计与实现》[65]
- keyhouse[66],字节外部应用的密钥管理系统曾经在 github 上开源了,反对加解密和敏感配置管理。目前字节外部很多业务都基于该零碎进行开发。
物联网(IoT)
Rust 嵌入式工作组停顿*
- 树莓派 2021 公布首款 RP2040 微控制器中有两个 Cortex M0 内核。这让工作组的成员开始思考,在多核微控制器下该如何提供安全性,由此有了 rp-rs 组织。
- Espressif(乐鑫)正式雇佣 mabez 针对 eso 芯片开发 Rust 反对:esp-rs
- 其余平台也逐步开始反对 Rust,包含:Atmel ARM SAM- D 和 SAM-E、Atmel AVR、NXP ARM iMX. RT 微控制器、ARM nRF51、52 和 9160 蓝牙 /LTE 设施、RISC-V、树莓派、STM32 等。
- 嵌入式 Rust 生态失去长足发展:
嵌入式并发框架 RTIC[67]曾经 1.0
嵌入式异步框架 Embassy[68]正在鼎力开发且反对 STM32,nRF 和 RP2040 平台,并且还深深影响着 Rust 异步的改良
嵌入式开发和调试工具 Knurling[69]又公布了新的探针工具
嵌入式 TCP/IP 栈 smoltcp[70] 公布了新版本
嵌入式图形库 embedded-graphics[71] 公布了新版本
新的嵌入式实时 OS Hubirs 开源。 - 嵌入式工作组本身保护的我的项目在这一年也是鼎力开发和保护中。
更多参见: https://blog.rust-embedded.or…[72]。
总的来说,Rust 在嵌入式畛域越来越成熟了。
乐鑫芯片(Espressif) esp-rs 停顿
2021 年,乐鑫公司发表雇佣 mabez 来全职从事 Rust 对 ESP32 的反对,对应 GitHub 开源组织是 esp-rs[73]。这意味着,Rust 将全面进入 esp32 畛域。
截止年底,mabez 实现的工作能够在其博客看到,总的来说目前进度为:
- esp-rs book[74]
- probe-rs 对 esp32c3 的反对当初比较完善了
- espflash 达到了 1.0
- 引入 esp32-hal[75]
- 其余,还有很多
更多更新能够参见 Rust on Espressif chips – 10-01-2022[76]。不得不说,乐鑫是一家很有远见的公司。
趋势
ARM 是迄今为止在物联网边缘应用的芯片组和传感器等嵌入式设施的当先制造商,往年曾经退出了 Rust 基金会。
Rust 齐全有能力在嵌入式计算等更高级别的物联网畛域实现特定工作,例如边缘轻量级计算和后端服务的实现,并同时能够在肯定水平上满足这类物联网基础设施的性能平安需要。
因为其生态系统与物联网相干的局部,仍在一直倒退,甚至不足一些重要的根底,而且远非稳固。但从好的方面来说,咱们看到像 Drogue、Ferrous Systems 和其余独立的几家公司正在致力推动 Rust 进入物联网畛域而对至关重要的根底正在进行踊跃的开发,并为 Rust 带来更光明的将来。
游戏
GPU 图形渲染值得关注的我的项目
rust-gpu
rust-gpu[77] 是 embark studios 开源的一个我的项目,致力于让 Rust 成为图形渲染畛域的第一类语言。目前正联结 Traverse research 公司一起构建 rust-gpu。
“Embark 是和韩国游戏公司 Nexon(《冒险岛》《跑跑卡丁车》)合开的。Embark CEO 是前 EA 首席设计官 Patrick,曾是《战地》系列开发商 DICE 的 CEO。Embark 也是 Rust 游戏工作组的成员之一,该公司也资助了很多 Rust 生态开源我的项目的作者。Traverse research 公司位于荷兰 Breda 中心区,愿景是让 Breda 成为游戏开发强镇。该团队的核心成员在图形学畛域造诣很强。
rust-gpu 次要是针对图形渲染引擎,心愿能够把 Rust 引入为一种着色语言。通过 rustc 后端 编译到 spir-v(着色器的二进制两头语言)来达成这个指标。目前该畛域罕用的是 GLSL/HLASL,但它们并未随着游戏行业倒退提供解决大型代码库的机制,所以在这个畛域急需一门优良的着色语言,而 embark 的人们认为 Rust 就是最佳抉择,所以他们做了这项工作。
embark 还基于 rust-gpu 开源了一个实验性的全局光照渲染引擎 kajiya[78]。
Rust-CUDA
Rust-CUDA[79] 则是一个旨在使 Rust 成为应用 CUDA 工具包进行极快 GPU 计算的 1 级(tier-1)语言的我的项目。该团队心愿通过这个我的项目,能够推动 Rust GPU 计算行业向前倒退,并使 Rust 成为此类工作的优良语言。Rust 提供了很多益处,例如高效利用每个内核的性能劣势、杰出的模块 /crate 零碎、用 unsafe 分隔 CPU/GPU 代码的不平安区域、为底层 CUDA 库构建高级包装器等。
游戏引擎中的佼佼者
Bevy
Bevy[80] 是一个基于 Rust 实现的 数据驱动游戏引擎。相比于 Rust 实现的其余游戏引擎,比方 Amethyst,Bevy 属于起初着居上。Bevy 在 API 设计方面步人后尘,充分利用 Rust 语言特点,让开发者上手非常简单不便。得力于其 Plugin 机制,目前 Bevy 曾经逐步造成本人的生态,逐渐涌现出很多基于 Bevy 的 Plugin。
Bevy 作为开源我的项目,在 GitHub 上承受的资助当初根本曾经达成了每月 6000 美刀的指标。尽管目前 Bevy 只公布了 0.6 版本,然而其生态在逐渐建设,并且受到很多人的欢送和期许。
Bevy 0.6 版本中有大量改良、谬误修复和品质晋升,这里列举一部分:
- 一个全新的古代渲染器,更丑陋、更快、更易于扩大
- 原生 WebGL2 反对。您能够通过在浏览器中运行 Bevy 示例 [81] 来测试它![82]
- 更弱小的着色器:预处理器、导入、WGSL 反对
- Bevy ECS 人体工程学和性能改良。没有了.system()!
更多参见 Bevy 0.6 介绍[83]。
Fyrox(Rg3d)
Fyrox(rg3d)[84] 是另一款 Rust 实现的游戏引擎,反对 3D 和 2D,之前我的项目名为 rg3d,当初曾经改名为 Fyrox[85]。
该游戏引擎尽管没有 bevy 那样受人关注,但也在高速倒退中,目前曾经公布了 0.24 版本。简略来说的变动:
- 2d 反对。从一开始,引擎只专一于 3D 游戏,但在 rg3d 0.23 中状况产生了一些变动,增加了一个简略的 2D 场景版本。
- 减少了开发指南
- 物理集成
- 引入了声音引擎 rg3d-sound
具体参见 rg3d 0.24 性能亮点[86]
Amethyst 新的开始
Amethyst 引擎发表进行开发[87],游戏引擎的火炬传递给了 Bevy,将来 Amethyst 基金会还会在游戏畛域发明价值,但不局限于游戏引擎。
为什么会这样?
- Amethyst 从自上而下的 BDFL 模式转为扁平的对等模式之后,始终没有找到本人的立足点。团队外部对 Amethyst 的指标不足对立认识。
- Bevy 引擎倒退的不错,将会把 Amethyst 引擎的火炬传递上来。
Amethyst 引擎做的好的一面:建设了一个先进的、由 ECS 驱动的游戏引擎,数以百计的 Rust 游戏开发爱好者通过 Amethyst 互相分割,并建设了长久的友情。
“BDFL: BDFL 是英文「Benevolent Dictator For Life」的缩写。中文翻译为「善良的一生独裁者」。在此架构下,有一个人(通常是我的项目的最后的作者,或者是社区选举的一个人)领有我的项目中所有最初的决定。较小的我的项目可能默认就是 BDFL 构造,因为此类我的项目个别就是一到两位维护者。若是公司组织的我的项目也极有可能会采纳 BDFL 构造,以便把握我的项目的决策权。
Amethyst 的将来
Amethyst 早就成立了基金会,尽管游戏引擎进行了开发,然而 Amethyst 基金会还会在游戏畛域持续投入。但将来将不再繁多地专一于制作任何特定的游戏引擎。
接下来可能会帮忙 Rust 游戏开发新人进入这个畛域而做一些致力,比方 推广、协调、教育、社区建设等。并且当初 Amethyst 团队做的一些都将和引擎无关,比方 Distill, specs, Legion, Laminar 等。
留神:Amethyst 只是进行了游戏引擎的开发,但他们将迈向更宽泛的 Rust 游戏开发畛域去做更具价值的事。
数据处理
Databend 数据云
Databend[88] 旨在成为一个开源的弹性和牢靠的云仓库,它提供了极快的查问,并联合了云的弹性、简略性和低成本,旨在使数据云变得简略。
Databend 受 ClickHouse 启发,计算模型基于 apache-arrow。Databend 实现了弹性的齐全面向云架构的设计,它强调状态和计算的拆散。相比传统数仓,用户应用 Databend 会取得更低成本、更易用、按量付费的体验。Databend 会向着 Serverless 方向迭代。Serverless 意味着把资源的调度做到更加精细化,云数据库的计算结点能够和一个函数一样,应用的时候拉起,应用结束后销毁,只须要用应用付费,资源调度会十分准确。
数据流解决
Tremor
Tremor[89] 是一个事件处理零碎。它最后是为了代替 Logstash 或 Telegraf 等软件而设计的。然而,通过反对更简单的工作流(例如聚合、汇总、ETL 语言和查询语言),tremor 曾经超出了这个繁多用例的范畴。
Tremor 每年 365 天 24×7 运行,并应用 Rust 编程语言实现。
“深挖了一下 tremor-runtime 我的项目背地的公司,原来是 Wayfair。Wayfair 是美国最大的家具电商,2017 年市值就达 58 亿美元,前身是早在 2002 年就成立的 CNSStores。亚马逊都吃不下它。Tremor 应该是 Wayfair 公司旗下的开源我的项目,曾经进入 CNCF。2021 年 九月份还召开了一次小型的线上的 Tremor Conf[90]2020 年 3 月份的一次分享:Rust 如何为 Wayfair 省掉数千个外围和 TB 级的内存的老本:2020-03-31-RustAndTellBerlin-functions[91]从 2018 年开始,tremor 就是跑在了 wayfair 生产环境中,每天解决 10 兆字节的数据,或每分钟 100 亿条音讯,每秒 1000 万个指标。tremor 升高了老本,缩小了复杂性,坚固和简化了操作环境,以激发 SRE 的乐趣,缩小 NOC 的工作量,并升高经营老本。
实时剖析的流式数据库 Materialize
Materialize[92] 是一个提供增量视图更新的反应式数据库,它帮忙开发人员应用规范 SQL 轻松构建流数据。在无需简单的数据管道的状况下,只须用规范 SQL 视图形容计算,而后将 Materialize 连贯到数据流,就能实现增量计算。底层的差别数据流 [93] 引擎(相干论文 Online Analysis of Distributed Dataflows with Timely Dataflow[94])可能执行增量计算,以最小的提早提供统一且正确的输入。与传统数据库不同,定义 Materialize 的视图没有任何限度,并且计算是实时执行的。
该公司曾经进入 B 轮,融资 4000 万美刀。
其余
fluvio[95] : 是一个开源数据流平台,可聚合、关联并将可编程智能利用于动态数据。Fluvio 由 Rust 提供反对,在云原生架构上提供低提早、高性能的可编程流。
vector[96]: 用于构建可察看性管道的轻量级、超疾速工具。
图数据库
海致星图:金融级分布式高性能图数据库
海致星图是国内致力于金融级图平台产品的公司,该公司曾经应用 Rust 进行高性能分布式图数据库的研发中。目前并未开源。
据我理解,该产品在防疫场景中用于在第一工夫找出人与人、人与地点、人与交通工具之间存在相干关系,从中提取有价值的关系链,对于阻断流传链和及时发现密切接触人起着至关重要的作用。
感激浏览
本文为报告的上篇,内容并未完结。
在下篇报告中会蕴含 Rust 应用领域的其余部分,以及对 Rust 寰球职业岗位散布 和 Rust 语言在高校教育的遍及状态 的内容。
敬请期待。
参考资料
[1]《三万言|2021 年 Rust 行业调研报告》: https://zhuanlan.zhihu.com/p/…
[2]Knoldus: https://www.knoldus.com/home
[3]Tangram: https://www.tangramvision.com/
[4]Rust 官网: https://www.rust-lang.org/zh-…
[5]crates.io : crates.io
[6]Rust 团队治理: https://www.rust-lang.org/gov…
[7]https://rustsec.org/: https://rustsec.org/
[8]mold: https://github.com/rui314/mold
[9]tracy: https://github.com/wolfpld/tracy
[10]superluminal: https://superluminal.eu/
[11]《SOK: On the Analysis of Web Browser Security》: https://arxiv.org/abs/2112.15561
[12]Oxidation: https://wiki.mozilla.org/Oxid…
[13]RFC 3058: https://github.com/rust-lang/…
[14]RFC 3128: https://github.com/rust-lang/…
[15]RFC 1598 : https://github.com/rust-lang/…
[16]RFC #1210: https://rust-lang.github.io/r…
[17]issue #31844: https://github.com/rust-lang/…
[18]异步根底打算: https://rust-lang.github.io/a…
[19]portable-simd: https://github.com/rust-lang/…
[20]packed_simd: https://github.com/rust-lang/…
[21]RFC #2873: https://github.com/rust-lang/…
[22]issue #72016: https://github.com/rust-lang/…
[23]Rustdoc book: https://doc.rust-lang.org/rus…
[24]Rust for Linux 未稳固个性宿愿单: https://github.com/Rust-for-L…
[25]RFC 1398: https://github.com/rust-lang/…
[26]官网形容: https://rustmagazine.github.i…
[27]很多探讨: https://users.rust-lang.org/t…
[28]PDF: https://static.sched.com/host…
[29]一系列文章: https://paulmck.livejournal.c…
[30]Rust for Linux:编写平安形象和驱动程序: https://linuxfoundation.org/w…
[31] https://github.com/Rust-for-L… https://github.com/Rust-for-Linux/linux/tree/rust/rust
[32]未稳固个性宿愿单: https://github.com/Rust-for-L…
[33]v2 补丁:https://lore.kernel.org/lkml/… https://lore.kernel.org/lkml/20211206140313.5653-1-ojeda@k…/
[34]https://www.phoronix.com/scan… https://www.phoronix.com/scan.php?page=news_item&px=Rust-For-Linux-v2
[35]kernel crate 文档: https://rust-for-linux.github…
[36]MINIX: https://artigos.wiki/blog/en/…
[37]Theseus: https://github.com/theseus-os…
[38]Tock: https://link.zhihu.com/?targe…
[39]OpenSK : https://link.zhihu.com/?targe…
[40]Hubris: https://github.com/oxidecompu…
[41]
行将到来的固件反动: https://www.youtube.com/watch…
[42]VxWorks: http://www.windriver.com.cn/n…
[43]在 Cloud Native Computing Foundation 中毕业了: https://linkerd.io/2021/07/28…
[44]Microsoft: https://www.microsoft.com/
[45]S&P Global: https://www.spglobal.com/en/
[46]挪威劳工和福利管理局: https://www.nav.no/
[47]Linkerd 2.11 在 2021 年 9 月公布: https://linkerd.io/2021/12/29…
[48]多个基准测试,显示性能和资源应用当先于 Istio 一个数量级: https://www.cncf.io/blog/2021…
[49]引领着将 Rust 带入: https://www.youtube.com/watch…
[50]这里: https://linkerd.io/2021/12/29…
[51]Deislabs: https://deislabs.io/
[52]Akri : https://github.com/project-ak…
[53]Krustlet: https://krustlet.dev/
[54]kubelet: https://kubernetes.io/docs/re…
[55]krator: https://github.com/krator-rs/…
[56]Fastly 2021 回顾: https://www.fastly.com/blog/b…
[57]50 trillion requests: https://investors.fastly.com/…
[58]Compute@Edge: https://developer.fastly.com/…
[59]WebAssembly: https://webassembly.org/
[60]Lucet: https://github.com/bytecodeal…
[61]wasmtime: https://github.com/bytecodeal…
[62]WasmCloud: https://github.com/wasmCloud/…
[63]根底库: https://github.com/bytedance?…
[64]monoio: https://github.com/bytedance/…
[65]《Rust 异步运行时的设计与实现》: https://rustmagazine.github.i…
[66]keyhouse: https://github.com/bytedance/…
[67]RTIC: https://rtic.rs/
[68]Embassy: https://embassy.dev/
[69]Knurling: https://knurling.ferrous-syst…
[70]smoltcp: https://github.com/smoltcp-rs…
[71]embedded-graphics: https://github.com/embedded-g…
[72]https://blog.rust-embedded.or… https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/
[73]esp-rs: https://github.com/esp-rs
[74]esp-rs book: https://mabez.dev/blog/posts/…
[75]esp32-hal: https://github.com/esp-rs/esp…
[76]Rust on Espressif chips – 10-01-2022: https://mabez.dev/blog/posts/…
[77]rust-gpu: https://github.com/EmbarkStud…
[78]kajiya: https://github.com/EmbarkStud…
[79]Rust-CUDA: https://github.com/Rust-GPU/R…
[80]Bevy: https://github.com/bevyengine…
[81]在浏览器中运行 Bevy 示例: https://bevyengine.org/examples
[82]!: https://bevyengine.org/examples
[83]Bevy 0.6 介绍: https://bevyengine.org/news/b…
[84]Fyrox(rg3d): https://github.com/FyroxEngin…
[85]Fyrox: https://rg3d.rs/general/2022/…
[86]rg3d 0.24 性能亮点: https://rg3d.rs/general/2022/…
[87]发表进行开发: https://amethyst.rs/posts/ame…
[88]Databend: https://github.com/datafusela…
[89]Tremor: https://github.com/tremor-rs
[90]Tremor Conf: https://community.cncf.io/eve…
[91]2020-03-31-RustAndTellBerlin-functions: https://www.tremor.rs/slides/…
[92]Materialize: https://github.com/Materializ…
[93]差别数据流: https://github.com/TimelyData…
[94]Online Analysis of Distributed Dataflows with Timely Dataflow: https://arxiv.org/pdf/1912.09…
[95]fluvio: https://github.com/infinyon/f…
[96]vector: https://vector.dev/