00-Rust前言

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

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

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

源码对比: Android 12 VS Android 14

        一图胜千言! Google已经在着手用Rust来替代C/C++的相关实现。同时,听说Linux内核也在用Rust来替代C/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 能力。


下一篇: 01-开始Rust之旅

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

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

相关文章

linux驱动(八):block,net

本文主要探讨210的block驱动和net驱动。 block 随机存取设备且读写是按块进行,缓冲区用于暂存数据,达条件后一次性写入设备或读到缓冲区 块设备与字符设备:同一设备支持块和字符访问策略,块设备驱动层支持缓冲区,字符设备驱动层没有缓冲 块设备单位:扇…

【iOS】UICollectionView使用

使用UITableView作为表格来展示数据完全没有问题,但仍有许多局限性,对于一些更加复杂的布局样式,就有些力不从心了 比如,UITableView只允许表格每一行只能显示一个cell,而不能在一行中显示多个cell,对于这…

Java设计模式-原型模式(3)

大家好,我是馆长!从今天开始馆长开始对java设计模式的创建型模式中的单例模式、原型模式、工厂方法、抽象工厂、建造者的原型模式进行讲解和说明。 原型模式(Prototype Pattern) 定义 原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对…

【Android】app中阻塞的looper为什么可以响应touch事件

这里,我们考虑一个问题,Android中的应用是一个looper线程,没有任务时就阻塞着,其他线程通过handler调用等方式向主线程looper发送任务, 如果点击应用上的按钮,应用是怎么及时响应的呢, 是专门启…

阿里云国外服务器多少钱一个月?24元/月

阿里云国外服务器优惠活动「全球云服务器精选特惠」,国外服务器租用价格24元一个月起,免备案适合搭建网站,部署独立站等业务场景,阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动: 全球云服务器精选特惠…

记一次攻防实战全流程

如果我嚷几声,能叫醒那几个人,你就绝不能说他没有毁坏这铁屋的希望 DMZ区 1、信息收集 首先进行信息收集,使用Nmap对其进行扫描 端口服务:21、22、80、111、888、3306、8888,可以看到目标存在ftp、ssh、http等端口…

idea就改完内存启动不了怎么办

有时候在idea中修改完内存,再重启发现无法启动了,这个一般是设置的不太合理 导致的,接下来我来讲一下在idea之外设置运行内存的方式,以设置合理的运存来正常运行idea: 一、WinE 打开文件夹,进入c盘 二、按…

Python - 异常处理

前言 运行中的程序不知道怎么搞的报错了,恰好没有处理这个报错,程序也随之终止了,有没有什么办法能够让程序报错也能够不崩掉继续运行呢?答案是有的,就是通过异常处理。 什么是异常 异常顾名思义就是不正常&#xf…

记一次多平台免杀PHP木马的制作过程

注意:本文转载自本作者稀土掘金博客 博客地址: 御坂19008号 的个人主页 - 动态 - 掘金 文章目录 前言声明绕过情况使用方法运行环境绕过点介绍技术原理讲解变量传值覆盖模块代码执行阻断模块InazumaPuzzle程序锁定器PerlinNoise危险函数生成与执行类构造…

基于springboot+vue考编论坛

摘要 近年来,随着互联网的迅猛发展,编程论坛成为程序员们交流学术、分享经验的重要平台之一。为了满足广大程序员的需求,本文基于Spring Boot和Vue框架,设计并实现了一个功能强大的编程论坛。首先,我们选择Spring Boot…

Laya3.0 相机使用

摄像机,是3D场景里边最经常使用的对象了。 官方文档:点击这里学习 1.投影 Projection 透视: 模拟人眼的视觉效果,近大远小。模拟物理世界的规律,将眼睛或相机抽象成一个点,此时视锥体内的物体投影到视平…

ChatGPT时代对大数据应用的展望

前言: 2022年底,科技圈有个爆炸性新闻,ChatGPT的诞生,引发了世界范围内的震惊;人工智能在与人交流上有了划时代的技术突破,可以和人深入的理解交流,让许多公司和领域对这项技术有了更多遐想。对…

开源项目盘点-学习类

1,freeCodeCamp 地址:https://github.com/freeCodeCamp/freeCodeCamp 描述:一个程序员学习网站,里面有全栈开发、机器学习的相关知识,是完全免费的,该网站有上千道编码挑战题来帮助你来练习你的技能。 提…

AI对比:ChatGPT与文心一言的异同与未来

文章目录 📑前言一、ChatGPT和文心一言概述1.1 ChatGPT1.2 文心一言 二、ChatGPT和文心一言比较2.1 训练数据与知识储备2.2 语义理解与生成能力2.2 应用场景与商业化探索 三、未来展望3.1 模型规模与参数数量不断增加3.2 多模态交互成为主流3.3 知识图谱与大模型的结…

大数据平台的硬件规划、网络调优、架构设计、节点规划

1.大数据平台硬件选型 要对Hadoop大数据平台进行硬件选型,首先需要了解Hadoop的运行架构以及每个角色的功能。在一个典型的Hadoop架构中,通常有5个角色,分别是NameNode、Standby NameNode、ResourceManager、NodeManager、DataNode以及外围机。 其中 NameNode 负责协调集群…

【51单片机】

0、前言 参考&#xff1a;普中 51 单片机开发攻略 第14章 1、硬件 ULN2003 芯片 2、软件 mian.c #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit DC_MotorP1^0;void DC_Mo…

Ubuntu 使用 git 能够 clone 但不能 push 的参考解决方法

写在前面 自己的测试环境&#xff1a;Ubuntu20.04 下面的操作都是和 git 有关&#xff0c;所以针对不同的操作系统&#xff08;比如 Windows&#xff09;也是一样的。 一、问题描述 在此之前使用git执行 git push origin master 的命令时&#xff0c;能够正常执行&#xff0…

【计算机网络】【Python】【练习题】【新加坡南洋理工大学】【Computer Control Network】

一、题目描述 该题目描述一个网络中数据包交换&#xff08;Packet Switching&#xff09;的例子。题目如下&#xff1a; 二、问题解答&#xff08;使用Python&#xff09; Q1&#xff1a;如何求出0.0004这个值&#xff1f; &#xff08;1&#xff09;、公式推导过程&#xf…

数据库防水坝是什么?有什么作用?有哪些优势?

数据库是公司重要IT资产&#xff0c;是公司数据存储、数据整合、数据备份等重要载体。所以保障数据库安全至关重要。目前保障数据库安全产品较多&#xff0c;例如堡垒机、防火墙、数据库防水坝等等。今天我们就先来简单了解一下数据库防水坝是什么&#xff1f;有什么作用&#…

CMU15-445-Spring-2023-分布式DBMS初探(lec21-24)

Lecture #21_ Introduction to Distributed Databases Distributed DBMSs 分布式 DBMS 将单个逻辑数据库划分为多个物理资源。应用程序&#xff08;通常&#xff09;并不知道数据被分割在不同的硬件上。系统依靠单节点 DBMS 的技术和算法来支持分布式环境中的事务处理和查询执…