乐趣区

关于程序员:Rust-vs-C-深度比较

Rust 因为其弱小的安全性受到大量关注,被认为 C ++ 在零碎编程畛域最弱小的挑战者。本文从语言、框架等方面比拟了两者的优缺点。原文: Rust vs C++: An in-depth language comparison

Rust 和 C ++ 的比拟是开发人员最近的热门话题,两者之间有许多相似之处,许多开发人员想晓得哪一种更好(特地是对于零碎编程)。

这两种语言都在零碎开发畛域竞争,与 Python 等对初学者更敌对的语言相比,两者都有平缓的学习曲线。

在抉择某种编程语言时,应该思考对于特定用例的效率和生产力。本指南将深入研究 Rust 和 C ++,比拟两种语言的用处和优缺点。

概览:

  • 什么是 Rust?
  • 什么是 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!

什么是 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*

本文由 mdnice 多平台公布

退出移动版