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.mfbz.cn/a/335098.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redisson的延时队列机制简述

概述 业务中经常会遇到一些延迟执行的需求;通常想到的都是rabbitmq或者rocketmq的延迟消息; 但是系统中不一定集成了mq,但为了控制分布式下的并发,一般redis都是有集成的; redis的key过期监听那个时间不准确&#xff…

C#,实用新型加强版的整数数组

疫苗要打加强针!数组要用加强版! 三连发 加强版整数数组源代码https://mp.csdn.net/mp_blog/creation/editor/124151056 加强版实数数组源代码https://mp.csdn.net/mp_blog/creation/editor/124151110 加强版泛型数组源代码https://mp.csdn.net/mp_bl…

这才是你应该了解的Redis数据结构!

Redis,作为一种高性能的内存数据库,支持多种数据结构,从简单的字符串到复杂的哈希表。在这篇博文中,我们将深入探讨Redis的一些主要数据结构,并通过详细的例子展示它们的使用。 1. 字符串 (String) 1.1 存储和获取 R…

k8s资源介绍

Kubernetes架构图 Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序,并且其提供了零停机时间部署、自动回滚、缩放和容器的自愈(其中包括自动配置、自动重启、自动复制的高弹性基础设施,以及容器的自动缩放等)等…

模糊数学在处理激光雷达的不确定性和模糊性问题中的应用

模糊数学是一种用于处理不确定性和模糊性问题的数学工具,它可以帮助我们更好地处理激光雷达数据中的不确定性和模糊性。激光雷达是一种常用的传感器,用于测量目标物体的距离、速度和方向等信息。然而,在实际应用中,激光雷达所获取…

ITK + ANT,无法显示三维

背景:之前用ANT保存ima格式的数据,选择的是保存所有的序列 用python将dicom转为nii的格式, import nibabel as nib import torch"""不管是nii还是nii.gz都是二维的,为啥呢"""fobj nib.load("…

Linux编辑器---vim

目录 1、vim的基本概念 2正常/普通/命令模式(Normal mode) 2、1命令模式下一些命令(不用进入插入模式) 3插入模式(Insert mode) 4末行/底行模式(last line mode) 4、1底行模式下的一些命令 5、普通用户无法进行sudo提权的解决方案 6、vim配置问题 6、1配…

使用 Node 创建 Web 服务器

Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下: var http require(http); 以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口)&#x…

100天精通鸿蒙从入门到跳槽——第8天:TypeScript 知识储备:泛型

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

学好UEFI,实现从工程师到架构师的跨越

学好UEFI, 实现从工程师到架构师的跨越 2024 / 01 / 19 统一可扩展固件接口 UEFI,是由英特尔、微软等众多全球知名 IT企业共同开发、管理与推进的全新一代 BIOS 体系规范,目前作为最先进最完善的固件架构,已占据绝大部分计算机市…

基于Redisson的RAtomicLong实现全局唯一工单号生成器

最近几年,我一直从事的是运营平台业务开发。每天,我们都需要处理大量的工单配置工作。为了生成工单号,我们建立了一张专用的数据库表,用于记录和生成工单号。每次创建工单时,我们会查询这张表,根据年份字段…

梁山泊国潮风礼盒,传承经典,贺礼新春

在春节来临之际,梁山泊隆重推出新年中国红礼盒酒,为您传递新年的祝福与关爱。这款酒以其独特的魅力,为您带来美好的祝愿和愉悦的享受。中国风国潮礼盒采用中国传统红色为主色调,象征着吉祥、喜庆和繁荣。红色的背景上,…

appium连接手机进行启动失败 ,怎么办 ?检查下这几个地方 。

在使用appium做app自动化,首先需要启动appium连接到手机,然后进行后续操作。 但是往往在启动的时候就会卡住,在点击start session后就会出现报错,具体如下图 : 那么,出现如上的情况该如何解决呢 &#xff1…

(蓝桥杯每日一题)love

问题描述 马上就要到七夕情人节了,小蓝在这天想要心爱得男神表白,于是她写下了一个长度为n仅由小写字母组成的字符串。 她想要使这个字符串有 1314个 love 子序列但是马虎的小蓝却忘记了当前已经有多少个子序列为 love。 请你帮小蓝计算出当前字符串有多…

挑战杯参赛总结-时间序列预测

参赛任务: 目标:针对中国各个市区的不同年份二氧化碳排放量,预测未来年份的二氧化碳排放量。 不同与之前我学习过的波士顿房价预测机器学习-波士顿房价预测-CSDN博客 房价预测是通过学习与房价有关的很多特征,训练出一个模型来预…

RabbitMQ-生产者可靠性

一、生产者重连 1、概念 由于网络波动导致客户端无法连接上MQ,这是可以开启MQ的失败后重连机制。 注意: 是连接失败的重试,而不是消息发送失败后的重试。 2、开启配置 spring:rabbitmq:template:retry:enabled: true # 是否启用重试机制ma…

[python语言]数据类型

目录 知识结构​编辑 复数类型 整数类型、浮点数类型 1、整型 2、浮点型 字符与字符串 1、转义字符 2、字符串的截取 3、字符串的拼接级连 4、字符串的格式化 1、format格式化 2、字符格式化 3、f标志位格式化--(推荐) 5、字符串的常用属性 1、对字符串做出判断…

Mat - 基本映像容器

目标 我们有多种方法可以从现实世界中获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等等。在每种情况下,我们(人类)看到的都是图像。但是,当将其转换为我们的数字设备时,我们记录的是图像每…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务,这个与结构型模式有点像,结构型可以理解为静态的组合,例如将不同的组件拼起来成为一个更大的组件;而行为型更是一种动态或者具有某个…

高级编程。JavaScript中有哪些类型转换机制?

一、概述 前面我们讲到,JS中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及引用类型:object 但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型 let x y ? 1 : …
最新文章