Rust语言基础知识详解【一】

1.在windows上安装Rust

Windows 上安装 Rust 需要有 C++ 环境,以下为安装的两种方式:

1. x86_64-pc-windows-msvc(官方推荐)

先安装 Microsoft C++ Build Tools,勾选安装 C++ 环境即可。安装时可自行修改缓存路径与安装路径,避免占用过多 C 盘空间。

准备好 C++ 环境后开始安装 Rust:

在 RUSTUP-INIT 下载系统相对应的 Rust 安装程序,一路默认即可。

PS C:\Users\48370> rustup-init.exe
......
Current installation options:
​
   default host triple: x86_64-pc-windows-msvc
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes
​
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation

2.更新

要更新 Rust,在终端执行以下命令即可更新:

$ rustup update

3.卸载

要卸载 Rust 和 rustup,在终端执行以下命令即可卸载:

$ rustup self uninstall

4.检查是否安装成功

检查是否正确安装了 Rust,可打开终端并输入下面这行,此时能看到最新发布的稳定版本的版本号、提交哈希值和提交日期:

$ rustc -V
rustc 1.56.1 (59eed8a2a 2021-11-01)
​
$ cargo -V
cargo 1.57.0 (b2e52d7ca 2021-10-21)

注:若发现版本号不同,以您的版本号为准

恭喜,你已成功安装 Rust!

5.开发工具

这里我选择的是Jetbrains的RustRover,因为已经习惯使用Jetbrains全家桶的工具了,也可以使用VSCode【需要下载对应的rust-analyzer插件】。

2.认识Cargo

Cargo 是 Rust 语言的官方包管理器和构建工具,集成了代码编译、依赖管理、测试运行、文档生成、包发布等功能。它是 Rust 生态系统的核心工具,几乎每个 Rust 项目都会使用 Cargo 来管理。

核心功能

1. 项目管理

  • 项目初始化 通过 cargo newcargo init 创建项目,自动生成标准目录结构和配置文件:

    cargo new my_project   # 创建二进制可执行项目
    cargo new --lib my_lib # 创建库项目

    生成的文件结构:

    my_project/
      ├── Cargo.toml   # 项目元数据和依赖配置
      ├── Cargo.lock   # 新增的锁定文件
      ├── .gitignore   # 默认忽略 target/ 目录
      └── src/
          └── main.rs  # 主入口文件(或 lib.rs 用于库)
  • Cargo.toml 项目的核心配置文件,包含:

    • 元数据:项目名称、版本、作者、许可证等。

    • 依赖声明:直接依赖、开发依赖、构建依赖。

    • 构建配置:优化选项、特性开关(features)、目标平台等。

    示例:

    [package]
    name = "my_project"
    version = "0.1.0"
    authors = ["Your Name <your@email.com>"]
    edition = "2021"  # Rust 版本
    ​
    [dependencies]
    serde = "1.0"     # 直接依赖
    tokio = { version = "1.0", features = ["full"] }
    ​
    [dev-dependencies]
    rand = "0.8"      # 仅测试和示例使用的依赖
  • Cargo.lock

当首次运行 cargo build 或添加依赖后,Cargo 会自动生成 Cargo.lock 文件。它记录了项目依赖的精确版本信息,确保每次构建时依赖版本的一致性。

  • 位置:项目根目录下的 Cargo.lock

  • 作用:

    • 锁定所有依赖的具体版本(包括间接依赖)。

    • 确保团队成员或部署环境使用完全相同的依赖版本。

    • 防止因依赖版本意外升级导致构建失败或行为不一致。

与 Cargo.toml 的区别

Cargo.tomlCargo.lock
编辑方式手动编辑(声明依赖的版本范围)自动生成(记录依赖的精确版本)
版本控制必须提交到版本库应用项目建议提交,库项目通常不提交
示例内容serde = "1.0"(允许语义化版本更新)serde = { version = "1.0.189" }

2. 依赖管理

  • 依赖来源

    • crates.io:默认的公共包仓库(类似 npm 的 registry)。

    • Git 仓库:直接从 Git 仓库拉取代码。

    • 本地路径:引用本地其他项目作为依赖。

    示例:

    [dependencies]
    # 从 crates.io 获取
    regex = "1.5"
    # 从 GitHub 分支获取
    my_lib = { git = "https://github.com/user/my_lib", branch = "dev" }
    # 本地路径依赖
    local_lib = { path = "../local_lib" }
  • 版本解析 Cargo 使用语义化版本(SemVer)管理依赖,并自动解析依赖冲突,生成精确版本的依赖关系(记录在 Cargo.lock 文件中)。

3. 构建与编译

  • 基本命令

    • cargo build:编译项目,生成调试版二进制文件(位于 target/debug/)。

    • cargo build --release:编译优化后的生产版本(位于 target/release/)。

    • cargo run:编译并直接运行主程序。

    • cargo check:快速检查代码语法和类型,不生成二进制文件。

  • 增量编译 Cargo 默认启用增量编译,仅重新编译修改过的部分,大幅提升开发效率。

4. 测试与文档

  • 单元测试与集成测试

    • 在代码中使用 #[test] 标记测试函数。

    • 通过 cargo test 运行所有测试。

    • 支持测试过滤(如 cargo test test_add 运行特定测试)。

  • 文档生成

    • 使用 /////! 编写文档注释。

    • 通过 cargo doc 生成 HTML 文档,自动托管依赖的文档链接。

    • cargo doc --open 直接在浏览器中打开文档。

    示例:

    /// 计算两个数的和
    /// # 示例
    /// ```
    /// assert_eq!(add(2, 3), 5);
    /// ```
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }

3.Hello World!

在学习一门新的语言最开始的时候,都是要从输出hello world!开始的。下面演示一下创建rust项目以及编写、运行hello world程序。

  • 首先打开RustRover,点击“文件”->“新建”->“项目”

然后点击“创建”,这样就新建了一个rust项目。

  • 这是创建好的项目结构

  • 接下来在main.rs中写对应的程序,如下:

    fn main() {
        println!("Hello, world!");
    }

点击图中的箭头就可以运行程序了,控制台输出结果如下:

  • 接下来是对代码的解释:

    1. fn main() { ... }

    • 作用:定义程序的入口函数

    • 细节

      • 每个可执行 Rust 程序必须有一个 main 函数

      • fn 是函数定义的关键字(function 的缩写)

      • 函数体必须用花括号 {} 包裹

      • Rust 使用 4 空格缩进(非强制但社区约定)

    2. println!("Hello, World!");

    • 作用:向标准输出打印文本

    • 分解

      • println! 是一个 (macro),不是普通函数,注意结尾的 ! 符号

      • "Hello, World!" 是一个字符串字面量

      • 行尾必须有分号 ;(Rust 中大多数语句以分号结尾)

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

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

相关文章

mapbox基础,使用geojson加载fill-extrusion三维填充图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️fill-extrusion三维填充图层样式二、�…

用Python3脚本实现Excel数据到TXT文件的智能转换:自动化办公新姿势

文章目录 用Python3实现Excel数据到TXT文件的智能转换&#xff1a;自动化办公新姿势场景应用&#xff1a;为什么需要这种转换&#xff1f;技术解析&#xff1a;代码实现详解核心代码展示改进点说明 实战演练&#xff1a;从Excel到TXT的完整流程准备数据示例&#xff08;data.xl…

llaMa模型的创新

LLaMa介绍 LLaMa是基于transformer encoder的生成式模型。 目前有&#xff1a;LLAMA, LLAMA2, LLAMA3 三个大的版本 论文 LLAMA 2: Open Foundation and Fine-Tuned Chat Models&#xff1a; https://arxiv.org/pdf/2307.09288 LLAMA 3: The Llama 3 Herd of Models https…

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力&#xff0c;激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…

PINN求解固体力学问题——论文加代码

PINN求解固体力学问题——论文加代码 1. 训练2. 可视化论文:Physics-Informed Deep Learning and its Application in Computational Solid and Fluid Mechanics 基本问题: 网格: 1. 训练 # %load Plane_Stress_W-PINNs.py """ Forward Problem for Plan…

ktransformers 上的 DeepSeek-R1 671B open-webui

ktransformers 上的 DeepSeek-R1 671B open-webui 一、下载GGUF模型1. 创建目录2. 魔塔下载 DeepSeek-R1-Q4_K_M3. 安装显卡驱动和cuda4. 显卡 NVIDIA GeForce RTX 4090 二、安装ktransformers1. 安装依赖2. 安装uv工具链3. 下载源码4. 创建python虚拟环境 三、编译ktransforme…

QT:Graphics View的坐标系介绍

在 Qt 的 Graphics View 框架中&#xff0c;存在三种不同的坐标系&#xff0c;分别是 物品坐标系&#xff08;Item Coordinates&#xff09;、场景坐标系&#xff08;Scene Coordinates&#xff09; 和 视图坐标系&#xff08;View Coordinates&#xff09;。这三种坐标系在图形…

医院HIS接入大模型:算力基础设施与训练能力的深度剖析与测算

一、引言 1.1 研究背景与意义 在数字化医疗快速发展的当下,医院信息系统(Hospital Information System,HIS)作为医疗信息化的核心枢纽,承载着患者诊疗信息、医院运营管理等关键数据 ,对提升医疗服务质量、优化医院管理流程起着至关重要的作用。然而,传统 HIS 在面对日…

入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火&#xff0c;这个行业因为国家政策趋势正在大力发展&#xff0c;大有可为!但很多人对网络安全工程师还是不了解&#xff0c;不知道网…

阿里云CDN转https个人测试证书过期更换

网站是http的虚拟主机&#xff0c;微信小程序要求https&#xff0c;所以申请了阿里云CDN和个人测试证书&#xff08;以前叫免费证书&#xff09;&#xff0c;把http转成https。 但是个人测试证书只有三个月有效期&#xff0c;所以每隔三个月要手动申请更换一次。 在阿里云CDN…

东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急

《港湾商业观察》施子夫 近期&#xff0c;东信营销科技有限公司&#xff08;以下简称&#xff0c;东信营销科技&#xff09;递表港交所&#xff0c;联席保荐机构为海通国际和中银国际。 东信营销科技的国内运营主体为深圳市东信时代信息技术有限公司。尽管期内收入规模有所提…

AOP进阶-04.切入点表达式-@annotation

一.annotation注解 我们在最后一个切入点表达式中要匹配多个无规则的方法&#xff0c;这样的写法有些冗余了。而annotation注解就是来解决这一问题的。 annotation注解使用特定的注解来匹配方法。我们首先自定义一个注解&#xff0c;该注解就相当于一个标签&#xff0c;目标对…

特斯拉 FSD 算法深度剖析:软件层面全解读

一、引言 特斯拉的 FSD&#xff08;Full Self-Driving&#xff09;系统作为自动驾驶领域的前沿成果&#xff0c;其软件层面的算法设计至关重要。本文将从软件的角度&#xff0c;深入探讨特斯拉 FSD 所采用的算法&#xff0c;包括感知、规划、控制等多个方面&#xff0c;以期为…

LabVIEW同步数据采集功能

VI通过使用数据采集&#xff08;DAQ&#xff09;硬件系统&#xff0c;进行多通道同步采集&#xff0c;实时获取模拟信号数据。它利用外部时钟信号触发数据采集&#xff0c;支持连续采样模式&#xff0c;并将采集到的数据实时显示在波形图上&#xff0c;方便用户进行数据监控和分…

YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合

概述 实时目标检测对于许多实际应用来说已经变得至关重要&#xff0c;而Ultralytics公司开发的YOLO&#xff08;You Only Look Once&#xff0c;只看一次&#xff09;系列一直是最先进的模型系列&#xff0c;在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在…

Ubuntu20.04之VNC的安装使用与常见问题

Ubuntu20.04之VNC的安装与使用 安装图形桌面选择安装gnome桌面选择安装xface桌面 VNC-Server安装配置开机自启 VNC Clientroot用户无法登入问题临时方案永久方案 安装图形桌面 Ubuntu20.04主流的图形桌面有gnome和xface两种&#xff0c;两种桌面的安装方式我都会写&#xff0c…

14.二叉搜索树

二叉搜索树 1.概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树: *若它的左⼦树不为空&#xff0c;则左⼦树上所有结点的值都⼩于等于根结点的值 *若它的右⼦树不为空&#xff0c;则右⼦树上所有结点的值都⼤于等于根结点…

web网络安全---cookie篇

什么是Cookie 由于HTTP是一种无状态的协议&#xff0c;服务器单从网络连接上无从知道客户身份。怎么办呢&#xff1f;就给客户端们颁发一个通行证吧&#xff0c;每人一个&#xff0c;无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的…

Qt 开源音视频框架模块之QtAV播放器实践

Qt 开源音视频框架模块QtAV播放器实践 1 摘要 QtAV是一个基于Qt的多媒体框架&#xff0c;旨在简化音视频播放和处理。它是一个跨平台的库&#xff0c;支持多种音视频格式&#xff0c;并提供了一个简单易用的API来集成音视频功能。QtAV的设计目标是为Qt应用程序提供强大的音视…

WPF学习之Prism(二)

前言 学习一下Prism。 1.Prism Prism框架提供了一套丰富的工具、类和模块&#xff0c;帮助开发人员实现以下功能&#xff1a; 模块化&#xff1a;Prism框架支持将应用程序拆分为多个模块&#xff0c;每个模块具有自己的功能和视图。这种模块化的设计使得应用程序更加灵活和…