Rust因为其强壮的安全性受到很多重视,被以为C++在体系编程范畴最强壮的挑战者。本文从言语、结构等方面比较了两者的优缺点。原文: Rust vs C++: An in-depth language comparison

Rust vs C++ 深度比较

Rust和C++的比较是开发人员最近的热门话题,两者之间有许多相似之处,许多开发人员想知道哪一种更好(特别是关于体系编程)。

这两种言语都在体系开发范畴竞赛,与Python等对初学者更友爱的言语相比,两者都有陡峭的学习曲线。

在挑选某种编程言语时,应该考虑关于特定用例的功率和生产力。本指南将深入研究Rust和C++,比较两种言语的用处和优缺点。

概览:

  • 什么是Rust?
  • 什么是C++?
  • 技能比较
  • 结构
  • 游戏开发
  • 总结和定论

Rust vs C++ 深度比较

什么是Rust?

Rust是Mozilla开发的一种多范式编程言语,首要重视功用和安全性,以其高档的安全并发才能而出名,语法类似于C++,但供给了更快的速度和内存安全性(不运用垃圾搜集器)。

Rust开端是为Mozilla Firefox浏览器开发的,但其功率及优势招引了许多C++开发人员,他们开端转而运用Rust(通常用于游戏开发)。

Rust在内存办理方面独具创新。例如,不允许空指针或野指针。因为其功用,Rust通常被用于构建设备驱动程序、嵌入式体系、游戏和操作体系,如BlogOS、Redox、RustOS、Rux、Tock。

Rust代码以其在测验前调试代码的速度和才能而出名。例如,Rust能够协助咱们开发在运行时查看代码过错的程序。

Rust的显着特征
  • 内存办理
  • 内存安全
  • 所有权体系
  • 多范式
  • 速度和功用

Rust的Hello World:

fn main() {
println!("Hello World!");
}
-->
Hello World!

Rust vs C++ 深度比较

什么是C++?

C++是一种高档通用编译言语,现已存在了很长时刻。因为其复杂的语法,C++代码通常用于需求高速、并发性的程序。C++以协助开发者真正挨近操作硬件而出名。

C++是C言语的扩展,因而承继了许多相似之处,但更倾向于嵌入式软件和大型体系。

C++以其功用、健壮性和功率而出名,供给了对体系及其内存的很多控制。C++是构建微软Windows等操作体系和电子游戏开发的首要言语,许多游戏开发结构都是用C++开发的。

C++还供给了丰富的规范库,称为规范模板库(Standard Template Library)。有了STL,从图形界面应用到桌面应用、3D图形和游戏,全部都很简单构建。

C++的显着特征
  • 面向对象
  • C++模板(STL)
  • 操作符重载
  • 承继
  • Lambda表达式

C++的Hello World:

#include <iostream>
using namespace std;
int main() {
  // your code goes here
  cout << "Hello World";
  return 0;
}
-->
Hello World

技能比较

那么,为什么要用Rust,或者为什么要用C++呢?假如两者都是高功用、开源、功用强壮的,那么哪个是更好的挑选呢?咱们深入研究一下它们的技能组成部分。

从更高的视点来看,C++具有更大的社区、更广泛的用例和更多结构,而且得到了所有软件公司的认可。另一方面,Rust在安全性、速度以及避免因为静态类型特性而导致的过错、不安全代码方面表现更好。

Rust在避免或许导致未界说行为的数据竞赛方面做得很好,而C++做不到这一点,并有或许产生漏洞。

内存安全性

大多数体系级言语都不供给自动内存办理,因为垃圾搜集等特性会降低功用。为了保持速度,C++献身了内存安全性,这是一个显着的缺点。

C++最近的更新有了一些新特性,如RAII(资源获取即初始化, Resource Acquisition is Initialization) ,以摆脱手动内存办理,但并没有处理底层的核心问题。

为了处理这一问题,Rust运用了一种所有权体系(system of ownership) ,该体系全面加强并进步了内存安全性,基本上消除了任何手动内存办理过程。Rust为内存办理过程供给了内置特性,而C++则将其留给了开发者。

指针

在计算机科学中,指针是存储内存地址的对象。换句话说,地址”指向”程序中的其他数据。智能指针是具有额定元数据和功用的数据结构。大多数高档和低级言语都有某种指针功用。

C++供给了能够像智能指针一样运用的类型std::shared_ptrstd::unique_ptr。Rust规范库中有几个智能指针,比如引证计数智能指针类型。

Rust和C++都以对象的形式很多运用智能指针(Rust中的String或C++中的std::string),并供给了许多有用的附加特性。

编译时刻

C++和Rust的完好构建时刻大致相同(取决于C++项目完成了多少个模板,模板越多越慢)。C++通常在增量编译方面做得更好。Rust的编译器以友爱著称,供给了有用的过错消息和一流的东西。

易用性

大多数一起运用Rust和C++的人都说Rust更简单运用,因为它有界说杰出的语义和避免不必要/未界说行为的才能。类似的,C++有如此多的特性,以至于要跟踪其发展很有挑战性。因为C++向开发者展示了底层作业原理,所以C程序员能够十分好的理解其功用。

结构和类库

虽然Rust比C++更年青,但都供给了优秀的结构和库,不过C++库往往更通用一些。这儿的差异在于,C++不是像Java、C#或JavaScript那样的结构驱动环境,因而这些结构并不会被广泛运用。

在Rust中,有几个供给了杰出功用、安全性和健壮性代码的结构,例如:

  • Rocket: 用于进步安全性、速度和灵活性的Rust web结构。
  • Nickel: 用于开发具有明确验证规矩、用户友爱的信息流控制体系的Rust结构。
  • Azul: 根据Rust的即时形式GUI结构,用于开发桌面应用程序。

在库方面,C++首要是规范库,这是类和函数的集合,供给了几种通用容器、用于操作容器的函数、通用字符串和流(包括交互I/O和文件I/O)以及其他言语支撑。

虚幻引擎是一个用C++编写游戏开发结构。

游戏开发

现在,C++是游戏开发的首要言语。大多数占有市场主导地位的游戏都是用C++编写的,而用C++编写的虚幻引擎(Unreal Engine)则是游戏开发的首要结构。

Rust也进入了游戏开发范畴,但并不能供给与结构相同的功用。能够用Rust开发游戏,但要在这一范畴与C++竞赛还需求一些时刻。跟着越来越多的Rust开发者构建Rust生态体系,竞赛或许会更加剧烈。

所以,假如对游戏开发感兴趣,那就持续学习C++,但也要亲近重视Rust,特别是现在Rust基金会创建了之后。

用户界面

虽然C++和Rust都不是UI开发的首选,不过UI开发仍然是比较两者的盛行范畴,他们的表现怎么呢?

C++供给了GTKmm,这是GTK+ C库的现代接口。Rust供给了Azul,就是上面说到的开源即时形式GUI结构,这一结构更新更现代,具有活跃的社区。

总结和定论

那么,哪个更好呢?两种编程言语都有各自共同的优点和缺点。

  • 就社区支撑而言,C++更好。假如需求牢靠的、受杰出支撑的、具有强壮库的言语,C++是个不错的挑选,游戏开发也应该运用C++。
  • Rust关于内存安全和并发性的支撑更好,也更简单学习和运用。假如希望代码十分安全并避免内存泄漏,那么Rust是正确的挑选。

最终,你应该挑选让你觉得舒服的言语。挑选Rust或C++都不会让项目失败,两种言语都是牢靠的、广泛运用的、公认的言语,都能够完成作业。

你好,我是俞凡,在Motorola做过研制,现在在Mavenir做技能作业,对通讯、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技能始终保持着稠密的兴趣,平时喜欢阅读、思考,信任持续学习、终身生长,欢迎一起交流学习。
微信公众号:DeepNoMind