rust入门(rust教程、rust安装方法)

文章目录

  • Rust开发入门
    • Rust的特性
    • Rust的应用场景
    • Rust安装——环境配置
      • 1. 安装rustup
        • 具体执行步骤
      • 2. 验证安装
    • Rust的卸载
    • 基本语法
      • 变量与数据类型
      • 控制流
      • 函数
    • Rust的所有权系统
    • 错误处理
    • 实战:构建一个小项目
      • 创建新项目
      • 编写代码
      • 运行项目
        • 安装相关链接器
        • 运行
      • 删除项目

Rust开发入门

Rust是一种专注于性能、并发和内存安全的系统编程语言。本文旨在为那些对此语言感兴趣的人提供一个初步的入门指南。

Rust的特性

Rust是一种多范式、编译型的系统编程语言,它注重于性能和安全,特别是并发和内存安全1。Rust采用了许多先进的语言特性,包括类型推导、模式匹配、借用检查和零成本抽象等。

Rust的应用场景

Rust被设计为能够处理大量的并发和高性能的软件,这使得它适合在游戏开发、操作系统开发、浏览器引擎开发以及嵌入式系统等领域发挥巨大的作用。


Rust安装——环境配置

要开始使用Rust,首先需要在你的计算机上安装它。以下是一些基本的步骤:

1. 安装rustup

rustup是Rust版本管理和工具链安装的命令行应用。你可以从rustup.rs网站下载并安装它。

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

这条命令下载了一个shell脚本,并用shell执行它,该脚本安装Rust编程语言和rustup工具链。

注意如果没有curl先安装curl,ubuntu上使用:

sudo apt update ; apt install curl
具体执行步骤

终端输入:

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

在这里插入图片描述

我们敲1按回车,选择默认安装:

在这里插入图片描述

上面提示我们说已经安装好了,需要重启shell会话来重新加载环境变量。

2. 验证安装

我们重启shell后,通过运行下面的命令,来检查是否安装成功。

rustc --version

在这里插入图片描述

已经安装成功了。


Rust的卸载

如果是通过rustup安装的Rust,可以使用下面的命令卸载Rust和rustup,它将会卸载rustup以及rustup安装的所有工具链和配置,包括Rust编译器(rustc)、Rust的包管理器(cargo)等:

rustup self uninstall

基本语法

在介绍了如何安装Rust之后,让我们看一下它的基本语法。

变量与数据类型

Rust是静态类型的,这意味着在编译时必须知道所有变量的类型。这是一个声明变量的示例:

let x: i32 = 10;

Rust拥有许多不同的数据类型,包括但不限于整型、浮点型、布尔型、字符型、数组和字符串等。

控制流

Rust支持常见的控制流语句,包括ifelsewhilefor循环和match模式匹配。

函数

在Rust中,你可以使用fn关键字来定义函数。以下是一个函数的例子:

fn add(x: i32, y: i32) -> i32 {
    x + y
}

Rust的所有权系统

Rust的所有权系统是一种编译时的内存管理机制,它可以保证内存安全而无需垃圾收集。所有权系统基于三个主要的规则2

  1. Rust中的每一个值都有一个被称为其所有者(owner)的变量。
  2. 一次只能有一个所有者。
  3. 当所有者离开作用域,这个值将被丢弃。

错误处理

Rust提供了一套强大的错误处理机制,它区分了可恢复的错误和不可恢复的错误。对于可恢复的错误,我们通常返回Result<T, E>类型;对于不可恢复的错误,我们使用panic!宏来停止程序执行。


实战:构建一个小项目

最后,让我们通过一个简单的命令行应用来看一下Rust的实际应用。这个应用会从文件中读取数据,并统计各单词出现的次数。

创建新项目

使用cargo创建一个新的二进制项目:

cargo new word_count
cd word_count

在这里插入图片描述
在这里插入图片描述

编写代码

进入项目:

在这里插入图片描述

src/main.rs文件中,添加以下代码:

use std::collections::HashMap;
use std::fs;

fn main() {
    let contents = fs::read_to_string("test.txt")
        .expect("Something went wrong reading the file");

    let mut map = HashMap::new();
    for word in contents.split_whitespace() {
        let count = map.entry(word).or_insert(0);
        *count += 1;
    }

    println!("{:?}", map);
}

在这里插入图片描述

这段代码首先从test.txt文件中读取内容,然后对每个单词进行计数,并将结果存储在HashMap中。

同时在word_count目录下创建test.txt文件,并添加以下内容:

Hello world this is a test file. This file will be read by the Rust program.
Let's count the number of word in this text.

在这里插入图片描述
在这里插入图片描述

运行项目

安装相关链接器

注意:运行前请确保系统已安装相关链接器:

比如我这因为找不到cc链接器而报错了:

在这里插入图片描述

执行:

which cc

发现什么都没有:

在这里插入图片描述

解决方法:安装build-essential包,它包含了GCC、G++和其他一些基本的开发工具:

sudo apt update
sudo apt install build-essential

装好后就有cc链接器了:

在这里插入图片描述

运行

使用cargo运行你的项目:

cargo run

运行结果:

在这里插入图片描述

结果显示了每个单词在文本中的出现次数。(因为没有做细节处理,所以file.也会被当作一个单词)

删除项目

直接删除项目目录即可:

rm xxx -r

在这里插入图片描述


现在,你已经完成了你的第一个Rust项目!


  1. “The Rust Programming Language”, Steve Klabnik and Carol Nichols, No Starch Press, 2019. ↩︎

  2. “Programming Rust: Fast, Safe Systems Development”, Jim Blandy and Jason Orendorff, O’Reilly Media, 2016. ↩︎

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

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

相关文章

第十五届蓝桥杯模拟赛(第二期)

第一题 计算 答案&#xff1a;108 std::cout<<36*30/10; 第二题 快速幂 答案&#xff1a;608 #include<bits/stdc.h> const int mod1e3; #define int long long int qmi(int a,int b) {int res1;while(b){if(b&1) res(res*a)%mod;b>>1;aa*a%mod;}return…

【数据库】基于封锁的数据库调度器,以及等待锁处理的优先级策略

封锁调度器的体系结构 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会…

Redis中分布式锁的使用

在分布式系统中&#xff0c;如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题&#xff0c;有这样一个案例&#xff0c;有一件商品购买规则为一个用户只能购买一次&#xff0c;如果使用同步锁锁住用户id&am…

C# Spire操作Excel数据透视表

一、概述 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等&#xff0c;可动态地改变透视表版面布置&#xff0c;也可以重新安排行号、列标和页字段。当改变版面布置时&#xff0c;数据透视表也会按照新…

PMP-01

考纲 需要看的书籍 学习计划

奇技淫巧第9期

今天回顾一下 5~12 月所遇到的零碎知识点。 文章目录 歪门邪道优雅删除“学习资料”快速下载 vscode两种硬盘格式zotero在word中插入参考文献markdown 下划线查看 CPU Linux 命令postgres 无法通过 root 用户操作bash 初学者礼包gitwin 11 edge 浏览器0x80190001 报错 python …

Pycharm调用Conda虚拟环境

参考这个链接的评论区回答&#xff1a;Pycharm调用Conda虚拟环境 笑死&#xff0c;我之前也是这样的&#xff0c;不过好像也能用&#xff0c;搞不懂~

蓝桥杯每日一题2023.12.2

题目描述 蓝桥杯大赛历届真题 - C 语言 B 组 - 蓝桥云课 (lanqiao.cn) 题目分析 答案&#xff1a;3598180 由题目分析可以知道&#xff0c;给小明发的牌一共有13种类型&#xff0c;每种类型的牌一共有四张。对于每种牌&#xff0c;我们都有5种选择&#xff0c;不拿、拿一张、…

WebGL笔记:矩阵缩放的数学原理和实现

矩阵缩放的数学原理 和平移一样&#xff0c;以同样的原理&#xff0c;也可以理解缩放矩阵让向量OA基于原点进行缩放 x方向上缩放&#xff1a;sxy方向上缩放&#xff1a;syz方向上缩放&#xff1a;sz 最终得到向量OB 矩阵缩放的应用 比如我要让顶点在x轴向缩放2&#xff0c;y轴…

ArrayList 与 顺序表 (附洗牌算法)!

曾经我也是一枚学霸&#xff0c;直到有一天想去学渣的世界看看&#xff0c;结果就找不到回去的路了。 目录 1. 线性表 2.顺序表 2.1 接口的实现 3. ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 4.4 ArrayList的扩…

分享66个焦点幻灯JS特效,总有一款适合您

分享66个焦点幻灯JS特效&#xff0c;总有一款适合您 66个焦点幻灯JS特效下载链接&#xff1a;https://pan.baidu.com/s/10bqe09IAZt_hbsZlXaxkxw?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;…

万能的视频格式播放器

今天博主给大家带来一款“万能”的视频播放器——VLC Media Player&#xff0c;支持的文件格式非常多&#xff0c;大家快来一起看看吧&#xff01; VLC Media Player 是一款可播放大多数格式&#xff0c;而无需安装编解码器包的媒体播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、D…

Tektronix泰克示波器

一、what’s the oscilloscope&#xff1f; 【ref】https://www.tek.com.cn/blog/what-is-an-oscilloscope 二、基础知识 1、带宽&#xff1a;100Mhz&#xff1b;采样率&#xff1a;2.5GS/s 1GS/s指的是采样率&#xff0c;前面大写的S是sample采样的意思 后面的s是秒 也就是示波…

粉丝提问:岗位与描述不一致,小公司感觉学不到东西,工作内容就是调试,想辞职

0、粉丝问题&#xff1a; 大哥&#xff0c;我毕业已经工作两个月了&#xff0c;在一家小公司&#xff0c;岗位和描述的不一致&#xff0c;感觉就像调试一样&#xff0c;写代码的机会很少也没人带&#xff0c; 我想转嵌入式&#xff0c;您有什么建议的方向吗&#xff0c;或者是…

MathType公式编辑器安装教程

一、下载 MathType7是一款可以帮助用户快速完成数学公式编辑的应用软件&#xff0c;这款软件适合在进行教育教学、科研机构、论文写作的时候使用。我们可以直接通过这款软件来获取到大量数学上使用到的函数、数学符号等内容&#xff0c;然后使用这些内容来完成公式编辑。 …

玩转大数据4:大数据的崛起与应用领域探索

图片来源网络 引言 在当今数字化时代&#xff0c;大数据正以前所未有的速度和规模崛起。大数据的出现不仅改变了企业和组织的经营模式&#xff0c;也对我们的社会生活带来了深刻的影响。Java作为一种广泛使用的编程语言&#xff0c;在大数据领域发挥着重要的作用。本文将重点…

自动驾驶学习笔记(十三)——感知基础

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 传感器 测距原理 坐标系 标定 同…

初识Linux:保姆级教学,让你一秒记住Linux中的常用指令!

文章目录 前言一、LInux的背景及发展史二、Linux下的基本指令1、ls指令2、pwd指令3、cd指令4、touch指令5、mkdir指令&#xff08;重要&#xff09;6、tree指令7、rmdir指令和rm指令&#xff08;重要&#xff09;8、man指令&#xff08;重要&#xff09;9、cp指令&#xff08;重…

操作PDF相关的工具,EPUB转PDF,golang

unipdf 安装依赖 go get github.com/unidoc/unipdf/v3 示例代码 https://github.com/unidoc/unipdf-examples 获取KEY 登录 https://cloud.unidoc.io/ 注册账号&#xff0c;生成 KEY&#xff0c;但是需要收费。 chromedp 使用Golang编写&#xff0c;主要功能是调用浏览器内…

【面试攻略】Oracle中blob和clob的区别及查询修改方法

大家好&#xff0c;我是小米&#xff0c;欢迎来到小米的技术小屋&#xff01;今天我们要一起来聊聊一个在面试中常常被问到的问题——“Oracle中Blob和Clob有啥区别&#xff0c;在代码中怎么查询和修改这两个类型的字段里的内容&#xff1f;”别急&#xff0c;跟着小米一步步揭…
最新文章