当前位置: 首页 > news >正文

Rust入门基础

文章目录

  • Rust相关介绍
    • 为什么要用Rust?
    • Rust的用户和案例
  • 开发环境准备
    • 安装Rust
    • 更新与卸载Rust
    • 开发工具
  • Hello World程序
    • 编写Rust程序
    • 编译与运行Rust程序
  • Cargo工具
    • Cargo创建项目
    • Cargo构建项目
    • Cargo构建并运行项目
    • Cargo检查项目
    • Cargo为发布构建项目

Rust相关介绍

为什么要用Rust?

为什么要用Rust?

  • Rust是一种通用的编程语言,它可以让每个人编写可靠且高效的软件。
  • Rust可以用来替换C/C++,Rust和它们具有同样的性能,但是很多常见的bug在编译时就可以被消灭。

与其他语言比较

  • C/C++性能非常好,但类型系统和内存都不太安全。
  • Java和C#,拥有垃圾收集器GC,能保证内存安全,也有很多优秀特性,但是性能不行。
  • Rust能够保证内存安全(无需GC),并且易于维护、调试,代码既安全又高效。

Rust的优点

Rust的优点:

  • 性能好,速度快。
  • 安全性高。
  • 具备出色的并发处理能力。
注:Rust最大的缺点就是难学,因为Rust中有很多独有的概念,和现在大多数主流的编程语言都不同,所以学习Rust必须从基础一步一步学。

Rust的用户和案例

Rust的用户和案例

  • Google:新操作系统Fuschia,其中Rust代码量大约占30%。
  • Amazon(亚马逊):基于Linux开发的可以直接在裸机、虚机上运行容器的操作系统。
  • System76:纯Rust开发了下一代安全操作系统Redox。
  • 蚂蚁金服:用Rust开发了库操作系统Occlum。
  • 斯坦福和密歇根大学:嵌入式实时操作系统,应用于Google的加密产品。
  • 微软:正在使用Rust重写Windows系统中的一些低级组件,微软的WinRT项目也新添加了对Rust语言的支持。
  • 其他公司:Dropbox、Yelp、Coursera、LINE、Cloudflare、Atlassian、npm、Ceph、百度、华为、Sentry、Deno等。

Rust与Firefox

  • Rust最初是Mozilla公司的一个研究性项目,Firefox是Rust产品应用的一个重要的例子。
  • Mozilla一直以来都在用Rust创建一个名为Servo的实验性浏览器引擎,其中的所有内容都是并行执行的,Firefox原来的量子版就包含了Servo的CSS渲染引擎。

Rust特别擅长的领域

  • 高性能Web Service。
  • WebAssembly。
  • 命令行工具。
  • 网络编程。
  • 嵌入式设备。
  • 系统编程。

开发环境准备

安装Rust

安装Rust

Linux/Mac操作系统执行如下命令进行安装:

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

Windows操作系统的安装步骤如下:

1、进入Rust官网,点击install按钮。如下:

在这里插入图片描述

2、根据操作系统的类型点击对应的32位或64位下载按钮。如下:

在这里插入图片描述

3、下载完后运行可执行程序可以看到如下内容:

在这里插入图片描述

相关解释:

  • 安装Rust后,Cargo的家目录被设置为用户家目录\.cargo
  • 安装Rust的时候会下载一些命令,这些命令对应的可执行程序就会放在用户家目录\.cargo\bin路径下。
  • 安装Rust后,用户家目录\.cargo\bin将会被添加到PATH环境变量中(运行Rust相关命令时不用指明路径)。

4、点击回车开始下载,下载完毕后再次点击回车。如下:

在这里插入图片描述

注意: 安装完毕后需要重启当前的命令行终端,使得用户家目录\.cargo\bin被添加到PATH环境变量中,以便直接在命令行中运行rust相关命令。

安装验证

可以通过如下命令确保Rust安装成功:

rustc --version

该命令将会输出当前安装的Rust编译器(rustc)的版本信息。如下:

在这里插入图片描述

说明一下:

  • 图中的1.73.0、cc66ad468和2023-10-03,分别是版本号、commit hash和commit日期。

更新与卸载Rust

更新与卸载Rust

更新Rust执行如下命令:

rustup update

卸载Rust执行如下命令:

rustup self uninstall

开发工具

开发工具

Rust常用的开发工具如下:

  • Visual Studio Code(Rust扩展)。
  • Clion(IntelliJ IDEA系列)。

在这些开发工具上下载对应的Rust插件即可进行Rust开发。如下:

在这里插入图片描述

本地文档

安装Rust的时候会在本地安装文档,可离线浏览,通过rustup doc命令即可在浏览器打开本地文档。如下:

在这里插入图片描述

Hello World程序

编写Rust程序

编写Rust程序

创建一个名为main.rs的文件,并编写如下内容:

fn main() {println!("Hello World");
}

相关说明:

  • Rust源文件以小写字母命名,多个单词之间使用下划线分开,文件以rs为后缀。
  • 代码中通过fn关键字定义了一个main函数,该函数没有参数也没有返回值。
  • 打印字符串时使用的println!不是函数,而是一个Rust macro(宏)。
  • Rust的缩进是4个空格,而不是一个制表符。
  • Rust中的表达式以分号结尾。

编译与运行Rust程序

编译Rust程序

通过rustc命令即可对指定的Rust程序进行编译,并生成可执行程序。如下

在这里插入图片描述

说明一下:

  • Rust是ahead-of-time编程语言,程序编译生成可执行程序后可在无Rust环境的机器上运行。
  • Windows下生成的可执行程序名为xxx.exe,Linux/Mac下生成的可执行程序名为xxx。
  • Windows上还会生成一个xxx.pdb文件,里面包含的是调试信息。

运行Rust程序

执行可执行程序即可运行Rust程序。如下:

在这里插入图片描述

说明一下:

  • rustc只适合编译简单的Rust程序,实际开发中一般会使用Cargo。

Cargo工具

Cargo工具

  • Cargo是Rust的官方构建系统和包管理器,它是Rust生态系统中用于构建、测试、运行和发布Rust项目的工具。
  • Cargo提供了一种简单而强大的方式来管理Rust项目的依赖关系、构建过程和发布版本,它可以自动下载和安装所需的依赖项,编译源代码,运行测试套件,生成文档,并生成可执行文件或库。

在安装Rust的时候会自动安装Cargo工具,通过cargo --version命令可以查看Cargo的版本。如下:

在这里插入图片描述

Cargo创建项目

Cargo创建项目

创建Rust项目的命令如下:

cargo new 项目名称

该命令会在当前目录下创建一个项目目录,项目目录的名字与指定的项目名称相同。如下:

在这里插入图片描述

在项目的顶层目录下一个src目录、一个.gitignore文件和一个Cargo.toml文件。如下:

在这里插入图片描述

说明一下:

  • 在src目录下有一个main.rs源文件,该源文件中会自动生成Hello World程序,Rust项目的源代码都应该放在src目录下。
  • 顶层目录可以放置README、许可信息、配置文件以及其他与程序源码无关的文件。
  • Cargo会在项目目录初始化一个git仓库,以及一个.gitignore文件,如果在一个已经存在的git仓库中运行cargo new,则这些git相关文件则不会生成,这时可以通过运行cargo new 项目名称 --vcs=git指定让Cargo在项目目录初始化一个git仓库。
  • 如果创建项目时没有使用Cargo,后续也可以把项目转化为使用Cargo,只需要按照上述目录结构组织项目代码,并将相应的配置信息写入Cargo.toml即可。

Cargo.toml

  • Cargo.toml是Rust项目中的一个配置文件,它位于项目顶层目录下,用于描述项目的元数据和依赖关系。
  • Cargo.toml文件采用TOML(Tom’s Obvious, Minimal Language)格式,这是一种易于阅读和编写的配置文件语言,它允许你指定项目的名称、版本号、作者、许可证等元数据信息,并列出项目所依赖的外部库或其他Rust包。

使用Cargo工具创建项目时默认生成的Cargo.toml文件如下:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]

说明一下:

  • [package]是一个片段(section)标题,表明下面的语句用来配置一个包(package)。
  • 代码中的name、version和edition分别表示项目名、项目版本和使用的Rust版本。
  • [dependencies]是罗列项目依赖的片段的开始,Rust中代码包称为crate,当前项目不需要其他的crate。

Cargo构建项目

Cargo构建项目

构建Rust项目的命令如下:

cargo build

该命令会编译项目代码,并在项目目录/target/debug/目录下生成可执行程序。如下:

在这里插入图片描述

说明一下:

  • 第一次运行cargo build会在项目顶层目录下生成Cargo.lock文件,该文件负责追踪项目依赖的精确版本,一般情况下不需要手动修改文件内容。

Cargo构建并运行项目

Cargo构建并运行项目

构建并运行Rust项目的命令如下:

cargo run

该命令会编译项目代码生成可执行程序,并自动执行可执行程序。如下:

在这里插入图片描述

如果之前编译成功过,并且源代码没有改变,那么执行cargo run就会直接运行可执行程序。如下:

在这里插入图片描述

Cargo检查项目

Cargo检查项目

检查Rust项目的命令如下:

cargo check
  • 该命令会检查项目代码,确保代码能够通过编译,但不会产生任何可执行文件。
  • cargo check比cargo build快得多,开发者在编写程序的过程中会反复调用cargo check,以保证自己写的代码可以通过编译,只有在真正需要生成可执行程序的时候才会调用cargo build或cargo run。

如果将Hello World程序中的英文分号换成中文分号,那么在cargo check时就会发现错误。如下:

在这里插入图片描述

Cargo为发布构建项目

Cargo为发布构建项目

为发布构建Rust项目的命令如下:

cargo build --release

该命令会在编译代码时会进行优化,以保证编译出来的代码会运行得更快。如下:

在这里插入图片描述

需要注意的是,为发布构建Rust项目生成的可执行程序在项目目录/target/release/目录下。如下:

在这里插入图片描述

相关文章:

Rust入门基础

文章目录 Rust相关介绍为什么要用Rust?Rust的用户和案例 开发环境准备安装Rust更新与卸载Rust开发工具 Hello World程序编写Rust程序编译与运行Rust程序 Cargo工具Cargo创建项目Cargo构建项目Cargo构建并运行项目Cargo检查项目Cargo为发布构建项目 Rust相关介绍 为…...

民族民俗景区3d智慧旅游系统提升游客旅游体验和质量

随着科技的不断发展,传统的旅游方式正在逐渐被新的技术和系统所取代。网上3D沉浸式旅游体验凭借其身临其境的沉浸式体验优势,正成为旅游业的新宠。 网上3D沉浸式旅游体验是将旅游景区、度假区、休闲街区、科博馆等场所空间,利用VR全景制作、w…...

Webpack 解决:Error: error:0308010C:digital envelope routines::unsupported 的问题

1、问题描述: 其一、报错为: Error: error:0308010C:digital envelope routines::unsupported 中文为: 错误:错误:0308010C:数字信封例程::不支持 其二、问题描述为: 在项目打包的时候 np…...

JAVA操作Json的ObjectMapper类

JAVA操作Json的ObjectMapper类 市面上用于在 Java 中解析 Json 的第三方库,随便一搜不下几十种,其中的佼佼者有 Google 的 Gson以及本文的 jackson。 三者不相伯仲,随着掌握一个都能满足项目中的 json 解析操作,因为 Spring Boot…...

Docker--harbor

一,registry registry是私有仓库的核心,只有字符终端。 二,registry部署 #首先下载 registry 镜像 docker pull registry#在 daemon.json 文件中添加私有镜像仓库地址 vim /etc/docker/daemon.json {"insecure-registries": [&q…...

Flink中的时间和窗口

1.Flink的时间和窗口 在传统的批处理系统中,我们可以等到一批数据全部都到齐了之后,对其做相关的计算;但是在实时处理系统中,数据是源源不断的,正常情况下,我们就得来一条处理一条。那么,我们应…...

Ultra-Fast-Lane-Detection 车道线学习资料整理

目录 官方版本 两个优化 数据标注,降低参数量 1 数据标注 2降低参数量...

【Ubuntu】Ubuntu18.04终端卡顿问题

博主您好,我也遇到了类似的问题,但我找到了问题的原因: 在gnome-terminal中,按tab补全是默认开启了“咚咚咚”音效的,在gnome-terminal里把音效关掉就好了,主要是因为按tab时,NVIDIA的视频信号和…...

k8s强制删除pod、svc、namespace(Terminating)

如果名称空间、pod、pv、pvc全部处于“Terminating”状态时,此时的该名称空间下的所有控制器都已经被删除了,之所以出现pod、pvc、pv、ns无法删除,那是因为kubelet 阻塞,有其他的资源在使用该namespace,比如CRD等&…...

froeach迭代删除和List迭代删除问题

场景:我有一个 List<ISSLogMessage> records 数据,需要从里面删除指定内容数据 第一次写成 foreach(var item in records) {if (item.logMessage.Contains("上传通行记录"))records.Remove(item); } 直接报错,因为foreach 是个迭代器 直接移除它的对象会报…...

chromedriver下载地址

ChromeDriver下载地址&#xff1a; 淘宝镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathchromedriver/ 官方镜像&#xff1a;https://sites.google.com/a/chromium.org/chromedriver/downloads在下载页面上&#xff0c;将看到一列Chrome浏览器的版本号和相…...

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

概述 12v / 24v智能模拟高侧MOSFET栅极驱动器。 特性 PRO-SIL ISO 26262-准备根据ISO 26262:2018条款8-13支持硬件元件评估的集成商。一个通道器件具有两个高侧栅极驱动器输出。3 Ω下拉,50 Ω上拉,用于快速开关开/关。支持背靠背MOSFET拓扑(共漏极和共源)。两个双向高侧模拟…...

什么是Fetch API?与传统的AJAX相比,有什么优势?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

43.241.18.123哪些问题会导致服务器里面时间错误

我们在使用服务器的过程中&#xff0c;有时候可能会发现&#xff0c;服务器里面时间跟标准的时间对不上&#xff0c;那服务器里面时间错误可能由哪些问题引起&#xff1a; 硬件问题&#xff1a;服务器硬件中的时钟或电池可能损坏或失效&#xff0c;导致时间不准确或重置为默认…...

【ElasticSearch】更新es索引生命周期策略,策略何时对索引生效

大家好&#xff0c;我是好学的小师弟&#xff0c;今天和大家讨论下更新es索引生命周期策略后&#xff0c;策略何时对索引生效 结论: 若当前索引已应用策略A(旧)&#xff0c;更新完策略A后&#xff0c;新的策略A会立即对原来的已经应用该策略的索引生效&#xff1b;若当前索引…...

卫星/RedCap/高算力/解决方案/创新金奖……移远通信为IOTE 2023再添新活力

9月20日&#xff0c;IOTE 2023第二十届国际物联网展深圳场震撼来袭。 作为IOTE多年的“老朋友”&#xff0c;移远通信在参展当天&#xff0c;不仅有5G RedCap、卫星通信、高算力、车载等高性能产品及终端展出&#xff0c;还携智慧出行、智慧生活、智慧能源、工业互联网等多领域…...

N9030B是德科技信号分析仪

181/2461/8938它能够实现对复杂信号的实时捕获、分析和处理。Keysight N9030B采用了最先进的技术和设计&#xff0c;为工程师和科学家们提供了一系列强大的功能&#xff0c;帮助他们更好地进行信号分析&#xff0c;以满足不断变化的应用需求。 Keysight N9030B采用了全新的硬件…...

Mysql索引原理

文章目录 一、Mysql索引原理1.1 mysql记录存储结构1.2 主键索引1.3 普通索引1.4 联合索引 一、Mysql索引原理 1.1 mysql记录存储结构 mysql默认使用innodb存储引擎存储数据。以页为最小单位存取数据&#xff0c;页的大小为16KB往mysql表中插入记录时&#xff1a;一个页中存放…...

apifox的使用以及和idea集成

apifox 简介 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;定位 Postman Swagger Mock JMeter&#xff0c;由此可见apifox集功能于一身&#xff0c;极大的提升了我们开发的效率&#xff0c;不用再为postman网络连接失败而发愁&…...

css:过渡transition 、转换transform、动画animation

一、过渡效果&#xff1a;transition 属性 transition 属性是CSS3中用来实现元素过渡效果的属性之一。它定义了元素在不同状态之间平滑过渡的效果&#xff0c;让元素的改变更加流畅和动态。 transition 属性包括以下几个子属性&#xff1a; transition-property&#xff1a;指…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...