在完成本篇报告之后,我得出一个观点:Rust的出现并不是要你去用它重写一切,而是希望你可以用它创造新的未来。当然这只是我个人观点,不代表任何人任何机构和公司。如果您有不同观点,欢迎探讨。
WechoosetouseRust,notbecauseitiseasy,butbecauseitishard,becausethatgoalwillservetoorganizeandmeasurethebestofourenergiesandskills,becausethatchallengeisonethatwearewillingtoaccept,oneweareunwillingtopostpone,andonewhichweintendtowin,andtheothers,too.
我们选择Rust,不是因为它容易,而是因为它难。这会有助于我们去组织和衡量将精力和技能投入到一个最佳目标。当我们接受这份挑战之后,就代表这份挑战是我们愿意接受的,且愿意马上投入的,并且必须打赢的挑战。其他挑战也当如此。
本次报告的所有内容都来自于互联网公开信息,如有错误或不宜在本报告中提及的内容,请及时告知。
本次报告包含以下内容:
版次这个翻译来自于书籍出版术语。比如《Rust编程之道》第一版、第二版等。
版次(edition)的引入主要是为了Rust能在发展过程中方便地引入一些不向后兼容的特性,而不会影响之前的代码。比如Rust2018edition中没有async/await关键字,但是在2021editon中引入了async/await关键字,这样就避免破坏旧代码中letasync=1;这样的写法。版次和语义化版本是正交的概念。
Rust发布的每个版次都有其核心主题意义:
RustEdition现在已经确定了,每三年发布一个版次。这就意味着Rust每三年都会围绕一个引领Rust发展的主题。
2024Edition:主题也许是「广泛应用」。
2021年2月9号,Rust基金会宣布成立。华为、AWS、Google、微软、Mozilla、Facebook等科技行业领军巨头加入Rust基金会,成为白金成员,以致力于在全球范围内推广和发展Rust语言。
最近Rust基金会又推选在非营利组织有十五年经验的Rebecca称为了基金会的执行董事(ED)和CEO。相信在Rust基金会的领导下,Rust会有广泛的应用前景。
我们可以通过这些指标来评判一下Rust的成熟度。
如果拿植物的成长阶段(「播种-发芽-开花-结果」)来类比的话,Rust的成熟度应该属于「开花」阶段。
Rust语言作为一门新生语言,虽然目前倍受欢迎,但是面临的挑战还很多。
挑战主要来自两个方面:
关于领域的选择,我们在下一节「Rust在各个领域中的应用状态和趋势」中探讨。先来看看Rust语言自身还有哪些特性需要进化才能顺利完成2024Edition的阶段目标。
比较了四种浏览器架构,以及近十年来浏览器中内存安全问题依然是主流。但是观察Firefox通过Oxidation项目(Rust)替换了12%的组件。自2015年以来,Firefox的内存安全漏洞数量出现了小幅但稳定的下降,其中,渲染器的内存安全漏洞明显下降。
可以说经过六年的应用,Rust语言的内存安全保障终于看到了初步的效果。该论文建议浏览器供应商遵循这一最佳实践,并逐步将他们的浏览器转向内存安全的语言。
Rust语言必须解决以下问题才能顺利往前发展:
上面罗列的只是Rust待完善问题的一部分工作而已,还有很多内容没有列出来。Rust语言还在不断进化中。
今年Rust开源组织发生了Rust语言审核团队(modteam)集体离职的事件,引起国内外技术社区广泛讨论。
要管理一个规模超过大多数公司,却由志愿者组成的开源项目是很困难的。他们有很多工作要做,但他们相信RustProject会因此变得更加强大。虽然这些问题很严重,需要谨慎地得出积极的结论,但他们相信这不会对Rust语言及其核心工具、文档和支持进行改进的能力产生负面影响。
对于关心Rust的中文社区的朋友和技术媒体而言,我觉得没必要过度解读。因为我们不了解美国社会以及处于该社会下人们所关心和敏感的问题是什么,真正想去理解也是比较困难的,因为有文化差异。我们只知道,这是一个超过大多数公司人员规模且都是志愿者组成的开源组织所要面临和解决的问题,问题一旦经过解决,那么这个社区将得到进化,会更加强大。所以没必要担心什么Rust会被负面影响。
但此时,我又想起2020年Rust1.44版本发布时,官方博客说过这么一句话:「techisandalwayswillbepolitical」。
对于美国文化不太了解的我,之前还对审核团队存在的重要性嗤之以鼻,现在感觉审核团队的存在对于Rust这样深处文化政治复杂的美国是多么重要。我终于理解Rust官方团队所说这件事的背景相当复杂的原因了。
真心希望Rust社区少一些政治、种族等非技术言论和矛盾。Rust语言是全球的,不是某个国家的。真心希望Rust团队能处理好这件事。对此,我们能做些什么呢?也许只能祈祷世界和平。
接下来,我们来盘点一下2021年Rust在各个领域中应用的状态和可能的趋势是什么。
先从操作系统来看起。
从2020年6月,Rust进入Linux就开始成为一个话题。Linux创建者Linus在当时的开源峰会和嵌入式Linux会议上谈到了为开源内核寻找未来维护者的问题。
在今年(2021)的开源峰会上,Linus说道:“我认为C语言是一种伟大的语言,对我来说,C语言确实是一种在相当低的水平上控制硬件的方法。因此,当我看到C语言代码时,我可以非常接近地猜测编译器的工作。它是如此接近硬件,以至于你可以用它来做任何事情。但是,C语言微妙的类型交互并不总是合乎逻辑的,对几乎所有人来说都是陷阱。它们很容易被忽视,而在内核中,这并不总是一件好事。Rust语言是我看到的第一种看起来像是真的可以解决问题的语言。人们现在已经谈论Rust在内核中的应用很久了,但它还没有完成,可能在明年,我们会开始看到一些首次用Rust编写的无畏的模块,也许会被整合到主线内核中。”
Linus认为Linux之所以如此长青,其中一个重要的基石就是乐趣(Fun),并且乐趣也是他一直追求的东西。当人们讨论使用Rust编写一些Linux内核模块的可能性时,乐趣就出现了。
在刚过去的2021年9月的LinuxPlumbers大会上,再一次讨论了Rust进入Linux内核的进展。
这次大会的结论是:
我对这部分视频内容做了一个简要总结:
2021.12.6早上发出了更新的补丁,介绍了在内核中处理Rust的初始支持和基础设施。
这次更新的内容包括:
从现在开始,Rustforlinux团队将开始定期提交补丁,每两周左右。
除了来自Arm、Google和Microsoft的支持外,这次该团队又收到一封来自红帽的信:红帽对Rust用于内核的工作也非常感兴趣(ThereisinterestinusingRustforkernelworkthatRedHatisconsidering)。
综合上面我们了解到的这些信息,2022年,我们很可能会看到Linux内核中的实验性Rust编程语言支持成为主流。如果这次实验成功,那么就意味着Rust正式从C语言手里拿到了时代的交接棒。
Redox的发起者虽然在System76工作,但实际上Redox这个项目并未得到System76的赞助。我曾经以为Redox属于System76的商业开源项目,但最近才发现,Redox的花费都是来自于社区赞助。Redox的主要开支基本都是用于RedoxOSSummerofCode,招募一些学生,为其完善功能。
现代OS中不同进程会共享很多状态,这会导致statespill的问题,比如,如果Android系统服务失败,“整个用户空间框架”就会崩溃,影响所有应用程序,甚至影响那些不使用失败服务的应用程序。
TheseusOS有许多微小的组件,称为单元,每个都有明确的界限。每个单元都是一个Rustcrate。然而,更大的创新是他们所谓的“语内(Intralingual)操作系统设计”,他们的意思是使用编程语言机制来实现操作系统,即,“将语义错误从运行时错误转变为编译时错误”。这意味着,Theseus相比于其他OS与Rust的关系更加紧密。
TheseusOS故障恢复涉及用新的单元替换损坏的单元。研究人员声称,这“允许Theseus在面对多个故障子系统时容忍最低系统层中的故障。”这是一种单元交换技术,也许这就是Theseus这个名字的由来,忒修斯之船的故事应该都听过吧?
今年TockOS的一个动作是,它升级到了2.0版本,并且这次升级是一次重大更新,完全是新内核,核心内核API被重新设计。
并且对芯片和开发板的支持基本覆盖的非常全面:RISC-V/ARMCortexM0+/ARMCortexM7/NanoRP2040/RapsberryPiPico/ESP32-C3-DevKitM-1等等。
HubrisvsTockOS:
2021年5月,GoogleFuchsiaOS正式发布,截止12月Fuchsia即将在第二款设备(NestHubMax)上运行。
众所周知,Fuchsia近30%的代码都由Rust实现。Fuchsia编程语言政策对Rust的分析:
优点:
缺点:
所以最终决定:
那么,这个1.0究竟意味着什么?它意味着稳定性和向后兼容性保证。人们就可以开始用它构建一些真正的产品了。随着WebAssembly和WASI的成熟,后面还会添加更多功能。
2021年,Compute@Edge的每日请求流量经历了爆炸性的增长,比1月份的每日流量暴涨了31,000%以上。客户使用量有望在2021年达到2万亿次总请求,目标是在2022年底达到50万亿次。
在WebAssemblyServerside领域,还有很多极具创新的产品:
其中比较出色的可用于云原生项目的基础库有:
总的来说,Rust在嵌入式领域越来越成熟了。
截止年底,mabez完成的工作可以在其博客看到,总的来说目前进度为:
ARM是迄今为止在物联网边缘使用的芯片组和传感器等嵌入式设备的领先制造商,今年已经加入了Rust基金会。
Rust完全有能力在嵌入式计算等更高级别的物联网领域完成特定任务,例如边缘轻量级计算和后端服务的实现,并同时可以在一定程度上满足这类物联网基础设施的功能安全需求。
Embark是和韩国游戏公司Nexon(《冒险岛》《跑跑卡丁车》)合开的。EmbarkCEO是前EA首席设计官Patrick,曾是《战地》系列开发商DICE的CEO。Embark也是Rust游戏工作组的成员之一,该公司也赞助了很多Rust生态开源项目的作者。
Traverseresearch公司位于荷兰Breda中心区,愿景是让Breda成为游戏开发强镇。该团队的核心成员在图形学领域造诣很强。
rust-gpu主要是针对图形渲染引擎,希望可以把Rust引入为一种着色语言。通过rustc后端编译到spir-v(着色器的二进制中间语言)来达成这个目标。目前该领域常用的是GLSL/HLASL,但它们并未随着游戏行业发展提供处理大型代码库的机制,所以在这个领域急需一门优秀的着色语言,而embark的人们认为Rust就是最佳选择,所以他们做了这项工作。
gfx-rs社区的目标是让Rust中的图形编程变得简单、快速和可靠。主要项目有:
其中wgpu2021年发展:
Naga2021年发展:
Bevy作为开源项目,在GitHub上接受的赞助现在基本已经达成了每月6000美刀的目标。虽然目前Bevy只发布了0.6版本,但是其生态在逐步建立,并且受到很多人的欢迎和期许。
Bevy0.6版本中有大量改进、错误修复和质量提升,这里罗列一部分:
顺便提一句:国内已经有公司将Bevy应用于商业项目,同时也在招人。
为什么会这样?
Amethyst引擎做的好的一面:建立了一个先进的、由ECS驱动的游戏引擎,数以百计的Rust游戏开发爱好者通过Amethyst相互联系,并建立了持久的友谊。
BDFL:BDFL是英文「BenevolentDictatorForLife」的缩写。中文翻译为「仁慈的终身独裁者」。在此架构下,有一个人(通常是项目的最初的作者,或者是社区选举的一个人)拥有项目中所有最后的决定。较小的项目可能默认就是BDFL结构,因为此类项目一般就是一到两位维护者。若是公司组织的项目也极有可能会采用BDFL结构,以便掌握项目的决策权。
Amethyst的未来
Amethyst早就成立了基金会,虽然游戏引擎停止了开发,但是Amethyst基金会还会在游戏领域继续投入。但未来将不再单一地专注于制作任何特定的游戏引擎。
接下来可能会帮助Rust游戏开发新人进入这个领域而做一些努力,比如推广、协调、教育、社区建设等。并且现在Amethyst团队做的一些都将和引擎无关,比如Distill,specs,Legion,Laminar等。
注意:Amethyst只是停止了游戏引擎的开发,但他们将迈向更广泛的Rust游戏开发领域去做更具价值的事。
总的来说,是让Quilkin通过吸收无效流量来帮助保护服务器免受攻击,或者在边缘运行为玩家流量提供最佳延迟。这对于任何游戏工作室都是利好,可以据此拥有与大型巨头相同的网络功能。
Databend受ClickHouse启发,计算模型基于apache-arrow。Databend实现了弹性的完全面向云架构的设计,它强调状态和计算的分离。相比传统数仓,用户使用Databend会获得更低成本、更易用、按量付费的体验。Databend会向着Serverless方向迭代。Serverless意味着把资源的调度做到更加精细化,云数据库的计算结点可以和一个函数一样,使用的时候拉起,使用完毕后销毁,只需要用使用付费,资源调度会非常精确。
Tremor每年365天24x7运行,并使用Rust编程语言实现。
深挖了一下tremor-runtime项目背后的公司,原来是Wayfair。Wayfair是美国最大的家具电商,2017年市值就达58亿美元,前身是早在2002年就成立的CNSStores。亚马逊都吃不下它。
从2018年开始,tremor就是跑在了wayfair生产环境中,每天处理10兆字节的数据,或每分钟100亿条消息,每秒1000万个指标。tremor降低了成本,减少了复杂性,巩固和简化了操作环境,以激发SRE的乐趣,减少NOC的工作量,并降低运营成本。
该公司已经进入B轮,融资4000万美刀。
海致星图是国内致力于金融级图平台产品的公司,该公司已经使用Rust进行高性能分布式图数据库的研发中。目前并未开源。
目前Transformer模型预测已经遍布特斯拉、谷歌、微软、Facebook等科技巨头。Transformer在特斯拉AutoPilot自动驾驶系统中驱动汽车、在Gmail中补全句子、在Facebook上及时翻译用户的帖子以及在Bing中回答用户的自然语言查询等。
可以说,HuggingFace这家创业公司使用Rust来构建分词器,对于机器学习模型的准确率和性能方面的巨大提升应该是有积极作用等。
“scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包。它通过NumPy,SciPy和Matplotlib等python数值计算的库实现高效的算法应用,并且涵盖了几乎所有主流机器学习算法。
也就是说,在2022年,Rust生态中会出现一个功能和pythonsklearn完全一致,但性能比sklearn更好的库。
在数据操作层面,每个人都喜欢Pandas的API。它快速、简单且有据可查。但在生产方面,Pandas有点棘手。Pandas不能很好地扩展……没有多线程……它不是线程安全的……它不是内存效率。这一切都是Rust存在的理由。
Polars有两个优势:
也有三个缺点:
Enzyme出现的背景
当前,PyTorch、TensorFlow等机器学习框架已经成为了人们开发的重要工具。计算反向传播、贝叶斯推理、不确定性量化和概率编程等算法的梯度时,我们需要把所有的代码以微分型写入框架内。这对于将机器学习引入新领域带来了问题:在物理模拟、游戏引擎、气候模型中,原领域组件不是由机器学习框架的特定领域语言(DSL)编写的。因此在将机器学习引入科学计算时,重写需求成为了一个挑战。
为了解决这一问题,现在的发展趋势包含构建新的DSL,让重写过程变得简单,或者在编程时直接进行构建。这些方法可以让我们获得有效的梯度,但是仍然需要使用DSL或可微分的编程语言进行重写。为了方便开发者,来自MIT的研究者开源了Enzyme。
常规的AI算法交付流程一般分为模型训练、SDK封装、业务集成和交付验收四个步骤,冗长繁杂。MegFlow总结了旷视内部多年的AI应用工程落地经验,将资源、消息、任务等概念进行了清晰一致的抽象化,将冗长的算法交付流程简化为模型训练、业务集成及交付验收三步。通过MegFlow,AI算法研究人员可以快速将训练好的模型集成部署成简单易用的AI服务并完成交付。
MegFlow的研发团队调研了多种技术方案,最终选择了安全且零额外开销的Rust异步生态,从基础上保证了MegFlow的安全性与性能。
还有一些在2021年6月份统计过的依然活跃维护状态的机器学习框架:
SixtyFPS是一个工具包,可以有效地为任何显示器开发流畅的图形用户界面:嵌入式设备、桌面应用程序、移动端和Web(目前可编译到wasm,但仅作为演示,SixtyFPS无意将Web作为主要竞争平台)。它支持多种编程语言,目前是Rust、C++或JavaScript。核心库是Rust实现,其他语言的支持通过C-ABI来完成。
从2021年开始,就看到一些基于Rust和开源来创业的公司慢慢增加,这个专注于GUI的SixtyFPS也是其中一个,这个开源GUI工具库面向全平台,目标之一是取代Qt,换句话说,SixtyFPS基本上是大多数Qt开发人员都在等待的下一代QML。
SixtyFPS两位创始人都对Qt开发有深入的经验。其中一位是曾经在Qt公司担任QtQml引擎的主要开发人员和维护人员。
看他们的2021总结报告,发现他们在2021才注册了公司,和tQCS这样的咨询公司建立了合作关系,找到了第一个客户,招募了新成员。(感觉国外技术流创业跟国内还是有点区别)。tQCS提供世界No.1的Qt咨询和UI/UX设计服务,选择和SixtyFPS合作,这意味着什么呢?见仁见智吧。
2022年他们可能要长足支持嵌入式,要有新品牌名字了。
下面有一个比较:
Bundle大小:tauri比electron小大约19倍。
内存消耗:electron比tauri高9倍。
性能:tauri更胜一筹
但使用tauri的要求更高,tauriAPI远不如Node.JS完整和充实,所以你在使用tauri的时候,有些API可能需要自己使用Rust去实现它们。
另外,Tauri在2021年还孵化出另外两个crate:
Tauri目前发布了1.0beta版,距离正式稳定版已经不远。Tauri选择Rust的原因就是为了安全和性能。Tauri承诺不管你是在App中内置localhost服务器,还是做其他事情,Tauri都会为你提供一个安全的底线。将来Go、Nim、Python、Csharp等其他后端语言也会被支持,这些都会通过当前这个Rust内核提供C-API来实现。
截止目前,egui发布了0.16版本。
随着世界变得越来越紧密,网络基础设施软件的规模和复杂性正在急剧增加。然而,对该软件的要求与以往一样严格:它不仅必须快速,而且必须“安全”,即能够处理不受信任的数据而不会崩溃或容易受到安全漏洞的攻击。传统上,这两个要求是不一致的:网络程序员必须选择一种既能提供速度又能提供安全性的语言。所以,Rust是下一代网络基础设施的必须语言。
虽然Rust异步特性还需要很大的改进,但是目前因为有Tokio的存在,完全可以在生产环境中应用Rust异步。
即使在代码中某处存在无限循环,调度也将始终是公平的,不会永久阻塞执行线程。最好的部分是开发者不需要做任何特别的事情来实现这一点,无论你使用哪种编程语言,运行时都会处理它。
这一切都是基于Rust和WebAssembly(wasmtime和wasmtime-wasi)来实现的,目前只发布了0.7.0版本,还在不断高速迭代。
在嵌入式中,通常使用中断、DMA并利用多核来处理并发事件而不阻塞主循环。这些传统上是通过有意的寄存器写入来处理的。例如,向外围设备发送命令以启动任务,继续运行程序,当任务完成时,会触发一个中断,并立即运行处理完成的代码。Rust中可以使用基于Future的Async/Await功能来抽象这些过程。
Embassy是一个执行器和一个硬件访问层(HAL)。executor是一个调度程序,通常执行固定数量的任务,在启动时分配,但以后可以添加更多。HAL是一种API,可用于访问外围设备,例如USART、UART、I2C、SPI、CAN和USB。Embassy在有意义的地方提供异步和阻塞API的实现。DMA(直接内存访问)是一个非常适合异步的示例,而GPIO状态更适合阻塞API。
Embassy目前为多个微控制器系列提供HAL:
eBPF技术在网络技术中的表现,更是让人眼前一亮,BPF技术与XDP(eXpressDataPath)和TC(TrafficControl)组合可以实现功能更加强大的网络功能。
随着连网设备的数量稳定增加,业界在计算、储存和通信能力方面遇到前所未有的异质性,并且在产生数据以及必须交付和使用数据的规模方面面临新的挑战。
zenoh的目的在于满足必须以可扩展、高效率且位置透明化的数据方式处理动态数据、静态数据和计算的应用程序的需求。
有些人说用Rust进行Web开发是杀鸡用牛刀,这种观点其实是对「系统级语言」的刻板印象造成的。无论从性能、工程架构还是开发效率,Rust其实都很出色,目前就是需要一套比较成熟的框架。无论如何,Rust在Web开发领域的生态在逐步成型。
Poem是一款由国人开发的Rust异步Web框架,其中最令人兴奋的功能是:
已知使用Poem的开源项目:
使用poem的闭源项目
为了确保JavaScript的未来发展将继续适用于Deno和服务器端JavaScript运行时,Deno公司已加入负责JavaScript标准(ECMA-262)的ECMA国际标准组织,并参与到TC39工作组的工作中,LucaCasonato(卢卡·卡索纳托)将是Deno在TC39的主要代表。
Deno目前在高速开发中,截止目前已经发布1.17.3版本。目前有13家公司在其技术堆栈中使用Deno,包括Cloudless、Appwrite和TheLoneroFoundation。
目前抖音小程序业务端也在招幕Rust开发者,在一些前端基础设施(比如编译器)上考虑使用Rust/C++来进行实践。
许多区块链要么运行用Rust编写的智能合约,要么用Rust实现它们的智能合约运行时或语言。它们分为几类:
2021年区块链几大公链出镜比较多的是Near/Solana/Dfinity/NeverOS,整年都有开发者激励计划和黑客松活动。
2021年比较活跃的概念是跨链、DeFI、NFT和Web3。
VR/AR领域,目前Rust生态也有人做,但不是很丰富:
Rust对VR/AR的支持,也许就从OpenXR这里起步了。
因为Rust的安全属性,目前在金融领域应用Rust的公司比较多,所以目前全球Rust工作岗位最多的分布就是区块链和量化金融。
基本上按目前全球Rust岗位招聘,可以分为以下几类:
关于具体的Rust职位招聘,可以在RustWeekly/Redditr/rust频道/RustMagazine社区月刊/Rustcc论坛,以及各大招聘网站中可以找到。
还有很多其他招聘,其中区块链职位居多,这里就不一一列举了。
请注意,一些号称完全远程的职位实际上只是考虑美国/加拿大,有时甚至是欧盟居民,能不能在中国找到这些职位,可能需要看你的运气和沟通水平!
上面列出的只是网络上可见的一部分,对于国内的小伙伴来说,这些职位可能无法申请。对于国外的小伙伴来说,也许是一个福音。
从2018年到2022年国内外出版的书排列。
国内
国外:
这些书并非全部,还有很多国外的书没有罗列出来。
可以看出,国外的Rust书在陆续增多,国内也有这个趋势。
Reddit讨论:你梦想中的Rust大学课程是什么样的?
他目前的教学计划大概如下:
你对此有何看法呢?
对Rust做生态调研,是一件很累的事情,因为Rust作为一门真正的通用型语言,其生态信息量太大,涉及领域众多。但我也坚持把这篇报告做完了,因为我实在很喜欢Rust社区,Rust社区在我眼里,就是充满了希望和蓬勃生机的社区。希望你也和我一样,可以喜欢Rust。