rust基础之环境搭建

文章目录

  • [1 rust](#1 rust)
    • [1.1 简介](#1.1 简介)
    • [1.2 下载](#1.2 下载)
      • [1.2.1 下载安装rustup](#1.2.1 下载安装rustup)
      • [1.2.2 MSVC和Gnu区别](#1.2.2 MSVC和Gnu区别)
      • [1.2.3 切换国内镜像地址](#1.2.3 切换国内镜像地址)
        • [1.2.3.1 cargo 国内地址](#1.2.3.1 cargo 国内地址)
        • [1.2.3.2 rustup 国内地址](#1.2.3.2 rustup 国内地址)
    • [1.3 rustup](#1.3 rustup)
    • [1.4 cargo](#1.4 cargo)
    • [1.5 项目中文件](#1.5 项目中文件)

1 rust

1.1 简介

Rust 是由 Mozilla 主导开发的高性能编译型编程语言,遵循"安全、并发、实用"的设计原则,首次发布于 2010 年。

Rust 支持多种编程范式,包括函数式、并发式、过程式和面向对象风格。

由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

rust中文网站

与C/C++相比:

  • C语言的语法相对简单,是三者中最基础的:
    语法结构清晰,关键字较少,没有复杂的类型系统和泛型概念,指针操作直接明了
  • C++ 在C的基础上增加了大量复杂特性:
    面向对象编程,模板和泛型,异常处理,STL标准库,多重继承等复杂概念
  • Rust的语法相对复杂但有其逻辑性:
    所有权系统,模式匹配,生命周期概念,严格的类型系统

1.2 下载

1.2.1 下载安装rustup

rust 环境搭建要用rustup比较方便点,rustup 用于管理不同平台下的 Rust 构建版本并使其互相兼容, 支持安装由 Beta 和 Nightly 频道发布的版本,并支持其他用于交叉编译的编译版本。

rustup 是 Rust 的工具链管理器(rustc + cargo + std + linker) 配置它能:

  • 安装和管理多个 Rust 版本(stable、beta、nightly)
  • 安装不同的目标平台编译支持
  • 管理 Cargo(Rust 的包管理器)
  • 提供工具如 rustfmt、clippy 等

win环境直接下载rustup地址:

也可以直接使用 scoop(点击了解win环境下scoop使用教程)装 rustup,命令:scoop install main/rustup,执行完后,直接自动执行rustup-init.exe(使用的是默认msvc),而不像直接下载还需要手动执行rustup-init.exe,另外会自动添加用户环境变量,同时创建了CARGO_HOME / RUSTUP_HOME

其中,RUSTUP_HOME 是工具链仓库,CARGO_HOME是包和工具缓存,如果不设置,那么都在默认用户目录下:C:\Users\<username>\.rustup和C:\Users\<username>\.cargo

scoop安装成功图示如下:

1.2.2 MSVC和Gnu区别

使用MSVC适用下面场景:

  • windows-sys / windows crate
  • 写 Windows GUI
  • 调用系统 DLL
  • 做可分发的 Windows 程序

适应Gnu场景:

  • 学 Rust 语法 / 所有权 / 生命周期
  • 写小 demo,写 CLI 程序
  • 算法 / 数据结构练习
  • 跑 cargo test
  • 不写 Windows GUI
  • 不直接调用 WinAPI / COM

下载Visual C++ Build Tools:https://visualstudio.microsoft.com/visual-cpp-build-tools/

或者切换 rustup为gnu 工具链(使用MinGW)命令,此时不用下载类似MSVC的三方工具,rustup自带的有gnu

bash 复制代码
# 安装 gnu 对应工具链
rustup toolchain install stable-x86_64-pc-windows-gnu
# 如果刚开始是gnu需要装下 msvd  
# rustup toolchain install stable-x86_64-pc-windows-msvc
# 或者使用  rustup install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu


验证
rustup show

1.2.3 切换国内镜像地址

Rustup Cargo
用途 安装/更新 Rust 工具链本身(rustc、rust-std、cargo、rust-docs 等) 下载 项目依赖包(serde、tokio、actix-web 等 crates)
下载内容 rustc.exe、libstd、cargo.exe 等官方组件 serde-1.0.200.crate、tokio-1.37.0.crate 等第三方库
触发时机 rustup install、rustup update、rustup component add cargo build、cargo run、cargo add
存储位置(默认) ~/.rustup/toolchains/ ~/.cargo/registry/cache/
配置方式 环境变量 RUSTUP_DIST_SERVER 配置文件 config.toml
1.2.3.1 cargo 国内地址

切换cargo国内下载地址,如果没有添加CARGO_HOME,那么就在 C:\Users\<username>\.cargo,但是上面用的是scoop下载安装,那么就是在scoop下D:\Scoop\persist\rustup\.cargo下添加文件config.toml

bash 复制代码
# 声明要对"官方源 crates-io"做替换
[source.crates-io]
# 以后凡是本来要去 crates-io 的,都改去下面定义的 ustc 源
replace-with = "ustc"

[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"

其他可选的国内镜像源:

1.2.3.2 rustup 国内地址

下载时牵涉的两个环境变量:

环境变量 用途 下载内容 触发命令
RUSTUP_DIST_SERVER 工具链组件分发 rustc、rust-std、cargo、rust-docs、clippy 等 rustup install、rustup update、rustup component add
RUSTUP_UPDATE_ROOT Rustup 自身更新 rustup-init.exe、rustup 新版本二进制 rustup self update

rustup 使用环境变量

bash 复制代码
setx RUSTUP_DIST_SERVER https://mirrors.ustc.edu.cn/rust-static
setx RUSTUP_UPDATE_ROOT https://mirrors.ustc.edu.cn/rust-static/rustup

1.3 rustup

rustup相关命令介绍

场景 命令示例 说明
help rustup help 查看rustup命令
rustup help <子命令> 查看rustup 子命令
查看信息 rustup show 显示当前安装的所有工具链及默认版本
rustc --version 只看当前生效的 rustc 版本
rustup which cargo 查看实际指向的 cargo 路径
安装/卸载工具链 rustup install stable 安装最新 stable 工具链
rustup install 1.86.0 安装指定版本工具链
rustup install nightly 安装最新 nightl工具链y
rustup uninstall 1.86.0 卸载指定版本工具链
切换默认工具链 rustup default stable 全局换成 stable工具链
rustup default nightly 全局换成 nightly工具链
项目级版本锁定 rustup override set nightly 在当前项目目录固定 nightly
rustup override unset 取消目录级锁定
更新 rustup update 更新 rustup 本身及所有已装工具链
rustup update nightly 只更新 nightly
组件管理 rustup component add rustfmt clippy 一次性安装多个组件
rustup component list --installed 查看已装组件
rustup component remove rustfmt 卸载组件
目标平台(交叉编译) rustup target add wasm32-unknown-unknown 加装 32-bit WebAssembly
rustup target list --installed 查看已装目标
一次性运行指定版本 rustup run nightly cargo build 用 nightly 临时跑一条命令
生成 shell 补全 rustup completions bash > ~/.local/share/bash-completion/completions/rustup 支持 bash/zsh/fish/pwsh
卸载 rustup rustup self uninstall 一键卸载整个 Rust 环境
toolchain rustup toolchain install stable 安装最新 stable 工具链
rustup toolchain list 展示工具链列表
rustup toolchain remove nightly 移除工具链

1.4 cargo

cargo相关命令介绍,

任何命令后加 --help 可看全部选项

cargo --list 列出所有子命令

场景 命令示例 说明
项目生命周期 cargo new my_app 新建可执行项目
cargo new --lib my_lib 新建库项目
cargo run 快速编译运行(调试)
cargo check 检查能否编过(最快)
cargo build 正式构建(调试)
cargo build --release 发布级构建
cargo clean 清理中间文件
cargo build -j 8 限制并行任务数
cargo build --timings 生成耗时火焰图,定位慢包
依赖管理 cargo add serde 添加最新版依赖
cargo remove serde 移除依赖
cargo add tokio --features full 添加指定版本/特征
cargo update 升级 lock 文件里所有包
cargo update -p serde 只升级某个包
cargo tree 查看依赖树
cargo outdated(需 cargo install cargo-outdated) 查看过时包
测试 & 文档 cargo test 跑全部测试
cargo test --lib 只测某个模块
cargo nextest run(需安装 nextest) 连续测(保存状态)
cargo doc --open 生成并打开文档
cargo doc --no-deps(反向) 给依赖也生成文档
代码质量 cargo fmt 自动格式化
cargo clippy 检查代码风格/常见错误
cargo clippy --fix 自动修复部分 clippy 警告
发布&注册表 cargo package 打包并验证
cargo publish 发布到 crates.io
cargo login / cargo logout 登录/注销
cargo search regex 查询注册表
扩展子命令 cargo install cargo-audit 检查依赖安全漏洞
cargo install cargo-edit 获得 add/rm/upgrade 命令
cargo install cargo-outdated 查看可升级依赖
cargo install cargo-nextest 更快并行测试运行器

1.5 项目中文件

Cargo.lock 锁的是"代码用什么库",使用cargo new 项目时自动生成

.rustup-toolchain.toml 锁的是"代码用什么编译器",需要手动创建,比如:

bash 复制代码
# .rustup-toolchain.toml
[toolchain]
channel = "1.86.0"
components = ["rustfmt", "clippy"]
targets = ["wasm32-unknown-unknown"]
相关推荐
2601_966949657 分钟前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
坤坤子吖10 分钟前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_198620 分钟前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
夜之眷属34 分钟前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
weixin1997010801635 分钟前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
波加曼大王37 分钟前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff41 分钟前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__1 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
神仙别闹1 小时前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
ACP广源盛139246256731 小时前
Type‑C 扩展坞方案选型笔记|国产 DP1.4 转 HDMI2.0 桥接芯片 GSV2201S @ACP评估
c语言·开发语言·笔记·硬件架构·硬件工程·国产芯片