初识 Rust 语言

目录

  • 前言
  • 一、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 的决定还需要在社区中进行广泛的讨论和审议,以确保所有利益相关者的意见得到充分的考虑。

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

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

相关文章

Vue3+vite搭建基础架构(6)--- 使用vue-router

Vue3vite搭建基础架构(6)--- 使用vue-router 说明官方文档安装vue-router使用vue-router测试vue-router 说明 这里记录下自己在Vue3vite的项目使用vue-router的过程,不使用ts语法,方便以后直接使用。这里承接自己的博客Vue3vite搭…

在SpringBoot中@PathVariable与@RequestParam的区别

PathVariable GetMapping("/{userId}")public R<User> getUserById(PathVariable Long userId) {return userService.getUserById(userId);} // 根据id获取一条数据 function getStudentDataByIdAndDisplayInput(id) {// 发送 AJAX 请求$.ajax({url: /dorm/st…

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码] &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

Linux环境安装Maven(详细图文)

目录 摘要 一、准备工作 1.检查当前环境是否安装maven 2.下载maven ​3.上传maven压缩包 4.解压maven包 5.移动到/usr/local目录下方便管理 6.配置maven环境变量 7.刷新配置文件 8.配置maven镜像仓库 9.验证是否成功 摘要 笔者Linux环境为&#xff1a;Ubuntu 22.04 …

安装部署k8s集群

系统&#xff1a; CentOS Linux release 7.9.2009 (Core) 准备3台主机 192.168.44.148k8s-master92.168.44.154k8s-worker01192.168.44.155k8s-worker02 3台主机准备工作 关闭防火墙和selinux systemctl disable firewalld --nowsetenforce 0sed -i s/SELINUXenforcing/SELI…

MySQL进阶45讲【22】MySQL是怎么保证数据不丢的?

1 前言 今天这篇文章&#xff0c;继续介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL是怎么保证数据不丢的&#xff1f;”&#xff0c;就可以看出来&#xff0c;今天介绍的方法&#xff0c;跟数据的可靠性有关。 在专栏前面文章中&#xff0c;着重介绍了WAL机制&…

软考学习--计算机组成原理与体系结构

计算机组成原理与体系结构 数据的表示 进制转换 R 进制转换为 10 进制–按权展开法 10进制转换为2进制 原码 反码 补码 移码 原码 &#xff1a;数字的二进制表示反码 &#xff1a; 正数的反码等于原码&#xff0c;负数的反码等于原码取反补码&#xff1a; 正数的补码等…

python使用工厂模式和策略模式实现读文件、分析内容功能

当涉及到在 Python 中创建类以及使用设计模式来实现读取文件和分析内容的功能时&#xff0c;我们可以考虑使用工厂模式和策略模式的结合。下面是一个简单的示例&#xff0c;演示如何通过创建类和使用设计模式来实现这一功能&#xff1a; # 工厂模式&#xff1a;根据不同的分析…

qwen1.5 chat vllm推理使用案例

参考:https://github.com/QwenLM/Qwen1.5 下载:https://huggingface.co/collections/Qwen/qwen15-65c0a2f577b1ecb76d786524 下载可以参考huggingface-cli 命令下载使用:https://blog.csdn.net/weixin_42357472/article/details/1326636931、vllm运行 显卡驱动:NVIDIA-S…

java数据结构与算法刷题-----LeetCode239. 滑动窗口最大值

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 1. 法一&#xff1a;指针法 解题思路 我们以每一个窗口来看&#xff0c;找…

Linux+Win双系统远程重启到Win

背景 电脑安装了双系统&#xff08;ubuntu 22.04 win11&#xff09;&#xff0c;默认进入ubuntu系统。给电脑设置了WoL(Wake-on-LAN)&#xff0c;方便远程开机远程控制。 但是ubuntu的引导程序grub无法远程控制&#xff0c;远程开机会默认进入ubuntu。 虽然说可以进入ubuntu后…

【STM32】硬件SPI读写W25Q64芯片

目录 基础知识回顾&#xff1a; SPI外设简介 SPI框图 主模式全双工连续传输 非连续传输 初始化SPI外设 核心代码 - 交换一个字节 硬件接线图 Code 程序配置过程 MySPI.c MySPI.h W25Q64.c W25Q64.h W25Q64_Ins.h main.c 基础知识回顾&#xff1a; 【STM32】SP…

《UE5_C++多人TPS完整教程》学习笔记19 ——《P20 我们子系统的回调函数(Callbacks to Our Subsystem)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P20 我们子系统的回调函数&#xff08;Callbacks to Our Subsystem&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&…

【XR806开发板试用】+移植rosserial到XR806

1 XR806简介 板子来源于极术社区的试用&#xff0c;XR806的在线网址 其主要参数&#xff1a; 主控XR806AF2LDDRSIP 288KB SRAM存储SIP 160KB Code ROM. SIP 16Mbit Flash.天线板载WiFi/BT双天线&#xff0c;可共存按键reboot按键 1&#xff0c;功能按键 1灯红色电源指示灯 1…

如何在wxPython应用程序中使用Panda3D

我们知道wxPython提供了丰富的工具和部件来构建用户界面&#xff0c;如果当我们整合wxPython和Panda3D可以创建出功能丰富且交互性强的应用程序&#xff0c;可以创建出强大而丰富的用户界面和3D场景。这样做的主要挑战在于将两个库整合到一个应用程序中&#xff0c;同时确保它们…

【.NET Core】深入理解async 和 await 理解

【.NET Core】深入理解async 和 await 理解 文章目录 【.NET Core】深入理解async 和 await 理解一、概述二、async异步执行机制理解三、async与await应用3.1 async与await简单应用3.2 带有返回值async与await应用 四、async和await中常见问题总结4.1 当方法用async标识时&…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第10章 项目进度管理(六)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

跨境云手机如何简化tiktok运营流程

如今&#xff0c;tiktok已经成为世界范围内都非常流行的社交媒体平台。然而在大多数情况下&#xff0c;由于网络原因&#xff0c;tiktok无法在国内使用&#xff0c;但依然有越来越多的人注册tiktok号码、建立tiktok矩阵。原因是tiktok仍然有大量的流量可供商业使用&#xff0c;…

day04-股票K线功能实现

股票K线功能实现 今日目标 1.理解股票T和T-1概念&#xff0c;实现成交量对比功能; 2.理解个股涨跌幅度统计功能; 2.1 分析业务&#xff0c;SQL落地; 2.2 完善不存在数据的区间默认回显功能; 3.理解个股分时线业务&#xff0c;并实现功能; 4.理解个股日K线业务&#xff0c;并实…

使用傅里叶实现100倍的压缩效果(附Python源码)

傅里叶变换&#xff08;Fourier Transform&#xff09;是一种将一个函数&#xff08;在时间或空间域&#xff09;转换为另一个函数&#xff08;在频率域&#xff09;的数学变换方法。它在信号处理、图像处理、通信等领域有广泛应用。 实现过程 将傅里叶系数核心的1%保留&…