Rust入门基础

news2024/11/15 21:39:45

文章目录

  • 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/目录下。如下:

在这里插入图片描述

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

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

相关文章

关于串口服务器及转接线的一些基础知识笔记

1.普通个人计算机9针串口为232接口,部分特殊工业计算机为485接口。接线方式差异较大,容易区分。 2.串口服务器的作用:带串口的设备(支持常见232、485/422接口方式),将其串口数据信号通过串口服务器转为网络…

角谷猜想:键盘输入一个整数,输出角谷猜想验证过程

键盘输入一个整数,输出角谷猜想验证过程。 (本笔记适合python循环、if条件语句、字符串格式化输出的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&…

cdsn目录处理:空行替换2个```,在2个```中间添加“# 空行文本后遇到的第1行文字”?

原标题: python查找替换:查找空行,空行前后添加,中间添加 # 空格 空行后遇到的第1行文字?初始代码 查找空行空行前后添加 中间添加 # 空行后遇到的第1行文字txt 36 96 159 8 72可以使用Python的字符串处理函数来查找…

【数据库系统概论】第一章数据库绪论

第一章目录: 1.1数据库系统概述 1.1.1四个基本概念 数据: 数据库:Database -DB 数据库管理系统(DBMS) 数据库系统(DBS)(有四个组成要素) 1.1.2数据管理技术的产生…

【电商API封装接口】电商百万商品资源一键导入,助力企业流量变现

电商API接口是淘宝开放平台提供的一组数据接口,供开发者使用来获取淘宝平台上商品、店铺、订单等相关信息。根据功能和分类,淘宝API主要包括以下几个方面: 1. 商品API:提供了搜索、详情、评价等与商品相关的接口,可以…

vue2 打印数据 以及使用 (2)

安装 To install using npm:npm install print-js --saveTo install using yarn:yarn add print-js页面效果 <template><div><table width"100%" height"100%" border"1"><tr><td colspan"1">1</td&…

python图片处理:添加背景文生图(2)

文生图3.0&#xff1a;添加背景图片 3个回车文生图꧂写在前面&#xff1a;肉麻的话꧁ 哈哈&#xff0c;我明白了&#xff01;请允许我再试一次以幽默的方式来重新描述文本&#xff1a; 亲爱的主人大大&#xff0c;你是超级棒的&#xff01;如果你不想处理枯燥的代码&#xff0…

前端TypeScript学习day03-TS高级类型

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 TypeScript 高级类型 class 类 class继承 extends implements 类成员可见性 public protected …

c语言终点站--文件操作

前言&#xff1a; 为什么要学习文件操作呢&#xff1f;想要知道这个问题&#xff0c;我们就需要先了解什么是数据的可持久化。 那么什么是数据的可持久化呢&#xff1f;数据的可持久化就是把内存中的数据对象永久的保存在电脑的磁盘文件中&#xff0c;将程序数据在持久状态和…

mysql面试题40:列值为null或者空字符串时,查询是否会用到索引?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:列值为null或者空字符串时,查询是否会用到索引? 当列的值为NULL时,查询可能会使用索引,但具体是否使用索引取决于数据库的优化器和查询条件。…

点向行列连边的网络流图优化成行列连边的二分图:CF1592F2

https://www.luogu.com.cn/problem/CF1592F2 做完F1&#xff0c;然后用1的结论来思考。 场上推了几个性质。首先op4的操作行列必然两两不同&#xff0c;所以op4最多 max ⁡ ( n , m ) \max(n,m) max(n,m) 次。然后手玩发现只有除 ( n , m ) (n,m) (n,m) 的三个格子都为1&am…

ChatGPT 是如何产生心智的? | 京东云技术团队

一、前言 - ChatGPT真的产生心智了吗&#xff1f; 来自斯坦福大学的最新研究结论&#xff0c;一经发出就造成了学术圈的轰动&#xff0c;“原本认为是人类独有的心智理论&#xff08;Theory of Mind&#xff0c;ToM&#xff09;&#xff0c;已经出现在ChatGPT背后的AI模型上”…

芯科蓝牙BG27开发笔记10-BG27样板调试

样板使用了1.5V电源&#xff0c;boost升压到1.8V供MCU使用&#xff0c;因此IO通信的电平需要注意&#xff1a; 不能使用常用的5V、3.3V的jlink进行调试&#xff0c;类似的uart通信也一样。 BRD4001A底板的jlink如何使用&#xff1f; 参考开发板套件的说明文档《ug551-brd4194…

purr map walk 学习教程 完整版教程学习

Function reference • purrrhttps://purrr.tidyverse.org/reference/index.htmlMap over multiple input simultaneously (in "parallel") — pmap • purrr 11 Other purrr functions | Functional Programming (stanford.edu) 关注微信&#xff1a;生信小博士 1…

【解决问题思路分析】记录hutool默认使用服务端上次返回cookie的问题解决思路

背景&#xff1a; 本服务需要调用第三方接口获取数据&#xff0c;首先调用public-key接口获取公钥&#xff0c;然后用公钥加密密码&#xff0c;将用户名和密码传入/ticket接口&#xff0c;获取Cookie和response body中的token。 排查思路 由于是调用第三方接口出现问题&…

OnlyOffice文档服务器安装及集成使用

OnlyOffice文档服务器安装及集成使用 一、安装1.使用docker安装2.开启防火墙3.配置4.访问测试 二、应用集成1.前端集成(React)(1).安装onlyoffice/document-editor-react(2).使用 ONLYOFFICE 文档 React 组件 2.后台集成(Java)(1) getFile接口(2) callback接口(3) getFile接口和…

SpringBoot拦截器实现

1.定义一个拦截器类&#xff0c;实现HandlerInterceptor接口 创建一个Interceptor类实现HandlerInterceptor接口&#xff0c;重写preHandle()&#xff0c;postHandle()&#xff0c;afterCompletion() 三个方法 如下代码&#xff0c;我们就创建了一个Spring的拦截器 /*** auth…

战神引擎传奇假设教程

战神引擎传奇假设教程 --------------------------------------------------------------------------------------------------- 传奇这款游戏可以说是一代人的回忆&#xff0c;特别是8090后&#xff0c;传奇对他们有着许许多多的难忘的回忆&#xff0c; 随着时代的发展&…

typora常用偏好设置

启用自动保存 关闭拼写检查 插入图片的设置 将图片保存在当前文件夹内 换行设置 关闭换行符的显示功能

LeetCode【155】最小栈

题目&#xff1a; 代码&#xff1a; class MinStack {Deque<Integer> xStack;Deque<Integer> minStack;public MinStack() {xStack new LinkedList<Integer>();minStack new LinkedList<Integer>();minStack.push(Integer.MAX_VALUE);}public voi…