初识 Rust 语言

news2025/1/19 11:30:21

目录

  • 前言
  • 一、Rust 的背景
  • 二、Rust的特性
  • 三、部署开发环境,编写一个简单demo
    • 1、在ubuntu 20.04部署环境
    • 2、编写demo测试
  • 四、如何看待Linux内核引入Rust

前言

  自Linux 6.1起,初始的Rust基础设施被添加到Linux内核中。此后为了使内核驱动程序能够用Rust编程语言编写,Linux内核已经合并了许多其他管道和内务管理工作。随着即将到来的Linux 6.8内核周期,第一个Rust网络驱动程序将被引入。去年vivo开发者大会上发布的蓝河操作系统,也使用了Rust语言进行开发。

  作为一名软件开发人员,对于新技术总要保持着好奇心和不断进取的精神,过年抽空简单看了看Rust语言,在这里简单总结分享一下!

一、Rust 的背景

中文官方网站:https://rust.p2hp.com/learn/

  Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目。第一个有版本号的 Rust 编译器于2012 年 1 月发布。Rust 1.0 是第一个稳定版本,于 2015年5月15日发布。

  Rust 的设计目标是提供一种内存安全并发安全高性能的编程语言,同时保持现代化和灵活性。它结合了系统级编程语言的高效性和高级语言的安全性,使得开发者可以在不牺牲性能的情况下编写更可靠和安全的代码。

  Rust 是一门编译语言,因此它的效率可以媲美 C 或 C++ 语言。某种场景下,Rust 语言瞄准的是工业系统的霸者 C++ 语言。

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

  Rust可以用来做什么呢?

1、可以使用 Rust 编写操作系统、游戏引擎和许多性能关键型应用程序。

2、可以使用它构建高性能的 Web 应用程序、网络服务,类型安全的数据库对象关系映射(Object
Relational Mapping,ORM)库,还可以将程序编译成 WebAssembly 在 Web 浏览器上运行。

3、Rust 还在为嵌入式平台构建安全性优先的实时应用程序方面获得了相当大的关注,例如 Arm 
基于 Cortex-M 的微控制器,目前该领域主要由 C 语言主导。Rust 因其广泛的适用性在多个
领域都表现良好

二、Rust的特性

内存安全
  Rust 最引人瞩目的特性之一是其内存安全性。通过独特的所有权系统和借用检查器,Rust 在编译时可以防止诸如空指针解引用、数据竞争和内存泄漏等常见的内存安全问题。这使得开发者编写的代码在运行时更加可靠,避免了许多常见的运行时错误。

并发安全
  随着计算机系统变得越来越并发,编写并发安全的代码变得非常重要。Rust 的所有权模型和借用检查器使得并发安全得以得到保障,开发者可以在不担心数据竞争和并发 bug 的情况下编写并发程序。

高性能
  Rust 的设计注重性能,并且借助精心设计的系统级特性和编译器优化,Rust 代码能够达到接近 C/C++ 的性能水平。这使得 Rust 成为系统级和性能敏感型应用程序的理想选择,例如操作系统、嵌入式系统和游戏引擎等领域。

现代化
  Rust 语言本身也融入了许多现代化的编程特性,如模式匹配、闭包、trait 等,使得代码编写更加简洁、表达力更强。Rust 还拥有出色的包管理工具 Cargo,以及丰富的标准库和活跃的社区支持,为开发者提供了良好的开发环境和资源。

三、部署开发环境,编写一个简单demo

官网教程:https://www.rust-lang.org/learn/get-started

1、在ubuntu 20.04部署环境

参考教程:https://www.jianshu.com/p/cfd56fab0697

apt-get install rustc
apt  install cargo

rustc是Rust语言的编译器,cargo是Rust的包管理器。

2、编写demo测试

//rust的源代码文件为.rs文件
fn main(){
    println!("hello world!");
}

在这里插入图片描述

四、如何看待Linux内核引入Rust

  Linux 内核引入 Rust 是一个备受关注的话题,它可能对 Linux 以及 Linux 开发产生一系列影响。以下是一些关于这个问题的观点和看法:

  首先讲一下优点:

  1. 内存安全和并发性:Rust 的引入可以带来更多的内存安全和并发性保证。由于 Rust 具有严格的所有权模型和借用检查器,开发者可以在内核代码中避免常见的内存错误如空指针解引用和数据竞争。这有助于提高内核的稳定性和安全性。

  2. 代码维护和可读性:Rust 引入后,可能提高内核代码的可读性和可维护性。Rust 的语法清晰、表达力强,以及强大的静态类型系统可以帮助开发者编写更加模块化和易于理解的代码。这对于内核的维护者和贡献者来说是一个积极的影响。

  3. 性能和效率:Rust 的高性能特性和零成本抽象能力可以对某些内核组件的性能产生积极影响。Rust 提供了对底层硬件和系统的直接访问能力,使得开发者可以编写高效的系统级代码,这对于需要处理大量数据和性能敏感的内核模块来说是一个重要的优势。

  4. 生态系统和工具链:Rust 生态系统目前非常活跃,拥有丰富的库和工具。将 Rust 引入内核可能会促进这些工具和生态系统的发展,并为内核开发者提供更多的选择和支持。

  再来看看一些缺点:

  1. 增加Linux开发人员的技能要求:需要内核开发者拥有Rust语言的开发经验。

  2. 增加代码复杂度:Rust中的一些概念和机制可能与C语言不同,需要使用者进行适应和理解。因此,Linux内核使用Rust开发可能会增加代码复杂度和调试难度。

  3. 影响Linux内核的运行效率:Rust编写的程序通常比C更慢,因为Rust需要运行时代码来执行一些任务。虽然在一些场景下,Rust的性能可能要好于C,但引入Rust可能会对Linux内核的性能造成一定的影响。

  需要注意的是,将 Rust 引入内核不仅仅是技术问题,还涉及到社区和开发者的接受程度,以及与现有 C 代码的兼容性等方面的考虑。此外,在实际实施时还需要解决一些挑战,如与现有基础设施的集成、性能优化等。

  总之,尽管引入 Rust 可以带来许多潜在的好处,但它也需要认真考虑和解决相关的问题。Linux 内核引入 Rust 的决定还需要在社区中进行广泛的讨论和审议,以确保所有利益相关者的意见得到充分的考虑。

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

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

相关文章

C++--Linux基础使用

文章目录 几个简单命令开机关机重启查看当前目录切换当前目录列出当前目录下的目录和文件列出指定目录下的目录和文件清屏查看/设置时间 目录和文件目录概要目录详细说明相对路径和绝对路径 上古神器vi创建/打开文件vi 的两种模式vi 的常用命令 用户管理组管理用户管理修改用户…

小迪安全25WEB 攻防-通用漏洞SQL 读写注入MYSQLMSSQLPostgreSQL

#知识点: 1、SQL 注入-MYSQL 数据库 2、SQL 注入-MSSQL(SQL server) 数据库 3、SQL 注入-PostgreSQL 数据库 #详细点: Access 无高权限注入点-只能猜解,还是暴力猜解 因为access的数据库是独立存在的,不存在统一管理 …

应用回归分析:多重共线性

多重共线性的概念 在回归分析中,我们通常关注的是如何利用一个或多个自变量(解释变量)来预测一个因变量(响应变量)。当我们使用多元线性回归模型时,理想的情况是模型中的每一个自变量都能提供独特的、对因…

Cesium 问题——加载 gltf 格式的模型之后太小,如何让相机视角拉近

文章目录 问题分析问题 刚加载的模型太小,如何拉近视角放大 分析 在这里有两种方式进行拉近视角, 一种是点击复位进行视角拉近一种是刚加载就直接拉近视角// 模型三加载 this.damModel = new Cesium.Entity({name: "gltf模型",position:</

5、Linux 常用指令

一、帮助指令 1.man 指令 语法 man [命令或配置文件] //功能描述&#xff1a;获得帮助手册上的信息查看 ls 命令的帮助信息 man ls信息作用NAME命令名称SYNOPSIS如何使用命令DESCRIPTION描述命令SEE ALSO相关的手册 2.help 指令 语法 help [命令] //功能描述&#xff1a;获得…

AttributeError: module ‘distutils‘ has no attribute ‘version‘

报错 AttributeError: module ‘distutils’ has no attribute ‘version’ 出现如下图报错&#xff1a; 或者可以通过修改torch版本和固定setuptools版本为59.5.0解决&#xff0c;但是我觉得前者有点麻烦&#xff0c;后者尝试无效&#xff0c;于是找到下图路径中的文件__init…

洛谷 P1019 [NOIP2000 提高组] 单词接龙

参考代码 #include <bits/stdc.h> using namespace std; string s[25]; int vis[25], ans, now 1, n; void dfs(int k) { ans max(ans, now); for(int i 1; i < n; i) if(vis[i] < 2) { for(int j 0; j < s[k].length(); j) …

N叉树的前序遍历

1.题目 这道题是2024-2-18的签到题&#xff0c;题目难度为简单。 考察的知识点为DFS算法&#xff08;树的前序遍历&#xff09;。 题目链接&#xff1a;N叉树的前序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历…

[Flink04] Flink部署实践

Flink部署支持三种模式&#xff1a;本地部署、Standalone部署、Flink on Yarn部署。 独立&#xff08;Standalone&#xff09;模式由Flink自身提供资源&#xff0c;无需其他框架&#xff0c;这种方式降低了和其他第三方资源框架的耦合性&#xff0c;独立性非常强。但Flink 是大…

Shiro-04-shiro 详细架构

详细架构 下图显示了Shiro的核心架构概念&#xff0c;并简要概述了每个架构&#xff1a; 下面我们对除了核心组件的部分做一下简单的介绍&#xff1a; Authentication&#xff08;身份验证&#xff09; 身份验证是验证用户身份的过程。 也就是说&#xff0c;当用户通过应用…

相机图像质量研究(32)常见问题总结:图像处理对成像的影响--振铃效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

VMware Ubuntu 无网卡驱动怎么办?

网上拷了一个VMware的Ubuntu系统&#xff0c;结果网络没法连接。 ifconfig命令一看&#xff0c;只有lo的本地回环网卡&#xff0c;没有真实网卡驱动。 很简单&#xff0c;一下三步就可以搞定。 首先&#xff0c;iplink show查看本地所有网卡。 我这里出现了一个ens33的网卡…

深度学习-分类任务---经典网络

文章目录 经典网络1 LeNet51.1 模型结构1.2 模型结构1.3 模型特性 2 AlexNet2.1 模型介绍2.2 模型结构2.3 模型解读2.4 模型特性 3 可视化ZFNet-转置卷积3.1 基本的思想及其过程3.2 卷积与转置卷积3.3 卷积可视化3.4 ZFNet和AlexNet比较 4 VGGNet4.1 模型结构4.2 模型特点 5 Ne…

21-k8s中pod的调度-污点和污点容忍

一、污点的概念 所谓的污点&#xff0c;就是给k8s集群中的节点设置的污点&#xff0c;通过设置污点&#xff0c;来规划资源创建时所在的节点&#xff1b; 污点的类型解释说明PreferNoshedule 节点设置这个五点类型后&#xff1b; 表示&#xff0c;该节点接受调度&#xff0c;但…

NLP深入学习:《A Survey of Large Language Models》详细学习(七)

文章目录 1. 前言2. 应用场景2.1 LLMs 对研究界的应用2.1.1 经典 NLP 任务2.1.2 信息检索2.1.3 推荐系统2.1.4 多模态大语言模型2.1.5 知识图谱增强型 LLM2.1.6 基于 LLM 的智能体2.1.7 用于评估 2.2 特定领域的应用 3. 参考 1. 前言 这是《A Survey of Large Language Models…

51_蓝桥杯_数码管静态显示

一 电路 二 数码管静态显示工作原理 三 代码 代码1 实现第一个数码管显示数字6的功能 #include "reg52.h"unsigned char code SMG_Duanma[18] {0xc0,0xf9.0xa4,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc0,0x86,0x8e,0xbf,0x7f};void Delay(unsignde int t) {wh…

在ubuntu中制作ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在ubuntu22.04中制作ubuntu22.04的U盘启动盘 一、下载ubuntu22.04的iso文件 访问ubuntu官网https://ubuntu.com自行下载ubuntu官网 二、制作U盘启动盘 打开系统自带软件Startup Disk Creator 软件会自动检测iso文件和U盘 点击Make Startup Disk…

从源代码安装 rocSOLVER 并 调试 rocSOLVER 在 Ubuntu 22.04 平台

0, 下载并编译 rocBLAS 的调试版本 sudo apt install python3.10-venv sudo apt install libmsgpack-dev sudo pip install joblibgit clone --recursive https://github.com/ROCm/rocBLAS.git $ cd rocBLAS/ $ ./install.sh -i -g构建时间也不短 1&#xff0c;下载并编译 roc…

17.Qt 单选框相关操作

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 布置界面 2.管理 3.槽函数 参考&#xff1a; 前言&#xff1a; 组合选择只能选择一个的单选框实现&#xff0c;以及管理组合单选框 技能&#xff1a; <QRadioButton> <QButtonGroup> 内容&…

openGauss学习笔记-223 openGauss性能调优-系统调优-数据库系统参数调优-数据库内存参数调优

文章目录 openGauss学习笔记-223 openGauss性能调优-系统调优-数据库系统参数调优-数据库内存参数调优223.1 逻辑内存管理参数223.2 执行算子是否下盘的参数 openGauss学习笔记-223 openGauss性能调优-系统调优-数据库系统参数调优-数据库内存参数调优 数据库的复杂查询语句性…