Rust vs C++ 深度比较

Rust由于其强大的安全性受到大量关注,被认为C++在系统编程领域最强大的挑战者。本文从语言、框架等方面比较了两者的优缺点。原文: Rust vs C++: An in-depth language comparison

alt

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

这两种语言都在系统开发领域竞争,与Python等对初学者更友好的语言相比,两者都有陡峭的学习曲线。

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

概览:

  • 什么是Rust?
  • 什么是C++?
  • 技术比较
  • 框架
  • 游戏开发
  • 总结和结论
alt
什么是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!
alt
什么是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++主要是标准库[1],这是类和函数的集合,提供了几种通用容器、用于操作容器的函数、通用字符串和流(包括交互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

参考资料

[1]

C++标准库: https://www.educative.io/blog/so-you-know-c-now-its-time-to-learn-the-standard-library?eid=5082902844932096

- END -

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144384.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

K8sGPT,基于 AI 的云原生终极工具

随着人工智能和机器学习的兴起&#xff0c;企业和组织越来越多地寻找创新方法来利用这些技术来获得竞争优势。 该领域最强大的工具之一便是 K8sGPT&#xff0c;即基于 Kubernetes 的 GPT&#xff0c;它将 Kubernetes 编排的优势与 GPT 模型的高级自然语言处理能力结合在一起。 …

不同走向地下管线的地质雷达响应特征分析

不同走向地下管线的地质雷达响应特征分析 前言 以PVC管线为例&#xff0c;建立不同走向&#xff08;水平倾斜、垂直倾斜、水平相邻&#xff09;的三维管线地质模型&#xff0c;进行三维地质雷达数据模拟&#xff0c;分析不同走向地下管线的地质雷达响应特征。 文章目录 不同…

安卓手机使用油猴脚本教程

下载支持油猴脚本的浏览器 请现在应用商店下载 x浏览器 &#xff0c;如果自己手机应用商店没有的话&#xff0c;可以在官网下载安装包&#xff0c;然后手动安装。 x浏览器官网 应用图标&#xff1a; 导入油猴脚本 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1…

MIPI协议介绍-CPHY

MIPI协议概述 MIPI(Mobile Industry Processor Interface): 是MIPI联盟发起为移动应用处理器制定的开放标准.MIPI接口协议层主要包括CSI和DSI两种,其中CSI主要用于图像输出&#xff0c;如图像传感器等&#xff1b; DSI主要用于图像输入&#xff0c;如屏幕显示器等.对于camera而…

wps及word通配匹配与正则匹配之异同

前言 今天在chatgpt上找找有什么比赛可以参加。下面是它给我的部分答案&#xff0c;我想将其制成文档裱起来&#xff0c;并突出比赛名方便日后查找。 这时理所当然地想到了查找替换功能&#xff0c;但是当我启用时却发现正则匹配居然没有了&#xff0c;现在只有通配匹配了。 …

定义豪车新理念 远航汽车亮相2023中国(天津)国际汽车展览会

近年来&#xff0c;随着汽车行业竞争持续加剧&#xff0c;老品牌面临积极转型&#xff0c;新势力则经验不足、实力欠佳&#xff0c;到底是难抵市场的风云变幻。在此背景下&#xff0c;有着“老品牌 新势力”双重基因的远航汽车可谓底气十足。作为大运集团携手博世、华为、阿里斑…

ios证书类型及其作用说明

ios证书类型及其作用说明 很多刚开始接触iOS证书的开发者可能不是很了解iOS证书的类型功能和概念。下面对iOS证书的几个方面进行介绍。 apple开发账号分类&#xff1a; 免费账号&#xff1a; 无需支付费用给apple&#xff0c;使用个人信息注册的账号 可以开发测试安装&…

OpenHarmony应用核心技术理念与需求机遇简析

一、核心技术理念 图片来源&#xff1a;OpenHarmony官方网站 二、需求机遇简析 新的万物互联智能世界代表着新规则、新赛道、新切入点、新财富机会;各WEB网站、客户端( 苹果APP、安卓APK)、微信小程序等上的组织、企业、商户等;OpenHarmony既是一次机遇、同时又是一次大的挑战&…

不要二(牛客)

目录 一、题目 二、代码 一、题目 不要二__牛客网 二、代码 采用贪心算法的思想来做&#xff0c;开始全置为1&#xff0c;1代表放入蛋糕。 从左向右从上到下遍历棋盘开始依此放蛋糕&#xff0c;然后将该块蛋糕上下左右欧几里得距离为2的点全部标记为0&#xff0c;表示该点不…

【网络协议】Http-下

HTTP常见Header Content-Type: 数据类型(text/html等) Content-Length: Body的长度 Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上; User-Agent: 声明用户的操作系统和浏览器版本信息; referer: 当前页面是从哪个页面跳转过来的; location: 搭配3xx状态…

windows:批处理bat入门

文章目录 什么是BAT常用命令与语法help与/?titlecolormodeechopausecallremset/a/p gotostartifif errorlevel for普通用法for /l 用法for /d用法for /r用法for /f用法in (file)delims和tokensskipeolusebackq 变量扩展变量延迟 setlocalshiftdirrd&#xff08;删除文件夹&…

windows 安装Linux子系统 Ubuntu 并配置python3

环境说明&#xff1a; Windows 11 Ubuntu 20.04.6 安装步骤以及问题&#xff1a; 1、开启Windows Subsystem for Linux dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 2、开启虚拟机特性 dism.exe /online /enabl…

强强联合,波卡生态正成为物联网赛道关键入口

自 5 月 23 日&#xff0c;波卡平行链之一 Peaq 宣布将特斯拉和去中心化汽车共享应用引入 Polkadot 生态系统后&#xff0c;其以打造 Polkadot 上 Web3 汽车共享的未来为目标&#xff0c;开启物联网发展的新时代&#xff1b;而在近期&#xff0c;Peaq 又表示将在 9 月前往德国慕…

利用bat脚本 一键将文件中的png图片转为 jpg图片

第一步&#xff1a;创建一个.txt文件 第二步&#xff1a;在.txt文件中写入ren *.png *.jpg 第三步&#xff1a;右键重命名 将后缀从.txt改为.bat 第四步&#xff1a;将该文件放到要修改的图片的文件夹内&#xff0c;然后双击就可以啦!

工时管理系统,一款灵活性强、轻量级工时记录和管理工具

一、开源项目简介 无鱼工时管理系统&#xff0c;是一款轻量级工时记录和管理工具&#xff0c;包括项目管理&#xff0c;工时上报&#xff0c;工时日报&#xff0c;工时统计等功能。 无鱼工时管理系统可通过员工工时上报的方式&#xff0c;来记录项目所花费的工时&#xff0c;…

人工智能AI 全栈体系(八)

第一章 神经网络是如何实现的 神经网络只是提供了一个一般性方法&#xff0c;具体用它求解什么问题&#xff0c;根据问题的特点&#xff0c;定义好输入输出以及损失函数就可以了。 在介绍神经网络语言模型结构的时候&#xff0c;每个词 w 都对应一个长度为 m 的向量 C(w)&…

计算机毕业设计 基于SSM的高校毕业论文管理系统小程序的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb;…

chrome扩展程序开发请求接口报错

解决HTTPS站点请求HTTP接口服务后报错&#xff1a;the content must be served over HTTPS Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint <URL>. This content should also be served over HTTPS…

【详细图文】Windows下安装RustRover和配置Rust环境

前言 Rust已经火了挺长时间了&#xff0c;连微软的Windows内核都用它来重新改写&#xff0c;可想而知其厉害之处。之前有看过Rust的教程&#xff0c;但一直没有去尝试。今天看到JetBrains出了Rust 专用的IDE&#xff1a;RustRover。作为JetBrains的粉丝&#xff0c;决定进行一…

JSON 串和 Java 对象的相互转换

JSON 串和 Java 对象的相互转换 以 json 格式的数据进行前后端交互 前端发送请求时&#xff0c;如果是复杂的数据就会以 json 提交给后端&#xff1b; 而后端如果需要响应一些复杂的数据时&#xff0c;也需要以 json 格式将数据响应回给浏览器 为达到以上目的就需要重点学习…