Linux如何安装利用Rust指南

news/2025/11/18 21:20:40/文章来源:https://www.cnblogs.com/gccbuaa/p/19239364

目录

Rust是什么

系统级编程语言

设计目标

核心特点

1. 内存安全(无垃圾回收)

2. 所有权系统

3.  fearless Concurrency(无畏并发)

4. 高性能

5. 丰富的类型系统和模式匹配

6. 现代化的工具链

环境搭建

系统环境

安装过程

验证安装

第一个程序经典时尚helloworld

前提

创建新项目

运行程序

Cargo常见命令

实用的一个项目

运行结果

项目结构


Rust是什么

系统级编程语言

Rust 是一门专注于速度、内存安全和并行性的系统级编程语言。它由Mozilla研究院在2006年发起并开发,旨在创建一个能够替代C++的、更安全、更现代的语言。

设计目标

在保证C/C++级别的高性能和底层控制能力的同时,通过其独特的编译时所有权系统,从根本上解决内存管理和并发编程中的常见错误。

核心特点

1. 内存安全(无垃圾回收)


传统上,内存管理主要有两种方式:

手动管理(C/C++): 性能极高,但极易出现内存泄漏、悬空指针等问题。

垃圾回收(Java, Go, Python): 自动管理内存,减少了错误,但会在运行时带来性能开销和不确定性暂停。

Rust采取了第三种方式:通过一套在编译时强制执行的 “所有权系统” 来管理内存。编译器会在编译阶段就检查所有内存访问是否安全,如果代码违反了所有权规则,程序将无法通过编译。这意味着:

零成本抽象: 内存管理没有运行时开销。

无悬空指针、无缓冲区溢出、无内存泄漏(在安全代码中)。

2. 所有权系统


这是Rust的基石,由三个核心规则组成:

1.Rust中的每一个值都有一个被称为其所有者的变量。

2.值在任一时刻有且只有一个所有者。

3.当所有者(变量)离开作用域,这个值将被丢弃(内存被自动释放)。

为了实现所有权的灵活转移和共享,Rust还提供了 “借用” 和 “生命周期” 的概念,它们与所有权系统协同工作,确保数据的引用始终有效。

3.  fearless Concurrency(无畏并发)


  Rust的所有权系统同样适用于并发编程。编译器会阻止数据竞争的发生。数据竞争通常发生在:

1.两个或更多指针同时访问同一数据。

2.至少有一个指针被用来写入数据。

2.没有同步数据访问的机制。

  Rust在编译时就能捕获这些问题,迫使开发者在编写并发代码时就必须处理好数据访问的同步与安全,从而写出更可靠的多线程程序。

4. 高性能


由于没有垃圾回收器和运行时,Rust的性能与C/C++在同一级别。它可以直接操作硬件,适合开发操作系统、游戏引擎、浏览器组件(如Firefox的Stylo引擎就是用Rust重写的)等对性能要求极高的领域。

5. 丰富的类型系统和模式匹配


Rust拥有强大而富有表现力的类型系统,并集成了功能强大的 match 模式匹配,能强制处理所有可能的情况,有效避免了空指针异常(在Rust中叫 Option<T> 类型)和其他常见的逻辑错误。

6. 现代化的工具链


Rust拥有一个非常出色的工具链,其中最著名的是 Cargo。

Cargo: 是Rust的构建系统和包管理器。它可以轻松地管理依赖、编译项目、运行测试和生成文档。

Rustfmt: 自动格式化工具,确保代码风格一致。

Clippy: 代码检查工具,能发现常见的错误和可优化的代码模式。

环境搭建

系统环境

安装过程

修改 ~/.bashrc (Bash) 或 ~/.zshrc (Zsh) 文件来添加常驻环境变量配置:

export RUSTUP_DIST_SERVER='https://mirror.xuanwu.openatom.cn'
export RUSTUP_UPDATE_ROOT='https://mirror.xuanwu.openatom.cn/rustup'

运行 source 命令使环境变量更改立即生效 (以 Bash shell 为例)。

source ~/.bashrc

运行以下命令获取并运行 rustup-init:

curl --proto '=https' --tlsv1.2 -sSf https://mirror.xuanwu.openatom.cn/rustup-init.sh | sh

按回车键直接使用默认选项安装或输入 2 开始自定义安装

选项说明默认
Default host triple目标平台架构(因平台而异)
Default toolchain工具链版本stable
Profile安装组件集default
Modify PATH是否将 Rust 添加到系统 PATHy

验证安装

运行 source 命令使环境变量更改立即生效,并且验证是否安装成功

source ~/.bashrc
rustc --version
cargo --version

如果看到版本号输出,说明安装成功。

第一个程序经典时尚helloworld

前提

由于系统缺少 C 编译器(链接器)。Rust 需要系统工具链来链接最终的可执行文件。

yum groupinstall "Development Tools"
yum install gcc

创建新项目

cargo new hello_world
cd hello_world

运行程序

# 编译并运行
cargo run
# 只编译不运行
cargo build
# 编译发布版本(优化)
cargo build --release

运行成功

Cargo常见命令

# 构建项目
cargo build
# 构建发布版本
cargo build --release
# 运行项目
cargo run
# 运行特定二进制目标
cargo run --bin variables
# 检查代码(不生成可执行文件)
cargo check
# 运行测试
cargo test
# 生成文档
cargo doc --open
# 格式化代码
cargo fmt
# 代码检查
cargo clippy
# 更新依赖
cargo update

实用的一个项目

创建一个更实用的命令行工具 src/word_counter.rs

使用vim创建word_counter.rs

use std::fs;
//从 Rust 标准库中导入文件系统模块,让我们能够进行文件操作
fn main() {let args: Vec = std::env::args().collect();if args.len() < 2 {eprintln!("Usage: {} ", args[0]);std::process::exit(1);}let filename = &args[1];// 读取文件let content = match fs::read_to_string(filename) {Ok(text) => text,Err(e) => {eprintln!("Error reading file {}: {}", filename, e);std::process::exit(1);}};// 统计信息let lines = content.lines().count();let words = content.split_whitespace().count();let characters = content.chars().count();let bytes = content.len();println!("File: {}", filename);println!("Lines: {}", lines);println!("Words: {}", words);println!("Characters: {}", characters);println!("Bytes: {}", bytes);
}

将文件移动到正确位置

# 创建 bin 目录(如果不存在)
mkdir -p src/bin
# 移动文件到正确位置
mv word_counter.rs src/bin/
# 创建一个测试文件
echo "Hello Rust World!
This is a test file.
We are learning Rust programming." > test.txt
# 运行我们的单词计数工具
cargo run --bin word_counter test.txt

运行结果

项目结构

这个程序展示了 Rust 的安全特性,编译器会确保我们处理了所有可能的错误情况,避免了运行时崩溃。

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

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

相关文章

tryhackme-网络安全基础-网络- 网络概念-24

tryhackme-Cyber Security 101-Networking-Networking Concepts 房间地址:https://tryhackme.com/room/networkingconcepts 这是网络安全入门的基础模块的计算机科学基础知识:网络概念,序号 01 表示第一篇文章,当你…

省赛前记不住的数学知识

裴蜀定理 对于 \(S=\sum\limits_{i=1}^{n}a_ix_i\) 有解的充要条件为 \(\gcd(a_1,a_2,\cdots,a_n)\mid S\)。 拉格朗日插值 \[f(x)=\sum_i\big( \prod_{j\ne i}\dfrac{x-x_j}{x_i-x_j}\big)y_i \]扩展欧拉定理 \[a^b \…

如何创建你的百Google度!!(实现双搜索引擎页面)

创建双搜索引擎页面 百Google度的网站被封了,但!!!这不影响我们创建属于自己的双搜索引擎页面! 提前准备 找到你想添加的俩个搜索引擎对应的URI 和 它预先定义用于存储搜索关键词的参数名。打开你想要的搜索引擎的…

P7152 [USACO20DEC] Bovine Genetics G

首先有一个 \(O(n^2)\) 的 dp。 设计状态 \(f_{i,0/1/2/3}\) 表示前 \(i\) 个字符以 \(A,C,G,T\) 中哪一个结尾的方案数。 \(f_{i,x}=\sum_j \sum_y f_{j,y}w(i,j,x,y)\)

如何在ISA-95体系中采用Apache Camel + MQTT Broker衔接L3与L4 Legacy应用

如何在ISA-95体系中采用Apache Camel + MQTT Broker衔接L3与L4 Legacy应用2025-11-18 21:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: …

11月18日日记

1.今天上工程实训课做方形盒子 2.明天学习马哲 3.Tomcat 10 与 Tomcat 9 的核心区别?Servlet API 版本如何适配?

一文讲清:数据清洗、数据中台、数据仓库、数据治理 - 智慧园区

你有没有遇到过这种情况?业务部门急着要一份数据报告,IT同事折腾了好几天,最后告诉你数据对不上,或者根本取不出来。 公司开会,两个部门拿着同一项业务指标的数据争论不休,因为大家手里的数字根本不一样。 想上线…

通过liquibase实现一个简单的数据库适配器,自动适配60+数据库

1. 简介 最近我打算开发一个数据库适配器,核心目的是实现数据库表结构语句的动态执行,比如常见的创建/删除操作——涉及表、视图、索引、序列等各类数据库对象。当然,这个组件的理想状态是能自动适配主流数据库,用…

题解:AT_abc428_g [ABC428G] Necklace

补一下。分享一种比较暴力的做法。 首先肯定是使用 Burnside 引理求解,不过题目并没有给定环的大小,但是由于大小为 \(n\) 的环至少要有 \(2^n\) 的美丽值,所以这个 \(n\) 只有 \(\log m\) 个。 所以可以快乐的枚举…

第十四天 mysql单表练习

一、mysql的安装 yum install myaql=安装客户端 yum install mysql-sever=安装客户端 service mysql status=查看状态 service mysql start=开启数据库 service mysql restart=重启数据库 service mysql stop=关闭数据…

人工智能之编程进阶 Python高级:第四章 数学类模块

人工智能之编程进阶 Python高级:第四章 数学类模块人工智能之编程进阶 Python高级 第四章 数学类模块@目录人工智能之编程进阶 Python高级前言一、re 模块:正则表达式(Regular Expressions)常用函数常用元字符二、…

Pandas GroupBy 的 10 个实用技巧

很多人把 groupby 理解成单纯的求和、计数这类操作,比如说算算总收入、数数用户量,然后就没了。实际上它的应用场景要广得多:计算组内特征、数据标准化、构造滚动指标、合并不同维度的统计结果,甚至处理一些复杂的…

lvs详细配置

lvs(linux virtual server) 1、概述 1、lvs简介 lvs 是一种基于linux操作系统的负载均衡解决方案,就是将请求分发到多个后端服务器上面,lvs常用于网站,数据库等需要高并发访问的场景 2、lvs架构ipvs :lvs的核心组件…

Lazarus使用cef打开文件和下载设置

Lazarus使用cef打开文件和下载设置//下载procedure TForm1.Chromium1BeforeDownload(Sender: TObject; const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const c…

题解:P14435 [JOISC 2013] 收拾吉祥物 / Mascots

\(\displaystyle{\large\textcolor{#00A0DE}{蓝是水的颜色}}\),所以我们来水一下这道蓝题的题解。 题目传送门 题意理解 我们首先给出一个 \(R\times C\) 的方格图,在其中任意 \(n\) 坐标中初始放着物品,我们依次选…

Solon AI 开发学习 - 1导引

Solon AI & MCP 是 Java 智能体开发框架,支持 Java 8-25,简化了与主流 AI 模型(如 OpenAI、DeepSeek)的集成。它提供统一接口抽象,支持多种 AI 模型(ChatModel、GenerateModel等)协作,并兼容 MCP 协议实现…

linux c 线程池

在 Linux 系统中,线程池(Thread Pool)通常用于管理并发执行的任务,以提高系统性能和资源利用率。Linux 系统本身没有内置的线程池机制,但可以通过使用系统工具、库或自定义脚本实现类似的功能。 下面我将分几个方…

linux c 文件是否存在

在 Linux 中,判断一个文件是否存在,可以使用多种命令,以下是几种常用的方法:方法 1:使用 test 或 [[ ]] 检查文件是否存在 if [ -f /path/to/file ]; thenecho + #引号 + 文件存在 + #引号 + elseecho + …

linux c 文件是否存在

在 Linux 中,判断一个文件是否存在,可以使用多种命令,以下是几种常用的方法:方法 1:使用 test 或 [[ ]] 检查文件是否存在 if [ -f /path/to/file ]; thenecho + #引号 + 文件存在 + #引号 + elseecho + …

2025 年 11 月滚珠丝杆厂家推荐排行榜,高负载滚珠丝杆,耐磨滚珠丝杆,检测仪器高速滚珠丝杆,螺母滚珠丝杆,医用自动化滚珠丝杆公司推荐

2025年11月滚珠丝杆厂家推荐排行榜:高负载与医用自动化应用优选指南 行业背景与发展趋势 滚珠丝杆作为精密传动领域的核心部件,其技术发展与制造业升级息息相关。随着工业4.0和智能制造的深入推进,高负载滚珠丝杆、…