多起村干部被灭门案,需要反思了!

高铁打人者身份被曝光,人脉资源碾压普通人!却遇到了硬茬

OPPO芯片业务解散不一定是坏事

明确了!任期届满后,他不再寻求连任!

去泰国看了一场“成人秀”,画面尴尬到让人窒息.....

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

从C++到Rust | 第135期

lyu无忆 青衣极客 2023-02-08

作为一个使用 C++ 多年的开发者,说实话,我还挺喜欢 C++ 的,虽然很多人对它有所批评。比如,有些人吐槽 C++ 语法复杂,也有一些人抱怨 C++ 不安全的内存操作。 但对于项目规模不是特别大的情况来说,这些问题并不十分严重。我们可以选择尽量不用复杂语法,尽量使用智能指针代替原始指针。说到底 C++ 是一个工具,就像一本字典,确实记录了一些偏僻字,但用还是不用的选择还是握在使用者的手里。

C++被吐槽的缺点

让绝大部分开发者都不满并且难以解决的是,同样的代码放一段时间连编译都成问题;而且在不同项目中,共用代码常常是非常麻烦的。 这都指向同一个问题,即缺乏一个好用的包管理机制。只是很难找到性能与 C++ 匹敌的语言,因此不得不忍受这些问题。

我也在寻找一种能够替代 C++ 的语言。有两个最主要的要求,一是运行时性能与 C++ 基本相当,二是配备好用的包管理机制。 最近几年,看到 Rust 语言开发的项目崭露头角,据说其目标就是解决 C++ 存在的问题,在一定程度上抢夺 C++ 的市场份额。特别是当了解到 Rust 有一个很棒的包管理工具 Cargo,就决定学习这门新兴语言。 《Rust权威指南》是一本广受好评的入门书籍,我也是通过阅读这本书来学习Rust语言的。

Rust权威指南

Rust 官网回答 “为什么选择Rust?” 这个问题时,使用了三个词描述特点: 高性能、可靠性、生产力。

为什么选择Rust

高性能指的是运行速度和内存利用率,主要针对的是带有垃圾回收机制的语言,比如 Python、Golang、Java等等。 垃圾回收会导致内存释放不够及时,同时,每次清理内存时会锁定程序,造成卡顿。Rust没有垃圾回收,也就自然没有这些问题。但为了管理内存引入的所有权和生命周期,也着实不是个讨喜的特性。

可靠性说的是Rust编译器保证内存安全和线程安全,也就是在编译阶段消除各种错误。 这也带来一个问题,新手写的大段程序可能不太容易编译通过。在众多关于Rust的评论中,学习曲线陡峭大概是最常被提起的。甚至有些Rust程序员还以此为荣。就好像是一个男人娶老婆,本来是要找勤俭持家的贤惠女人。根据经验发现,漂亮的女人大多不满足要求,就以丑作为选择的标准(比如东汉梁鸿)。当然,这并不是怪编译器太严格,而是语法本身太复杂。

生产力用于表明Rust开发工具支持开发流程的各个环节,特别是包管理和工程构建。 我感受最深的有两点,一是 Cargo 包管理工具的简单易用和强大,二是编译器报错的位置和信息提示非常准确。与高性能和可靠性不同,生产力特征几乎全是优点。出色的文档、一流的包管理和构建工具、多编辑器支持、代码自动格式化等等,不得不说,像Rust这样的才能算是现代语言, C++ 还是有些老旧。

要不要在自己的项目中使用 Rust ? 这是一个令人纠结的问题,毕竟 Rust 的优缺点都非常明显。综合网上的建议如下,创业公司或者小团队尽量不要用Rust,开发操作系统可以选择 Rust。 官方也给出了Rust的应用领域,只是如果要在实际项目中使用的话,还得慎重考虑。

Rust应用

话说回来,C++ 真的就没救了吗?还是希望官方多干点正事,比如提供一个统一的、好用的、强大的包管理机制,别整天搞那些不着调的新特性。或者我们可以自己动手开发一个,这就不知道猴年马月能用了。


文章有问题?点此查看未经处理的缓存