00-Rust前言

        问:为什么要近期想学习Rust?

        答: Rust出来也是有一段时间了,从Microsoft吵着要重构他们的C++"祖传代码"开始,Rust就披着“高效,安全”的头衔。而自己决定要学习Rust,是因为近期发现:与自己相关工作岗位的部分代码也在悄然的发现变化。

        Google在java端用kotlin改写原有java代码,这个也没有什么意外,毕竟kotlin是Google的亲儿子。但是,最近发现Google也在修改native层的代码了.....

        一图胜千言,Google已经在着手用Rust来替待C++相关实现。作为靠这个干饭的,不能砸了自己饭碗....Rust必须要学起来!


        Rust 编程语言从根本上讲是一种增强能力的语言:无论你现在正在编写哪种代码,Rust 都能让你走得更远,在比以前更广泛的领域中自信地编程。

        例如,"系统级 "工作涉及内存管理、数据表示和并发的底层细节。传统上,这一编程领域被视为神秘莫测,只有少数经过多年学习才能避开其恶名昭彰的陷阱的人才能涉足。即使是那些实践者,也要小心谨慎,以防他们的代码被利用、崩溃或损坏。

        Rust 打破了这些障碍,消除了旧有的陷阱,并提供了一套友好、完善的工具,帮助你一路前行。需要 "深入 "底层控制的程序员可以使用 Rust 实现这一目标,而不必承担崩溃或安全漏洞的传统风险,也不必学习善变工具链的细节。更妙的是,Rust 语言的设计会引导你自然而然地编写出可靠的代码,并提高速度和内存使用效率。

        已经在使用底层代码的程序员可以使用 Rust 来提升他们的雄心壮志。例如,在 Rust 中引入并行性是一种风险相对较低的操作:编译器会帮你抓住经典错误。你可以在代码中进行更激进的优化。它的表现力和人体工程学足以让 CLI 应用程序、Web 服务器和许多其他类型的代码编写得非常愉快:你将在本书后面的章节中找到这两方面的简单示例。

        使用 Rust 可以培养从一个领域转移到另一个领域的技能:你可以通过编写网络应用程序来学习 Rust,然后将这些技能用于 Raspberry Pi。

        事实证明,Rust 是一种高效的工具,可用于由具备不同系统编程知识水平的开发人员组成的大型团队之间的协作。底层代码容易出现各种微妙的错误,而在大多数其他语言中,只有经验丰富的开发人员通过大量的测试和仔细的代码审查才能发现这些错误。在 Rust 中,编译器扮演着看门人的角色,拒绝编译存在这些难以捉摸的错误(包括并发错误)的代码。通过与编译器并肩作战,团队可以将时间集中在程序逻辑上,而不是追逐错误。

        Rust 是专为那些渴望语言的速度和稳定性的人设计的。所谓速度,既指 Rust 代码的运行速度,也指 Rust 让你编写程序的速度。Rust 编译器的检查通过功能添加和重构来确保稳定性。与之形成鲜明对比的是,在没有这些检查的语言中,遗留代码非常脆弱,开发人员往往不敢修改。通过努力实现零成本抽象,即:高层特性编译成低层代码的速度与手动编写的代码一样快,Rust 致力于让安全代码也成为快速代码

        Rust 还为系统编程领域带来了现代开发人员工具:

  1. Cargo 是随附的依赖关系管理器和构建工具,它能让添加、编译和管理依赖关系变得简单,并在整个 Rust 生态系统中保持一致。
  2. Rustfmt 格式化工具可确保不同开发人员的编码风格保持一致。
  3. Rust 语言服务器支持集成开发环境 (IDE) 集成,可实现代码自动补全和内联错误信息。

附: 公司和 C++ 开发人员如何向 Rust 过渡

        随着软件开发的不断发展,人们开始寻求更安全、更高效的编程语言,这促使许多人开始考虑成熟的 C++ 之外的其他编程语言。Rust 注重内存安全、零成本抽象和并发性,已成为一种引人注目的选择。无论您是 C++ 开发人员,还是正在寻找更安全编程语言的公司,Rust 编程语言都能让您的技术达到新的高度。

        在本指南中,我们将深入探讨 C++ 和 Rust 为何成为业界流行的主流,并比较它们的特点和优势。然后,我们将探讨希望学习 Rust 的 C++ 开发人员的最佳实践,并探讨希望转用 Rust 的公司应遵循的关键提示。

C++ 与 Rust:功能比较

        C++ 和 Rust 是使用最广泛的两种编程语言,虽然新兴的 Rust 正在软件开发领域掀起波澜,但 C++ 绝对经受住了时间的考验。

        分析公司 SlashData 的研究显示,Rust 是目前增长最快的语言,开发人员和公司必须考虑以下问题:为什么 Rust 如此受欢迎?C++ 开发人员如何适应这种不断变化的形势?

        让我们深入探讨一下 C++ 和 Rust 之间的比较,以便更清楚地了解 Rust 为什么会成为许多人的首选:

① 内存安全

        Rust 最根本的优势之一在于其内置的内存安全。由于 Rust 能够执行严格的所有权和借用规则,该语言成功地消除了常见的内存相关故障。Rust 以不易出现内存错误而著称,这也是许多人选择使用 Rust 的重要原因。另一方面,C++ 采用手动内存管理,因此更容易出现缓冲区溢出和空指针引用等与内存相关的错误。

② 语法

        Rust 拥有简洁而现代的语法,并拥有多种现代语言特性,包括模式匹配和类型推断。该语言拥有一个富有表现力的类型系统,能够在编译时识别错误。相比之下,C++ 以其复杂的语法而闻名,这也是一些人不愿意学习它的原因。不过,C++ 拥有大量可以生成简洁代码的语言特性,如:模板和操作符重载

③ 生态系统

        鉴于 C++ 的历史比 Rust 长得多,它拥有更大的生态系统也就不足为奇了。C++ 语言拥有种类繁多的库和框架,所有这些库和框架都得到了 C++ 开发人员庞大社区的精心维护和定期测试。虽然 Rust 生态系统目前还没有 C++ 那么庞大,但它正在迅速发展,可供 Rust 开发人员使用的库和工具数量也在不断增加。

④ 性能

        Rust 和 C++ 都能提供高性能的代码,它们的速度也广受赞誉。C++ 的速度可以超越 Python 和 Java 等其他语言,因为用 C++ 编写的程序可以直接编译成机器代码,在运行时无需任何翻译时间。虽然 C++ 的速度很快,但熟练的 Rust 开发人员通常能比 C++ 开发人员更快地编写代码,这主要归功于该语言的错误预防系统

⑤ 并发性

        Rust 的并发功能采用所有权模型,可防止数据竞争和引用空指针等并发错误,因此既安全又易于使用。C++ 拥有令人印象深刻的并发功能,可以说比 Rust 的并发功能更强大、用途更广泛,但它更容易出现并发错误,而且调试起来也很困难。归根结底,如果您更喜欢使用简单、安全的并发系统,那么 Rust 是更有利的选择。

C++ 开发人员学习 Rust 的最佳实践

        您是一名 C++ 开发人员,现在决定过渡到 Rust :当然,您并不孤单。事实上,根据 2021 年的 Rust 调查,81% 的受访者声称每周都使用 Rust,而上一年调查的这一比例仅为 72%。这些数据表明,Rust 的使用率正在不断增长,而且鉴于这种语言预计在未来会变得更加流行,现在正是开发人员通过学习这种令人兴奋且前景广阔的语言来更新自己技能的大好时机。

        然而,要熟练掌握 Rust 绝非易事,尤其是对于尚未熟悉 Rust 独特功能的 C++ 开发人员来说。以下是 C++ 开发人员在初次学习 Rust 时可能遇到的一些挑战:

        Ⅰ. 陡峭的学习曲线;尽管 Rust 具有一系列有益的特性,但它也以学习曲线陡峭而著称。习惯了 C++ 自由性的开发人员可能会发现很难适应 Rust 的函数式编程概念

        Ⅱ. 没有那么多的库和框架;鉴于 Rust 是一种相对较新的语言,它没有像更传统的语言那样拥有那么多的库和框架,这是可以理解的。不过,习惯于利用各种资源的 C++ 开发人员可能会认为 Rust 的生态系统有限是一个痛点。

        Ⅲ. 所有权和借用;Rust 拥有多种与众不同的特性,其中之一就是它的所有权和借用模型。由于 C++ 开发人员习惯于手动管理内存而不是依赖内存安全,他们可能会发现很难掌握 Rust 的所有权系统。

        然这些常见的挑战一开始可能看起来难以驾驭,但如果你愿意投入时间和精力,学习 Rust 可能会是一次有趣而丰富的经历。学习者遇到磨合期的问题是很正常的,但只要记住 Rust 提供的各种优势,他们就会有信心,过渡到 Rust 的决定将使他们的开发事业受益匪浅并焕发新的活力

        让我们来探讨 C++ 开发人员应遵循的关键最佳实践,以增强他们的 Rust 学习体验:

① 识别 C++ 和 Rust 的相似之处

        找出 C++ 和 Rust 之间的相似之处,可以让学习曲线变得更容易一些。正如我们前面所讨论的,这两种语言之间有很多相似之处,包括语法相似、没有垃圾回收和运行时。从这些方面开始学习,可能会让 C++ 和 Rust 之间的过渡更加顺畅。

② 掌握基础知识

        在深入研究依赖树、借用检查器和生命周期等复杂的 Rust 主题之前,了解该语言的基本功能至关重要。你应该把初始学习的重点放在相对简单的概念上,如 Rust 的语法、数据类型、数字和所有权模型。

        如果你觉得在理解语言基本原理方面需要帮助,请务必在 Rust subreddit 等论坛上联系 Rust 日益壮大的社区成员。

③ 迎接挑战

        虽然学习一门全新的编程语言有时会令人沮丧,但重要的是要接受挑战并享受学习过程。请记住,Rust 越练越简单,一段时间后,你就会开始乐于发现更多有关 Rust 的概念。你还应该感到动力十足,因为学习 Rust 可能会帮助你在开发生涯中取得进步。

④ 充分利用现有资源

        虽然 Rust 缺少像 C++ 那样的大量库和框架,但它仍然拥有大量有用的资源,可以增强你的 Rust 教育。Rust 官方网站上有各种教程和文档,旨在增强你的语言知识,而其活跃的社区论坛则是向经验丰富的 Rust 开发人员寻求帮助的绝佳场所。另一个重要资源是Rust Book,这是一本涵盖初级和高级概念的综合资源,其中的示例和练习可以帮助你进行实践。

⑤ 经常练习编写代码

        坚持练习是学习任何知识的关键,尤其是像 Rust 这样的计算机编程语言。无论是绝对的初学者还是接近流利的程序员,都应该投入大量时间练习编写代码。您可以从简单的小项目开始,然后逐步提高到更复杂的项目。Rust by Practice 是一个测试 Rust 编程技能的好地方,这个平台允许学习者通过练习和项目来锻炼自己的 Rust 能力。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射

目录 图形管线 纹理映射 图形管线 给我一个三维模型,给我一个光照条件,我就能够得出渲染的结果,这些东西合起来就是Graphics Pipeline,图形管线,闫神愿称之为实时渲染管线,那下面这个流程图就是这个渲染…

Ps:智能对象

智能对象 Smart Objects可以理解为一个存放图像数据的容器,容器中可以包含像素图像、矢量图像、滤镜效果等。 在 Photoshop 中,将图层转换为智能对象之后,则可以以非破坏性的方式工作,操作的灵活性也更强。 请参阅: 《…

YOLOv8改进 | 进阶实战篇 | 利用YOLOv8进行视频划定区域目标统计计数

一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用YOLOv8现有的一些功能进行一些实战, 让我们不仅会改进YOLOv8,也能够利用YOLOv8去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是pyside2做一些小的界面给大家使用。 在开始之前给大家推…

Visual Studio中,每次新建文件都会自动出现提前设置好的头文件配置方法

主要是修改 newcfile.cpp 文件,可以用everything或者Listary等软件直接搜索文件,直接跳到第4步 1.图标右击——>打开文件所在位置 2.到达IDE地址后在当前目录下找VC文件夹 3.再找 VCProjectItems 文件夹——newcfile.cpp文件 4.用记事本打开&#xff…

Bit.Store 加密卡集成主流 BRC20 ,助力 BTC 生态 Token 的流动性与消费

“Bit.Store 首创性的将包括 ORDI、SATS、以及 RATS 在内的主流 BRC20 资产集成到其加密卡支付中,通过以其推出的加密银行卡为媒介,助力 BTC 生态 Token 的流动性与消费。” 比特币网络在被设计之初,就是以一种去中心化、点对点的现金系统为定…

深耕文档型数据库12载,SequoiaDB再开源

1月15日,巨杉数据库举行SequoiaDB新特性及开源项目发布活动。本次活动回顾了巨杉数据库深耕JSON文档型数据库12年的发展历程与技术演进,全面解读了SequoiaDB包括在高可用、安全、实时、易用性四个方向的技术特性,宣布了2024年面向技术社区的开…

【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

前言 大家好,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持ResNet32、ResNet101和PP…

Java基础面试题(五)

Java基础面试题(五) 文章目录 Java基础面试题(五)标识符和关键字的区别是什么?Java 语言关键字有哪些?自增自减运算符移位运算符continue、break 和 return 的区别是什么? 单行注释:…

Qt拖拽事件简单实现

1.相关说明 重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数)&#xff0c;可以将本地图片拖拽到label标签中 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QDragEnterEvent>…

zookeeper window 安装

下载 Apache ZooKeeper 解压Zookeeper安装包到指定目录&#xff0c;注意目录不要有空格。 备份zoo_sample.cfg并改名zoo.cfg 注意&#xff1a;此处的路径一定要使用双斜杠" \\ " D:\\apache-zookeeper-3.8.3-bin\\data 新建环境变量&#xff1a;ZOOKEEPER_HOME D…

禅道下载安装

文章目录 一、禅道官网二、安装三、管理员操作四、产品操作五、项目经理操作六、测试操作七、泳道图 一、禅道官网 官网&#xff1a;http://www.zentao.net/ 自己用的话是&#xff1a;开源版 然后一直往下滑&#xff0c;找到windows,此处是最新版本 二、安装 本作者就用以前…

go语言(十)---- 面向对象封装

面向对象的封装 package mainimport "fmt"type Hero struct {Name stringAd intLevel int }func (this Hero) Show(){fmt.Println("Name ", this.Name)fmt.Println("Ad ", this.Ad)fmt.Println("Level ", this.Level)}func (thi…