作者 | 云昭,2022,越来越多的开发者会发现,组长开始让自己组用 Rust 来重构项目了,即便是组长不 Push,身边的同事好像也在悄咪咪地练习“borrow checker”,有时还会看见同事对着屏幕发飙:什么玩意儿,不倒腾了!,网友戏称:只需要十行 Rust 代码,就能让你果断放弃!,学 Rust 难,已经是一个共识。然而,那些吐槽难的同学,往往会过一段时间重新操练起来,屡战屡败,屡败屡战。曾有一位资深的技术大牛吐槽:我放弃 Rust 已经四次了!,Rust 让人既爱又恨,恨得脑袋火冒三丈,直喷这代码连键盘都不够敲了,但又每次看到 Github 上的项目运行得如此高效优雅,让人却之不恭。,
,来源:知乎,企业对于 Rust 的吹捧已非一时兴起。,以近日电商行业软件开发商 Shopify 宣布拥抱 Rust 为例,Shopify 从一致性、性能、社区、生产力、安全等 5 个方面阐述了 Rust 对于其业务的吸引力和评估考量。,业务需求一致对口,性能高效,入门虽然难但开发还挺高效,社区驱动的开源项目,内存安全。可以说 Shopify 已经把 Rust 的每个好处都说了个遍。,一致性:Shopify 的系统编程需要覆盖多个领域,而且随着时间的推移,这个数字可能会增加。它们包括高性能服务器、提高性能或连接到其他库的 Ruby 扩展,以及编译到 Web Assembly。Shopify 诉求是对单一语言进行投资,并将其应用到众多领域,这意味着要确定一种可以非常灵活使用的语言。,性能:Shopify 需要能够高效、可持续地扩展,以支持全球商业。Rust 为我们提供了可预测的本机代码性能,包括对内存使用的精细控制,这使得它适合于我们堆栈的最低级别。当然,Rust 并不是唯一能够提供或近似这种性能的语言。在此基础上,还可以考虑使用现代 C++,如果垃圾收集器的分配行为和性能可以接受,则可以使用 Go。,社区:Rust 语言和生态系统由一个健康的社区驱动,Shopify 计划像 Ruby、Rails、React Native 和其他开源项目一样参与这个社区。Rust 的 RFC 过程和治理结构为包容性、深思熟虑的讨论提供了强大的基础,以推动语言和工具的未来。我们的贡献不仅有望使 Rust 在 Shopify 的使用中更加高效,而且还将改善所有 Rust 开发人员的工作。这也是 Shopify 加入 Rust 基金会的原因。我们希望支持 Rust 优秀的治理模式和“Rust commons”的维护,并将 Shopify 的知识和观点带入更大的 Rust 对话中。,生产力:在某些圈子里,Rust 以难以学习和使用而闻名,但 Shopify 内部和外部的开发人员发现,在最初的学习期之后,他们使用 Rust 构建起来非常高效和舒适。Rust 还有一个强大的库生态系统(“crates”)和良好的 IDE 集成工具,当然还有非常好的编译器错误消息。类型和宏系统的强大功能允许非常有表现力的 API 和语法,将开发人员的精力集中在表达他们的意思上,而不是在头脑中玩弄大量的状态和不变量。Go 在这里也有很好的声誉,C 和 C++ 就不那么好了。,安全:Rust 提供了许多让编译器帮助确保程序正确的工具,包括它们安全地管理内存,并且可以“无畏地并行”。随着 Shopify 对 Rust 的使用越来越复杂,将找到更多的方法来使用 Rust 的类型系统和安全规则来保持系统中的不变量。从我们最初的项目中,我们发现与我们评估的其他语言相比,Rust 在编译时而不是运行时暴露更多的错误。Rust 开发者经常说“部署没问题”,原因就在于此。,Rust 在编程语言界内算是年轻一辈,但能在 Stack Overflow 开发者调查的“最受喜爱编程语言”评选项目中连续七年摘下桂冠,足以说明背后实力不俗。,这种实力,除了 Rust 本身的特质,更多的则来自于多家顶级大型公司或者名人的背书。,外界耳熟能详的可能要首属微软。2019 年 2 月发布报告称 70% 的安全问题为内存安全问题,为了解决安全问题,开始尝试使用 Rust 来代替 C/C++ 重写 Windows 组件;微软的 DeisLabs 团队也选择 Rust 来构建 Kubernetes 工具 Krustlet,并称 Rust 比 Go 更适合 Kubernetes 的开发 。,再比如 Facebook: 从 2016 年开始使用 Rust,当时启动了一个名为 Mononoke 的重写项目;有 Mononoke 项目作为 Rust 语言是可行的,2019 年内部 Rust 开发团队达到了 100 人,并开始应用于 Diem 区块链项目;2020 年在内部成立了 Rust 开发者体验团队,继续为 Rust 社区做贡献,并支持内部 Rust 项目开发 。,还有谷歌:2016 年开始开发的 Fuchsia 操作系统,在 2020 年 12 月首次亮相于 google open source,其中 22% 的代码为 Rust 编写 。,值得一提的是,安全的语言特性与区块链的特性天生有重合性,因此区块链也成为较早引入 Rust 语言的领域之一。Gavin Wood 博士开发的 Parity 客户端应该是首个使用 Rust 的区块链项目,于 2015 年推出,Parity Technologies 的产品还包括 Polkadot、substrate 等 。Parity 一经发布在当时引起了不小的轰动。,对了,Mozilla 作为 Rust 项目的孵化起源地,FireFox 浏览器原本计划全部用 Rust 重写,但事与愿违,最后只完成了不到 10% 的比例,整个 Rust 项目就被砍掉了!不过正是因为被砍,才让 Rust 得以有了今天遍地开花的局面。,许多技术圈内的大佬对 Rust 也是推崇备至,Linux 便是其中之一。,由 Linux 基金会主办的 2022 开源峰会上,Linus 宣布:Linux 开始拥抱 Rust!,不久,Azure CTO Mark Russinovich 甚至在 9 月呼吁停用 C/C++,建议使用 Rust,一时引起网友热议。,而时任微软首席工程师的 Nick Cameron 在个人博客经常看到 Rust 的字眼,并给出了许多中肯的 Rust 发展建议。,甚至 Python 的创始人 Guido van Rossum,不惜自损 Python 4.0 也要夸一夸 Rust。Guido 表示 Python 4.0 很难看到曙光,并认为 Rust 是一种迷人的语言,几乎可以完美地处理内存管理问题。,视线拉回国内,华为、阿里、百度、字节等企业都已经入局了 Rust。华为作为国内唯一 Rust 基金会创始成员,可以说在 Rust 社区相当活跃,比如开发了代发度量工具 Tokei、Cargo-Geiger ,同时尝试将 Rust 应用于开源项目:StratoVirt 是 openEuler 上的企业级虚拟化平台,面向云数据中心,实现了一套架构统一支持虚拟机、容器、Serverless 三种场景。此外,华为还发起了 Rusted AI 的非商业组织,推动 Rust 在 AI 领域的应用落地 。,而字节跳动飞书团队则从 2017 年开始引入 Rust,飞书客户端非 UI 部分是由 Rust 跨平台实现 ;2021 年 5 月开源了 rsmpeg 项目(一个 FFmpeg 的库),也是采用 Rust 作为主要语言。,阿里则在云原生方面加码了 Rust 的投入,比如 11 月,Nacos 多语言体系中迎来了 Rust 版本。,值得,当然值得。不管是趋势还是现实,Rust 的价值已经十分清晰。,首先从流行度上而言,Stack Overflow开发者调查以及 Rust 的年度调查都在表明使用 Rust 作为工作语言的占比正在持续提高,这种惯性一旦养成,就会成为当年 Java 风靡全球之势。,此外还是 Rust 基金会的助力,这种趋势会越来越快。据悉,Rust 基金会的创始成员承诺在 2 年内,提供每年超过一百万美元的预算,用于 Rust 项目的维护、开发和推广。,其次,Rust 代表着一种“前卫”的编程理念。软件性能的提升总是滞后于硬件性能的提升。Rust 这种基于多核编程的理念,将对性能的低级(low-level)控制与现代语言功能结合在一起,语法上类似于 C++,但是又可以保证内存安全,足以让它在未来编程界站稳脚跟。,并且,Rust 陆续提出了“没有数据争用的并发性”、“没有垃圾回收的内存安全性” 和 “无惧骇客” 等引人瞩目的概念,将无数极客大牛吸引聚拢在其项目中,不断演进,呈现出越来越开放和健康的社区生态。,此外,Rust 还代表了一种新的、开源项目的协作方式:Rust 项目中的决策权是唯一委派和分配的,核心团队拥有更多特权。,最后,需求就在那里,如果说以前,领导让做 Rust 重构是为了讲故事,自己学 Rust 是为了耍酷,但现如今的 Rust 的应用场景愈发明晰:区块链开发、嵌入式开发、分布式、云原生、WASL、GUI 等等已经到处可以看到它的身影。,之前一种语言单挑多个领域的梦想,Java 尝试过,但梦碎了,Rust 却成为了新的希望,Shopify 等为代表的公司评估它与自身的业务十分契合,就是一个例子。,正如一位开发者所评论的:,Rust 在大型企业环境中的一大优势是它真的非常通用,能够用一种语言替换多种语言。Rust 真的可以做到 C/C++ 所能做到的一切,Java 所能做的一切,大部分 JavaScript 所能做到(随着 WASM 情况的改善)。这个一站式编程语言商店是 Java 的梦想,但嵌入式 Java 的失败和 Java 小程序的失败扼杀了这个梦想。Rust 有希望复活它。 ,Rust 初学者经常写到一半,脑海中会出现一种声音:何苦为难自己呢?比如下面这位朋友——,本来想拿 Rust 写一个集成业务逻辑的 API gateway,结果被 future 的那些个 error 转来转去搞得烦不胜烦,想一想发现这玩意儿又没状态我折腾它有个屁用,所以拿 node 随便搞了搞就上线了。,Rust 学习曲线陡峭得厉害是公认的。每每一到挫败之时,Go、C#、Crystal、Dart 就成了它的替代品。许多开发者甚至学习了N个月也搞不明白借用检查器。,因此,即使 Rust 能产生十分高效的代码,公司也会对他们的开发者使用它的生产力持怀疑态度。,最大的问题是,Rust 是否会被技术水平较低的程序员接受,特别是在其复杂性不断增加的情况下。Rust 的教学和培训将是关键。,习惯是需要培养的,就像垃圾收集、运行时异常、函数式编程这些陌生的概念一样,是一个不断磨合与适应的过程。,我们可以看到 Rust 方面一直在推广在学习方面不遗余力,从社区的活跃度,教程的补充等等。此外,Linux 基金会也在如何用 Rust 编写内核模块方面发布了教程。,近期,一位有心之人就利用 OpenAI ChatGPT 学习 Rust 。有位作者尝试和它做一些有关 Rust 方面的交流,回答的可以说相当可以了。比如:,人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。Rust 虐我千百遍,我待 Rust 如初恋!共勉!
© 版权声明
文章版权归作者所有,未经允许请勿转载。