该不该在 Rust 上做点投资?

简介: 问题不是“该不该”,而是“怎么来”?

作者 | 雷卷
来源 | 凌云时刻(微信号:linuxpk)


前言

Rust 在 Stack Overflow 上连续5年被评为最想学习的编程语言,一直备受好评,所以这篇文章完全就是标题党,当然必须投资,明眼人都知道,也不需要我来为Rust摇旗呐喊。

image.png

下面内容是我个人一些学习点滴,同时结合我平时工作的一些情况,探讨一下 Rust 的可行性,算是落地场景讨论吧。

当然你可以理解为一个Up主做直播,没有什么话题,就是和大家随便聊聊技术,不过我这个是文字版的。


Rust 和云

微软的这篇文章 Microsoft: Rust Is the Industry's 'Best Chance' at Safe Systems Programming 阐述的非常清楚,云是工业级的产品,当然需要工业级的安全系统。这里的安全不是指互联网安全等,而是软件开发中的 Memory Safe、Type Safe 和 Thread Safe等,这样才能保证产品的运行其的稳定性。

我们知道新产品发布后,接下来一段时间基本就是各种 bug 修复,这些 bug 通常不是业务上的 bug,而是代码级别的 bug,比如内存溢出啊、空指针、并发控制没有做好导致数据错误等等。这些 bug 都很难被测试出来,如果有一个好的开发语言能帮助消除这方面潜在的很多问题,是不是非常好?

性能,这个大家不用担心,Rust is as fast as C and C++。

我非常认同文章中的观点,Rust 是非常好的基础设施类云产品开发语言,这是稳定性的保障,也是对客户负责。大家都说用互联网的思维做云产品,但是云厂商的重要客户都是企业客户,稳定性保障是第一位的,可能让企业来用自己的业务来为云产品试错。

另外一个消息:Programming languages: Now Rust project looks for a way into the Linux kernel, 也就是 Linux 内核可能拥抱 Rust 语言,当然 Linus Torvalds 是已经认可啦。

image.png


产品 Rust SDK 开发

使用 Rust 开发基础设施云产品的优点就不赘述啦!性能好、稳定性高。

如果我们做不到产品用 Rust 开发,那么是不是普通程序员就不能接触 Rust 啦?完全不是,这里有一个产品
Rust SDK 开发。很多云厂商的中间件产品都是 Java 语言、Cpp 语言开发的,我们都需要开发不用开发语言的 SDK,如 Java SDK、Python SDK 等。

那么产品的 Rust SDK 有什么不同之处吗?这里我给你解释一下。这里我们就举 Alibaba Dubbo 的例子吧,如果你不知道 Dubbo,现在只要理解为分布式 RPC 调用框架就可以。Dubbo Rust SDK 有以下一些特点:

  • 为Rust应用提供访问 Dubbo 的服务支持

如果客户的系统本来就是采用 Rust 开发,那么通过Rust访问 Dubbo 服务,这个需求应该没有什么好反驳的吧?要知道 Rust Web 框架 Actix-web 在性能测试中是排名靠前的。当然对 Dubbo Rust SDK,尤其针对IO和网络这一块,基本上都是通过 Tokio 实现的,所以默认就是支持异步化的,性能当然也是非常高的。

稍等一下,写一个涉及网络调用的 SDK 哪那么简单啊?

你就说一下使用 Tokio,还是有非常多的工作量的,不是那么好写的。 理论上是这样的,但是如果你看一下 Tokio 0.2.22版本的 tutorial ,你会发现就非常简单啦!这个 tutorial 不是告诉你如何写一个 Echo Server & Client,而是告诉你如何实现一个 Mini Redis,文档和代码样例都非常全,你只要一些调整,估计就能初步实现产品 Rust SDK 的功能。

image.png


  • 为 Rust WebAssembly 提供访问 Dubbo 支持

我们知道 WebAssembly 当前首选语言是Rust,假设你想在 WebAssembly 中访问 Dubbo 服务,如在浏览器中,我们只需要做 WebSocket 适配,在 WebAssembly 独立运行环境,我们可以通过 WASI Socket 来访问 Dubbo 服务。而针对 Wasm 的 Rust SDK 基本就是共享 Rust SDK 代码,然后做一些修改。

当然 WebAssembly 还承担着通用开发包(Universal Library)的角色,如果大家看过 wasmtime demo 的例子就应该能理解。


  • 为 Deno JavaScript / TypeScript 提供访问 Dubbo 支持

这里我们不想讨论 Node.js 和 Deno 谁是最后大赢家的问题,假设一些 JavaScript / TypeScript 的开发工程师选择了 Deno,我们知道 Deno 是基于 Rust 构建的,通过 Deno Plugin 为 JS / TS 提供调用接口,然后通过对应产品的 Rust SDK 实现,这样你不需要做太多的工作,使用 Deno 平台的同学就可以通过 JS / TS 访问你发布的服务啦。

Node.js 的开发者众多,但是我们都知道使用C++开发一个 Node.js 扩展不是那么容易的,只有极少数的同学有这个能力。那么开发一个 Deno Rust Plugin 复杂吗?可以说是非常简单,你只需要参考一下 Calcite 框架, 有非常好的文档和样例,同时结合一下 https://crates.io/ 上的开发包,开发一个高质量的 Deno Rust plugin 非常简单。


  • 为 C 语言提供访问 Dubbo 服务支持

如何为 C 语言提供 Dubbo 的访问支持?如果你问这个问题,估计会被打死的,但是没有关系,假设一些 ARM 设备的 C 程序想访问 Dubbo 服务,我们完全可以通过 Rust FFI 导出 cdylib 库,提供给C语言调用,这样省去我们开发 C SDK 的成本,而且这个成本并不低。我之前还想给 RSocket 写一个 C 的 SDK,仔细想了一下还是放弃啦,现在打算通过 Rust SDK 来为 C 提供访问接口。如果 C 能访问,那么基于 C 之上的一些小众语言,如 Lua 等,是不是也是可以访问 Dubbo 服务的。


  • 为其他语言提供运行期支持

上面我们谈到了 Rust SDK 通过 FFI 为 C 语言提供对应的 SDK,同样原理还可以套用到其他语言上,典型的就是 Calling Rust From Python,这个网上一堆案例,同样的还试用于 Ruby 语言。Java 有没有对应的案例呢?有的,就是 java-ext-wasm 这个项目,也就是在 JVM 中内嵌 WebAssembly 运行期环境,来运行 WebAssembly,而这个 WebAssembly Runtime 就是 Rust 编写的。


Rust 的开发者体验

Rust 的开发体验非常好,我们都知道 JavaScript 的开发者体验基本是 No.1 的,所以我们就不拿 Rust 和 Golang、Java 来对比,我们直接看一下 Rust 和 JavaScript 的开发体验对比,如下:

image.png

个人觉得 Rust 一些方面比 JavaScript 还好,如内置单元测试支持、example 样例支持、 文档 doc、代码格式化 format、Clippy(Linter) 等支持,这个是比 JS 要好一些的。

如果你拿 C++ 和 Rust 做开发者体验对比,那简直是地下和天上,诸如 Linux、Windows 和 Mac 平台的一致性等,这些都是 C++ 无法 Rust 对比的,更不用说 Rust 还有 https://crates.io/ ,这个也是 C++ 没有的。

目前来说,Rust 一个不好的开发者体验就是编译速度太慢,没有办法,编译器做了非常多的工作,但是好像有一个 sccache - Shared Compilation Cache 能提升编译速度,这个我还没有使用过,可能是我的项目都不够大,我还没有遇到编译速度非常慢的情况,基本还能接受。 当然 Rust 社区也在讨论 pre-built 依赖问题,可能需要一些时间。


Rust 没有想象的那么复杂 学习成本没有那么高

讲到这里,一定有同学想尝试学习和了解Rust,那么学习成本高不高?个人觉得要从几个方面来看。

  • 学习资料

在所有的开发语言中,Rust 的文档是最好的,没有之一。https://www.rust-lang.org/learn 上的《The Rust Programming Language》 可以说是最好的学习图书,完全免费,且更新比较快。个人觉得质量堪比 Pragmatic Bookshelf 的《Programming Ruby》,但是 Rust 是免费的,而且经常更新的。当然其他 Rust 相关的文档,如 Rust By Example,Rust WebAssembly 等,文档质量都非常高。

另外大家都喜欢的 Cheat Sheet,你看一下 Rust 的 Cheat Sheet,就明白啦。 https://cheats.rs/

当然其他语言也有对应的文档,但是我想问一下有几个 Java 开发者是去 Oracle Java 站点学习 Java 的?但是 Rust 做的就不一样,所有的学习文档都堪称一流,让你学习无压力。


  • Rust Module 理解起来不容易

确实刚开始一头雾水,我觉得这篇文章 Clear explanation of Rust’s module system 非常好,废话多说无益,看完后基本全明白啦!

image.png


  • Rust Ownership

刚接触的同学非常头痛,至少我是,但是这也是 Rust 的特点,没有 GC,但是能做到 GC 差不多的效果,当然要走不同寻常路。但是也没有那么头痛,找几篇 Rust Ownership 的文章看一下,就可以啦。另外我推荐一下这个站点,这个老头的 Rust 教学视频非常好,非常容易理解, 资料也比较多,相信你看啦就明白啦,你只需要一个好的指导。

image.png


  • Rust Enum

Rust 的 Enum 功能非常强大,这个要特别留意一下,个人觉得 Swift 的 Enum 能和 Rust Enum 有一拼。我们经常看到其他语言中的 Result、Optional 等,在 Rust 中都是通过 Enum 实现的。


  • Tokio

Rust 其他的特性我就不说啦,其他语言都有。这里说明一下 Tokio。

Tokio 是 Rust 下的异步化框架,其地位相当于 Netty 在 Java 的作用,知名的 Deno 框架就是基于 V8 + Rust + Tokio 构建的。如果你有 JavaScript 的经验同时了解 Promise,那么 Tokio 的 Future async / await 和 JavaScript 的 Promise async / await 差不多,Tokio 的 Asynchronous stream 和 JavaScript 的 AsyncIterableIterator 也类似,学习的成本并不高。如果是 Java 程序员,可能理解起来有些吃力,但是如果你了解 Java 下的 Reactive 框架,如 RxJava 和 Reactor,那么理解起来也比较容易。


总结

当然这些是个人学习、编写一些 Rust Demo 和 Deno 了解等得出的结论,没有什么大道理,就是落实在一些点上,当然也就不可能非常全面,也就提供给你参考一下。

最后,学习一门语言,千万不要听什么语言大师的,就是自己看资料、写 Demo、同时多看一些知名开源软件的代码,然后自己得出结论,哪怕是那种从入门到放弃的那种。

另外大家都可以参考一下 Considering Rust,帮助你更好地了解 Rust。

扫描下方二维码关注“凌云时刻”公众号回复“Rust”获取Considering Rust演讲文稿PDF

image.png

目录
相关文章
|
3月前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
66 1
|
7天前
|
Rust 安全 Java
探索Rust语言的并发编程模型
探索Rust语言的并发编程模型
|
14天前
|
Rust 安全 区块链
探索Rust语言:系统编程的新选择
【10月更文挑战第27天】Rust语言以其安全性、性能和并发性在系统编程领域受到广泛关注。本文介绍了Rust的核心特性,如内存安全、高性能和强大的并发模型,以及开发技巧和实用工具,展示了Rust如何改变系统编程的面貌,并展望了其在WebAssembly、区块链和嵌入式系统等领域的未来应用。
|
15天前
|
Rust 安全 Java
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第27天】Rust语言以其独特的特性和优势在编程领域迅速崛起。本文介绍Rust的核心特性,如所有权系统和强大的并发处理能力,以及其性能和安全性优势。通过实战示例,如“Hello, World!”和线程编程,帮助读者快速入门Rust。
31 1
|
16天前
|
Rust 安全 编译器
编程语言新宠:Rust语言的特性、优势与实战入门
【10月更文挑战第26天】Rust语言诞生于2006年,由Mozilla公司的Graydon Hoare发起。作为一门系统编程语言,Rust专注于安全和高性能。通过所有权系统和生命周期管理,Rust在编译期就能消除内存泄漏等问题,适用于操作系统、嵌入式系统等高可靠性场景。
28 2
|
7天前
|
Rust 安全 前端开发
探索Rust语言的异步编程模型
探索Rust语言的异步编程模型
|
17天前
|
Rust 安全 云计算
Rust语言入门:安全性与并发性的完美结合
【10月更文挑战第25天】Rust 是一种系统级编程语言,以其独特的安全性和并发性保障而著称。它提供了与 C 和 C++ 相当的性能,同时确保内存安全,避免了常见的安全问题。Rust 的所有权系统通过编译时检查保证内存安全,其零成本抽象设计使得抽象不会带来额外的性能开销。Rust 还提供了强大的并发编程工具,如线程、消息传递和原子操作,确保了数据竞争的编译时检测。这些特性使 Rust 成为编写高效、安全并发代码的理想选择。
15 0
|
1月前
|
Rust 安全 网络安全
在 Rust 语言中,寻找企业上网行为管理软件的突破
在数字化企业环境中,上网行为管理软件对于保障网络安全和提升工作效率至关重要。Rust 语言凭借其安全性、高性能和并发性,为开发此类软件提供了新机遇。本文通过几个 Rust 代码示例,展示了如何实现网址检查、访问频率统计及访问控制等功能,旨在探索 Rust 在企业上网行为管理中的应用潜力。
35 0
|
3月前
|
Rust 安全 编译器
初探 Rust 语言与环境搭建
Rust 是一门始于2006年的系统编程语言,由Mozilla研究员Graydon Hoare发起,旨在确保内存安全而不牺牲性能。通过所有权、借用和生命周期机制,Rust避免了空指针和数据竞争等问题,简化了并发编程。相较于C/C++,Rust在编译时预防内存错误,提供类似C++的语法和更高的安全性。Rust适用于系统编程、WebAssembly、嵌入式系统和工具开发等领域。其生态系统包括Cargo包管理器和活跃社区。学习资源如"The Book"和"Rust by Example"帮助新手入门。安装Rust可通过Rustup进行,支持跨平台操作。
150 2
初探 Rust 语言与环境搭建
|
3月前
|
Rust 安全 程序员
Rust 语言的防错机制太惊人了!安全编码从此不再是难题,快来一探究竟!
【8月更文挑战第31天】《安全编码原则:Rust 语言中的防错机制》探讨了代码安全的重要性,并详细介绍了Rust语言如何通过内存安全模型、所有权与借用规则等特性,在编译阶段检测并阻止潜在错误,如缓冲区溢出和悬空指针。文章还讨论了类型安全、边界检查等其他安全特性,并提出了遵循不可变引用、避免裸指针及充分测试等实用编码原则,以进一步提升代码质量和安全性。随着Rust在软件开发中的应用日益广泛,掌握其安全编码原则变得尤为重要。
56 0

相关实验场景

更多