介绍

特点:

  • 零开销抽象
  • 转移语义
  • 保证内存安全
  • 线程无数据竞争
  • 基于 trait 的泛型
  • 模式匹配
  • 类型推断
  • 极小运行时
  • 高效 C 绑定

可以直接编译成单独可以运行的二进制包,Deploy A Rust Application On Kubernetes With Helm,这点倒和 Go 类似:极小运行时,包含了内存安全(垃圾回收)和多线程?想来 Go 也提供了这个,这些都是很庞大的功能,是怎么做到很小的呢?Go 有 runtime,Rust 没有,线程的支持由 OS 提供。helloworld 编译好后只有大概 250KB,对比 Go 有 2.2MB。但似乎 Go 的编译速度明显更快。Rust 没有自己的标准库全部用 libc 的?但是我安装的时候有提示依赖 rust-std-static-1.28.0-2.fc28.x86_64 Standard library for Rust。 依赖少固然好,但是 Rust 是否是 C 的语法糖,外面包了层而已?

我们为什么要选择小众语言Rust来实现TiKV?我觉得最主要的原因在于其底层基于RocksDB,后者用 C++ 开发,GO 语言调用有损耗。同样用了 llvm 和没有 runtime,Rust 对比 C++ 类似 Scala 对比 Java。再者,Go GC 有抖动和 Goroutine 上下文切换开销增加不确定性,对一个数据库来说需要稳定的 benchmark。

所有权 Ownership,理解 Rust 中的生命周期Rust 所有权。Rust推崇安全与速度至上,它没有垃圾回收机制,却成功实现了内存安全 (memory safety)。

  1. 所有的资源只能有一个主人(owner)。
  2. 其它人可以租借(Borrowing)这个资源。
    1. 同时可以有多个不可变引用(&T)。
    2. 同时只可以有一个可变引用(&mut T)。
  3. 但当这个资源被借走时,主人不允许释放或修改该资源。

这些规则都是编译时校验和静态分析的,所以不需要 Java 那样的运行时。有时候静态分析无法判断或者不准确,还需要人为的在代码中加些内容来指导检查器。这样一来,一个功能强大的 IDE 就是开发必需了。这里看还是 VS Code 插件比较靠谱点。如果能做静态类型检查和资源安全检查就好了,这样语言的优势才能体现出来。在 Windows 上通过 Rust 进行开发,我是在 WSL 上面实验,使用 rust-analyzer(上下文提示和运行) 和 CodeLLDB(调试) 扩展,感觉还不错。

支持 map filter 这些函数式语言常见操作,这点比 Go 要好啊,我很喜欢。也可以参考这里。fold 也有,参考这里,确实很像 Haskell,这对提高效率很有帮助。

不知道对多线程和异步支持如何,这个也是常用操作,也是 Node.js 和 Go 的长处。

应用场景

Redox 是一个用 Rust 语言编写的类UNIX操作系统 , 它的目标是把Rust语言的创新带入到一个现代的微内核和全系列的应用程序。 https://www.redox-os.org/zh/

  • Rust 语言实现
  • 微内核设计
  • 包括可选的 GUI 程序 - Orbital
  • 支持 Rust 标准库
  • MIT 授权
  • 驱动运行在用户空间
  • 包括常见的Unix命令
  • C 程序的新移植库

https://github.com/redox-os/redox To use QEMU with KVM https://doc.redox-os.org/book/getting_started/try_vm.html 试了下一堆错,压根没法启动。

如何评价斯坦福的新操作系统课程CS140e? 这门课程是Rust Web框架Rocket作者Sergio参与教学的课程,这就保证了在现场的学生可以学到地道的Rust编程概念和技巧(Rokcet源码写的很好,它也是充分发扬了Rust特性的Web框架)。作者本人也是斯坦福在校计算机科学的PhD在读。https://rocket.rs/overview/ A brief look at what makes Rocket special.

Rust has the potential to be one of the leading languages for SIMD https://raphlinus.github.io/rust/simd/2018/10/19/fearless-simd.html https://news.ycombinator.com/item?id=18293209

AWS 新的轻量级虚拟机运行引擎 https://firecracker-microvm.github.io/ 也是Rust 写的。云计算领域用 Rust 的还有:k-v 数据库 TiKV,Serice Mesh Linkred/Conduit,这里直接和 Go 竞争,主要用在更核心的地方。

看到有视频展示在 stm32 上面运行 GO 语言,想到这个让 Rust 做不是更合适么?因为没有垃圾回收,更轻量。搜了下果然一堆:The Embedded Rust BookSTM32PADI。这种设备应该不支持语言的所有特征吧,比如多线程。https://cs140e.sergio.bz/ 课程教案。

AWS 宣布赞助 Rust

https://github.com/djc/quinn Futures-based QUIC implementation in Rust

我用 Rust 徒手重写了一个 Spark,并把它开源了 为什么快很多?具体实现不同还是语言优势(比如内存操作)?

Introducing Krustlet, the WebAssembly Kubelet 在 Kubernetes 上面运行 WebAssembly,作为 Container 的一种替代,其运行时 Krustlet 使用 Rust 编写,作为一种安全容器和沙盒?

Rust 编译模型之殇 编译确实明显的缓慢

Building a Cloud Database from Scratch: Why We Moved from C++ to Rust 一个少见原因是:完成同样任务,不同人能用不同C++写法,这个导致团队的交流困难。

https://tokio.rs/ 一个被广泛使用的异步框架库。