介绍

特点:

  • 零开销抽象
  • 转移语义
  • 保证内存安全
  • 线程无数据竞争
  • 基于 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. 但当这个资源被借走时,主人不允许释放或修改该资源。

这些规则都是编译时校验和处理的,没有运行时。如此一来,感觉和 C 语言差不多了啊。

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

不知道对多线程和异步支持如何,这个也是常用操作,也是 Node.js 的长处。 可惜 Go 懂的人少,Rust 就更少了。而且快速开发需要的 IDE 也缺少,有点尴尬。

应用场景

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?https://www.zhihu.com/question/265653828/answer/299619910

这门课程是Rust Web框架Rocket作者Sergio参与教学的课程,这就保证了在现场的学生可以学到地道的Rust编程概念和技巧(Rokcet源码写的很好,它也是充分发扬了Rust特性的Web框架)。作者本人也是斯坦福在校计算机科学的PhD在读。

https://rocket.rs/overview/ A brief look at what makes Rocket special.

https://raphlinus.github.io/rust/simd/2018/10/19/fearless-simd.html https://news.ycombinator.com/item?id=18293209

Rust has the potential to be one of the leading languages for SIMD

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

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

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