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

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

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

相关文章

第13章 网络 Page744~746 asio核心类 ip::tcp::endPoint

2. ip::tcp::endpoint ip::tcp::socket用于连接TCP服务端的 async_connect()方法的第一个入参是const endpoint_type& peer_endpoint. 此处的类型 endpoint_type 是 ip::tcp::endpoint 在 在 ip::tcp::socket 类内部的一个别名。 libucurl 库采用字符串URL表达目标的地…

Android开机不显示bootloader界面

Turn it off in the following way LINUX\android\bootable\bootloader\edk2\QcomModulePkg\Library\BootLib\MenuKeysDetection.c 试了没有生效 --- a/QcomModulePkg/Library/BootLib/MenuKeysDetection.cb/QcomModulePkg/Library/BootLib/MenuKeysDetection.c-364,7 364,8…

显微测量|台阶仪二维超精密测量微观形貌

台阶仪通过扫描被测样品表面,获取高分辨率的表面形貌数据,能够揭示微观结构的特征和性能。 标题了解工作原理和性能特点 台阶仪利用扫描探针在样品表面上进行微观测量,通过探测探针和样品表面之间的相互作用力,获取表面形貌信息…

数据分析 — 动画图 pyecharts

目录 一、概念二、安装和导入三、绘图逻辑四、绘图1、柱状图2、折线图3、散点图4、饼图5、南丁格尔图6、Geo() 地理坐标第7、Map() 绘制区域8、词云图9、层叠图10、3D 图11、仪表板 一、概念 Pyecharts 是一个基于 Echarts 的 Python 可视化库,它通过 Python 生成 …

云计算基础-快照与克隆

快照及克隆 什么是快照 快照是数据存储的某一时刻的状态记录,也就是把虚拟机当前的状态保存下来(快照不是备份,快照保存的是状态,备份保存的是副本) 快照优点 速度快,占用空间小 快照工作原理 在了解快照原理前,…

WordPress主题YIA移动端文章页的面包屑不显示怎么办?

平时我们一般都会在文章页导航菜单下方显示面包屑,类似于“当前位置:boke112百科 WordPress 正文”。平时用浏览器调试站点的时候,在Edge浏览器的“切换设备仿真”中,不管是选择什么设备都会显示面包屑。具体如下图所示&#xf…

抓包分析 TCP 协议

TCP 协议是在传输层中,一种面向连接的、可靠的、基于字节流的传输层通信协议。 环境准备 对接口测试工具进行分类,可以如下几类: 网络嗅探工具:tcpdump,wireshark 代理工具:fiddler,charles&…

3分钟了解Android中稳定性测试

一、什么是Monkey Monkey在英文里的含义是猴子,在测试行业的学名叫“猴子测试”,指的是没有测试经验的人甚至是根本不懂计算机的人(就像一只猴子),不需要知道程序的任何用户交互方面的知识,给他一个程序&a…

LeetCode刷题计划

LeetCode刷题计划 推荐 代码随想录&#xff1a;https://github.com/youngyangyang04/leetcode-master 卡码网 练习ACM模式 https://kamacoder.com/ 01 #include <iostream> using namespace std;int main() {int a ,b;while(cin>>a>>b){cout<<ab<…

基于51/STM32单片机的智能药盒 物联网定时吃药 药品分类

功能介绍 以51/STM32单片机作为主控系统&#xff1b; LCD1602液晶显示当前时间、温湿度、药品重量 3次吃药时间、药品类目和药品数量 HX711压力采集当前药品重量 红外感应当前药盒是否打开 DS1302时钟芯片显示当前年月日、时分秒、星期 DHT11采集当前环境温度和湿度 …

【presto权威指南】presto介绍

需求&#xff1a;如何从众多数据源中快速处理数据 现实生产架构多源异构&#xff0c;需要一个强有力的工具&#xff08;抽象&#xff09;统一数据查询/分析 这也是presto/trino从诞生之初便贴数据湖查询工具 tag的原因&#xff0c;presto生来为此 生产环境的困境 1.数据源众多…

无货源?想要1688平台货源,商品采集,第三方API来帮你实现

阿里巴巴(1688.com)批发网是全球企业间(B2B)电子商务的著名品牌&#xff0c;为天下网商提供海量商机信息和便捷安全的在线交易市场。从海量的商品中甄选热销新品、优质好商&#xff0c;为买家采购批发提供风向标。 不少做跨境电商无货源的朋友都想要直接从1688源头厂家拿货&am…

NOTA-马来酰亚胺,1295584-83-6,可作为过渡金属离子的配体

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;NOTA-马来酰亚胺&#xff0c;NOTA Maleimide &#xff0c;NOTA-Mal&#xff0c;1295584-83-6 一、基本信息 产品简介&#xff1a;NOTA Maleimide, also known as NOTA maleimide, is a novel bifunctional integrat…

SQL-Labs靶场“1-5”关通关教程

君衍. 一、准备工作二、第一关 基于GET单引号字符型注入1、源码分析2、联合查询注入过程 三、第二关 基于GET整型注入1、源码分析2、联合查询注入过程 四、第三关 基于GET单引号变形注入1、源码分析2、联合查询注入过程 五、第四关 基于GET双引号字符型注入1、源码分析2、联合查…

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸&#xff0c;升职加薪&#xff0c;冲鸭 &#x1f389; 金三银四 今天复工&#xff0c;就要开始准备啦&#x1f4bc;✨ 把握好打工人跳槽的金三银四&#xff0c;获得满意的新工作 &#x1f389; 时间线 年后跳槽时间线&#xff0c;过完年刚好开始准备&#xf…

谁懂啊!自从用了这个管理神器,空调系统运行效率翻两番!

在当今高度竞争的商业环境中&#xff0c;对于各行各业而言&#xff0c;提高效率、降低成本、确保生产和服务质量是至关重要的任务。 精密空调监控系统作为一项先进的技术应用&#xff0c;通过实时监测和智能调控&#xff0c;有效管理和控制环境参数&#xff0c;从而在不同行业和…

FPGA转行ISP的探索之一:行业概览

ISP的行业位置 最近看到一个分析&#xff0c;说FPGA的从业者将来转向ISP&#xff08;Image Signal Process图像信号处理&#xff09;是个不错的选择&#xff0c;可以适应智能汽车、AI等领域。故而我查了一下ISP&#xff0c;对它大致有个概念。 传统的ISP对应的是相机公司&…

【Python】【Pycharm】Python Script头文件设置

1、步骤&#xff1a;File->settings->Editor->File and CodeTemplates->Python Script 2、复制粘贴以下代码&#xff0c;应用即可&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*-# Time :${DATE} ${TIME} # Author : admin # Site :${SITE} …

【C++】中类的6个默认成员函数 取地址及const成员函数 学习运算符重载 【实现一个日期类】

文章目录 一、【C】赋值运算符重载1.1 运算符重载【引入】1.2 运算符重载1.3 赋值运算符重载1.4 赋值 二、日期类的实现2.1 判断小于2.2 判断等于2.3 判断小于等于2.4 判断大于2.5 判断大于等于2.6 判断不等于2.7 日期加等天数2.8 获取月份天数2.9 日期加天数2.9.1 日期减等天数…

原生微信小程序开发记录

1. 拿到项目 先构建 2.小程序与普通网页开发的区别 网页开发渲染线程和脚本线程是互斥的&#xff0c;这也是为什么长时间的脚本运行可能会导致页面失去响应&#xff0c;而在小程序中&#xff0c;二者是分开的&#xff0c;分别运行在不同的线程中。网页开发者可以使用到各种浏览…