Rust编程语言的特点及其适合做什么

Rust编程语言的特点

Rust是一门系统级编程语言,它有如下特点。

1. 类C的语言语法

Rust的具体语法和C/C++类似,都是由花括号限定代码块,还有一样的控制流关键字,例如if、else、while和for。然而,也并非所有的C或者C++关键字都被实现了。尽管与C/C++极其相似,Rust在深层语法上跟元语言家族的语言,比如Haskell(一种通用的纯函数编程语言)更接近。基本上一个函数体的每个部分都是表达式,甚至是控制流操作符。例如,普通的if表达式就取代了C的三元表达式。一个函数不需要以return表达式结束,在这种情况下函数最后的表达式就是返回值。

2. 内存安全

Rust语言系统设计用于保证内存安全,它在安全代码中不允许空指针、悬垂指针和数据竞争。数值只能用一系列固定形式来初始化,要求所有输入已经被初始化。在其他语言中复制函数指针要么有效、要么为空,比如在链表和二叉树等数据结构中,Rust核心库提供Option类型,用来测试指针是否有值。Rust同时引入添加语法来管理生命周期,而且编译器通过租借检查器来说明相关理由。

3. 高效的内存管理

Rust不像Go、Java以及.NET Framework那样使用自动垃圾回收系统。不同的是Rust通过RAII来管理内存和资源,还可以选用引用计数。Rust以低开销提供资源确定性管理。Rust也支持值的栈分配,并且不表现暗箱。Rust中也有引用概念(用&符号),不包含运行时引用计数,租约检查器的编译时已经验证了此类指针的安全性,阻止悬空指针和其他形式的未定义行为。

4. 引进所有权

所有权(系统)是Rust最为与众不同的特性,对语言的其他部分有着深刻含义。它让Rust无须进行垃圾回收即可保障内存安全,因此理解Rust中的所有权如何工作是十分重要的。所有程序都必须管理其运行时使用计算机内存的方式,有些语言具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存,而有些语言程序员必须亲自分配和释放内存。

C/C++这样的语言主要通过手动方式管理内存,开发者需要手动申请和释放内存资源。但为了提高开发效率,只要不影响程序功能的实现,许多开发者没有及时释放内存的习惯。所以手动管理内存的方式常常造成资源浪费。

Java语言编写的程序在虚拟机(Java Virtual Machine,JVM)中运行,JVM具备自动回收内存资源的功能。但这种方式常常会降低运行时效率,所以JVM会尽可能少地回收资源,这样也会使程序占用较多的内存资源。

Rust则选择了第三种方式,通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。违反任何规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序运行速度。

Rust有一个所有权系统,所有的值都有一个唯一的属主,值的有效范围跟属主的有效范围一样。Rust中的每一个值都有一个所有者,值在任一时刻有且只有一个所有者,所有者(变量)离开作用域,这个值将被丢弃。在任何时候,要么有多个不可变引用,要么只有一个可变引用。Rust编译器在编译时执行这些规则,同时检查所有引用的有效性。

5. 类型多态

Rust的类型系统支持一种类似类型类的机制,叫traits,是被Haskell语言激发灵感产生的。这是一种用于特定同质法的设施,通过给类型变量声明添加约束来实现。其他来自Haskell的特性,如更高类型多态还没有支持。

Rust适合做什么

Rust语言适合做的事情包括以下8个方面:防止数据泄露、数据分析、游戏开发、机器学习、嵌入式设备的开发、网络服务器的开发、编译成 WebAssembly、直接生成目标可执行程序。

1. 防止数据泄露

Rust已经是一种用于生产环境的成熟技术。作为一种系统编程语言,它允许用户保持对低级细节的控制。用户可以选择将数据存储在堆栈上(用于静态内存分配),还是存储在堆上(用于动态内存分配)。在这里,着重提一下RAII技术。RAII也称为“资源获取就是初始化”,是C++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,再析构对象,这是一个主要与C++相关的代码习语,但该技术现在也存在于Rust中,即每次对象超出范围时,都会调用其析构函数并释放其拥有的资源,程序员不必手动执行此操作,并且可以防止资源泄露错误。

2. 数据分析

高性能和安全性对使用Rust来执行大量数据分析的科学家具有强烈的吸引力。Rust的速度非常快,使其成为计算生物学和机器学习的理想选择,在这些领域的应用中,用户需要非常快速地处理大量数据。

3. 游戏开发

Rust是一种面向性能的语言,它可以通过适当的内存管理有效地执行复杂的任务。此外,Rust不使用垃圾回收器,这是最优化的游戏性能的加分项。

4. 机器学习

Rust预计将在机器学习(Machine Language,ML)领域大放异彩,因为它的低级内存控制。该语言使用高级抽象,这些抽象在构建基于Rust的神经网络时非常有益。Rust具有创建现代算法的巨大潜力,但它仍然远不及其他机器学习语言。程序员目前正在尝试Rust,该语言仍然需要一些时
间来成熟到足以创建机器学习算法,就像我们在Python中所做的那样。目前正在创建新的Rust库来开发可靠的神经网络,但这需要一些时间。

5. 嵌入式设备的开发

Rust是一种低级编程语言,可直接访问硬件和内存,这使其成为嵌入式和裸机开发的绝佳解决方案。用户可以使用Rust编写操作系统或微控制器应用程序。事实上,有许多用Rust编写的操作系统,例如vivo自主研发的“蓝河操作系统”(BlueOS)、BlogOS、RustOS、QuiltOS、intermezzOS等。Rust也被用于浏览器(如Mozilla Firefox)、游戏等方面。不少开发者视 Rust 为一种更具创新性的系统级语言,因为它不允许悬空指针或空指针。它是为了在不影响性能和速度的前提下做到安全、可靠而创建的。

6. 网络服务器的开发

Rust用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十分适合开发普通或极端的服务器程序,可以用于开发网络服务器。

7. 编译成WebAssembly

Rust可以被编译成WebAssembly,WebAssembly是一种JavaScript的高效替代品。

8. 直接生成目标可执行程序

Rust编译器可以直接生成目标可执行程序,不需要任何解释程序,可用于传统命令行程序。

本文节选自《Rust编程与项目实战》,获出版社和作者授权发布。

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

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

相关文章

Scratch四级:第07讲 编程数学02

第07讲 编程数学02 教练:老马的程序人生 微信:ProgrammingAssistant 博客:https://lsgogroup.blog.csdn.net/ 讲课目录 常考的数学问题项目制作:“求最大公约数”项目制作:“求最小公倍数”项目制作:“早餐…

RAG讲解

现有的LLM已经具备了理解、生成、逻辑和记忆能力,RAG(Retrieval Augmented Generation)则是为其套上外挂,使LLM能够访问训练数据来源之外的权威知识库,并生成领域特定的内容,而无须重新训练模型。 RAG的优势 经济高效&#xff1a…

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

opencompass实践

参考教程 https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 下载opencompass,配置必要的环境之后,解压下载的数据集 cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/ unzip OpenCompassData-co…

如何远程操作服务器中的Python编译器并将运行结果返回到Pycharm

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

RPA正常跑,cmd输入cookies跑不出来,如何解决??

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

SQL-递归查询

运行环境: Mysql8以上,递归查询功能在8以上版本被正式引入 一、SQL递归查询的概念 递归指的是通过调用函数或过程或自身来解决问题的方法,常用于一些具有规律性循环的操作。SQL递归查询是基于一组初始数据,通过递归查询&#xf…

机器人系统ros2-开发实践06-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如,最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先,我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

【机器学习】集成学习在信用评分领域实例

集成学习在信用评分领域的应用与实践 一、引言二、集成学习的概念与原理三、集成学习在信用评分中的应用实例四、总结与展望 一、引言 在当今金融数字化快速发展的时代,信用评分成为银行、金融机构等评估个人或企业信用风险的重要工具。然而,单一的信用评…

WebRTC 中的 ICE 实现

WebRTC 中的 ICE 实现 WebRTC 中的 ICE 实现Candidate 种类与优先级ICE 策略P2P 连接完全锥型 NATIP 限制锥型 NAT端口限制锥型 NAT对称型 NATNAT 类型检测如何进行 NAT 穿越 网络中继TURN 协议中转数据WebRTC 使用 TURN 协议STUN/TURN 服务器的安装与部署 WebRTC 中的 ICE 实现…

如何打破数据管理僵局,释放数据资产价值?[AMT企源案例]

引言 数据是企业信息运作的核心和基础,是影响企业决策的关键要素,而主数据是数据中的最基础和公共的部分。面临长期以来的数据治理缺失导致的杂论局面,如何有条不紊推进主数据管理,让数据资产“活”起来?S集团的做法非…

torch_geometric安装(CPU版本)

①打开官方安装网址:https://pytorch-geometric.readthedocs.io/en/2.3.0/install/installation.html ②对根据Pytorch选择相应版本。此前一直用CUDA不成功,这次使用CPU版本(因为不用对应cuda,pytorchcudageometric三者对应起来很…

[数据结构]动画详解单链表

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解数据结构系列 用通俗易懂的动画的动画使数据结构可视化 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低…

微服务思想以及实现

文章目录 前言一、什么时候需要拆分微服务1. 创业型项目2. 大型项目 二、怎么拆1. 拆分目标2. 拆分方式 三、微服务之间远程调用1. 实现方式2. 手动发送Http请求(RestTemplate)3. 服务注册中心3.1 原理3.2 Nacos注册中心3.3 服务注册3.4 服务发现(Discov…

Open CASCADE 教程 – AIS:自定义呈现

文章目录 开始 (Getting Started)呈现构建器 (Presentation builders)基元数组 (Primitive arrays)基元外观 (Primitive aspects)二次构建器 (Quadric builders)计算选择 (Computing selection)突出显示选择所有者 (Highlighting selection owner)突出显示的方法 (Highlighting…

day10-Set集合

1.Set 那接下来我们来看Collection单列集合体系的第二部分 Set集合。 1.1 Set集合概述和特点 Set集合特点 1.可以去除重复 2.存取顺序不一致 3.没有带索引的方法,所以不能使用普通fori循环遍历,也不能通过索引来获取,删除Set集合里面的元…

【大数据】HDFS、HBase操作教程(含指令和JAVA API)

目录 1.前言 2.HDFS 2.1.指令操作 2.2.JAVA API 3.HBase 3.1.指令操作 3.2.JAVA API 1.前言 本文是作者大数据专栏系列的其中一篇,前文中已经详细聊过分布式文件系统HDFS和分布式数据库HBase了,本文将会是它们的实操讲解。 HDFS相关前文&#x…

哈希算法在区块链中的应用

哈希算法是区块链技术的核心组件之一,它确保了区块链数据的不可篡改性和安全性。在本文中,我们将探讨哈希算法的基本原理,以及它在区块链中的具体应用。 哈希算法的基本原理 哈希算法是一种数学函数,它接收输入(或“消…

【Apache Doris】周FAQ集锦:第 3 期

【Apache Doris】周FAQ集锦:第 3 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.5讲 GPIO中断实验-通用中断驱动编写

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…