概述

这个系列的文章主要用于记录,作为一名C++开发工作者初步学习和理解Rust语言的过程。

初学Rust语言主要基于RUBOOB网站的Rust教程

从C++看Rust

C++是一门非常强劲的编程语言,纵向来看,向下可以直接操作系统资源,如指针操作内存,向上可以使用诸多高级语言特性,如迭代器遍历数据;横向来看,C++包含诸多编程风格:面向过程编程、基于对象编程、面向对象编程、宏编程、模板编程、元编程、并发编程等。C++程序员须得“上得了厅堂,下得了厨房”,但C++学习曲线相当陡峭,很难去界定是否入门,是否精通,“围裙菜刀上厅堂,西装革领下厨房”也是常有的事,偶尔有感:天下苦秦久矣。

Rust相对C++更加容易上手,相对C语言来说,Rust是高级语言特性的抽象,C++是高级语言特性、低级语言特性的混合,Rust更容易形成自洽的系统,而C++更像是提供了各种基础特性组件,难以在单个方向上收敛。简单书写Rust的时候,有类似使用Python的感觉,比C/C++的脱手特性丰富太多,三方库引入更加容易,C++除STL标准库,其他三方的评估与引入均不是容易的事。

在个人的开发经验里,C++模块的设计与开发,对于性能的考虑时时刻刻,具体场景具体分析,所以习惯性的“重复造轮子”(褒贬皆有)。Rust作为更高级别的抽象,设计与开发阶段并不会像C++那样有诸多细节需要思量,其在功能完善后的性能调优占比会高些。Rust能够覆盖C++在业务领域的开发,并保持大差不差的性能(通常业务领域的性能瓶颈在于业务设计),但对于库、内核等性能吃紧,甚至恨不得要手写汇编的领域,Rust目测会无能为力。

以往C++的开发过程中,个人总希望能从项目中抽象出通用的库,并在C++语言中抽象出与C++无缝衔接的类似DSL的编程语言集。尤其是接触到mlir后,构建语法糖与C++混合编码,在高级ir层独立优化,低级ir层归一优化成为自己的一种设想。Rust虽然不是无缝衔接C++,但终究是一种成功的抽象,值得学习。

Rust语言的特点[1]

  • 高性能 - Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

Rust静态编译型的语言,相对其他虚拟机系的语言有着天然的性能优势,当然想要实现运行时特性也不会太轻松。相对C/C++语言,抽象、封装多数是带有开销的,开发效率与运行效率很难做到同时提升,从这个角度讲Rust必然没有C/C++性能优。但Rust的高级语言特性,可以让编译器在此背景下做更多的优化,而不像C/C++在很多底层场景下难以识别优化点,或执行保持功能的激进优化。

  • 可靠性 - Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

Rust高级语言特性的抽象与封装,降低了特殊场景的量,使得其检查能力比C/C++的静态检查工具更为强劲。

  • 生产力 - Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

有两点相对C/C++极具优势:

  1. Rust的包管理和构建工具降低了工程构建的难度。
  2. 基于其类型系统的编译检查,比C/C++的编译告警和静态检查工具更为高效。

参考资料

[1] Rust教程。https://www.runoob.com/rust/rust-tutorial.html