• 【Rust】简介、安装和编译


    用了一个rust代码,记录下。

    一、Rust简介

    Rust 是一种系统级编程语言,由 Mozilla(火狐那个) 开发,并于 2010 年首次公开发布。它的设计旨在提供高性能、并发性、安全性以及开发人员友好的语法。Rust 的特点包括但不限于以下几个方面:

    特点

    1. 安全性
      • Rust 最引人注目的特性之一是其强大的安全性。它使用一套称为 “borrow checker” 的系统来在编译时检查数据访问的正确性,避免了内存溢出、空指针和数据竞争等常见的安全漏洞。
    2. 并发性
      • Rust 提供了轻量级的线程(称为 “任务”)和基于消息传递的并发模型。Rust 的所有权和借用系统使得在编写并发代码时更加安全和容易。
    3. 性能
      • Rust 的设计目标之一是提供与 C/C++ 相当的性能。它不会引入运行时开销,直接编译为本地机器码,使得 Rust 适用于对性能要求较高的应用程序。
    4. 内存管理
      • Rust 通过所有权(ownership)和借用(borrowing)的概念,实现了内存安全和高效的内存管理。所有权规则确保了在任何时刻只有一个所有者能够访问内存,借用规则则允许多个只读引用或者单个可变引用。
    5. 功能丰富的标准库
      • Rust 的标准库提供了丰富的功能,包括支持文件操作、网络通信、多线程、数据结构、加密等方面。
    6. 开发人员友好的工具
      • Cargo 是 Rust 的包管理和构建系统,提供了项目管理、依赖管理、测试等功能,极大地简化了项目的管理和构建流程。
      • Rust 的错误信息也是开发者称赞的地方之一,友好而详细的错误提示帮助开发者更快地定位和解决问题。

    适用领域:

    • 系统编程:Rust 最初就是为了取代 C 和 C++ 而设计的,因此非常适合系统级编程,包括操作系统、嵌入式开发等领域。
    • 网络服务:由于其安全性和性能,Rust 在构建网络服务、服务器端应用程序方面表现出色,比如 WebAssembly、后端服务等。
    • 游戏开发:Rust 适合游戏开发领域,其性能和并发性使其成为实现高性能游戏引擎的良好选择。
    • 工具开发:由于 Rust 的稳定性、安全性和性能,它也被广泛用于开发系统工具、编译器、分析器等。

    二、Rust 安装

    安装 Rust 时,会安装 Rust 编程语言的工具链和相关的工具。包括 Rust 编译器rustc)、包管理器 Cargo、Rust 标准库以及一些辅助工具。具体来说,安装 Rust 会包括以下内容:

    1. Rust 编程语言工具链
      • rustc:Rust 的编译器,负责将 Rust 代码编译成可执行程序或者库。
      • cargo:Rust 的包管理器和构建工具,用于创建、构建、测试和发布 Rust 项目。
    2. Rust 标准库
      • Rust 标准库包含了常用的数据结构、函数等,是 Rust 开发中常用的库之一。
    3. Rust 文档和示例
      • 安装 Rust 后,可以通过 rustup doc 命令来打开 Rust 的文档,包括标准库的文档和 Rust 编程语言的指南。
      • Rust 还会自带一些示例程序,可以通过 rustup doc --book 命令来查看官方示例和教程。
    4. Rustup 工具
      • rustup 是 Rust 的工具链管理器,用于安装、管理和更新 Rust 工具链和版本。它提供了便捷的方式来管理不同版本的 Rust 和工具链。
    5. 额外的工具
      • 在安装 Rust 时,可能会默认安装一些辅助工具,比如 rustfmt(Rust 代码格式化工具)和 clippy(Rust 代码 lint 工具)等。这些工具可以帮助你保持代码的风格统一和代码质量。

    下载安装程序:https://www.rust-lang.org/tools/install

    运行安装程序,出现:
    在这里插入图片描述
    输入1,回车即可默认安装,期间会下载资源文件。

    安装完后查看版本信息:

    rustc --version
    cargo --version
    
    • 1
    • 2

    Rust没有专门的IDE,你可以使用VS code或者IDEA的插件。

    三、Rust 程序结构

    项目结构:

    my_project/
    ├── Cargo.toml        # 项目的配置文件,包含了项目的元数据和依赖信息。
    └── src/
        ├── main.rs       # 主入口文件
        ├── lib.rs        # 库的入口文件
        ├── my_module.rs  # 自定义模块文件
        └── my_module_test.rs  # 测试文件
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Rust 程序的程序结构包括了模块(Modules)、函数(Functions)、变量(Variables)、控制流(Control Flow)等部分。下面是 Rust 程序的基本结构和各个部分的详细介绍:

    3.1 模块(Modules):

    • Rust 中的模块用于组织代码,将相关的功能组织在一起。一个 Rust 程序通常由一个主模块(main.rs)和多个子模块组成。

    • 使用 mod 关键字定义模块,模块可以嵌套。

    • 示例:

      // 定义一个模块
      mod my_module {
          // 在模块中定义函数
          pub fn hello() {
              println!("Hello from my_module!");
          }
      }
      
      // 在主函数中使用模块中的函数
      fn main() {
          my_module::hello();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

    3.2 函数(Functions):

    • Rust 中的函数使用 fn 关键字定义,函数可以有参数和返回值。

    • 函数的参数和返回值必须指定类型。

    • 示例:

      // 定义一个函数
      fn add(a: i32, b: i32) -> i32 {
          a + b
      }
      
      // 调用函数
      let result = add(5, 10);
      println!("Result: {}", result); // 输出:Result: 15
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    3.3 变量(Variables):

    • Rust 中的变量使用 let 关键字声明,变量默认是不可变的(immutable)。

    • 使用 mut 关键字可以声明可变变量。

    • 示例:

      // 声明不可变变量
      let x = 5;
      // x = 10; // 错误!不可变变量不能修改
      
      // 声明可变变量
      let mut y = 10;
      y = 15; // 可变变量可以修改
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    Rust 中常见的变量类型:

    类型描述大小
    i8有符号 8 位整数1 字节
    i16有符号 16 位整数2 字节
    i32有符号 32 位整数(默认类型)4 字节
    i64有符号 64 位整数8 字节
    u8无符号 8 位整数1 字节
    u16无符号 16 位整数2 字节
    u32无符号 32 位整数4 字节
    u64无符号 64 位整数8 字节
    isize有符号整数,与指针大小相同平台相关
    usize无符号整数,与指针大小相同平台相关
    f32单精度浮点数4 字节
    f64双精度浮点数(默认类型)8 字节
    bool布尔类型,true 或 false1 字节
    char字符类型4 字节
    ()空类型(Unit 类型,类似于 void)0 字节
    str字符串类型(不可变)不定长
    String字符串类型(可变,堆分配)不定长
    &str字符串切片引用(不可变)不定长
    &String字符串引用(不可变)不定长
    Vec动态数组类型(可变长度数组)不定长
    Option可选值类型,用于处理可能为 None 的值不定长
    Result结果类型,用于处理可能出错的操作不定长
    Tuple元组类型,固定长度的不同类型值的组合不定长
    Array数组类型,固定长度的相同类型值的集合固定长度

    3.4 控制流(Control Flow):

    • Rust 中的控制流语句包括 if 表达式、循环和匹配模式(match)。

      if 表达式:

      let number = 7;
      if number < 5 {
          println!("Number is less than 5");
      } else {
          println!("Number is greater than or equal to 5");
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      while 循环:

      let mut count = 0;
      while count < 5 {
          println!("Count: {}", count);
          count += 1;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5

      for 循环:

      for number in 1..=5 {
          println!("Number: {}", number);
      }
      
      • 1
      • 2
      • 3

      match表达式:

      let x = 5;
      match x {
          1 => println!("One"),
          2 => println!("Two"),
          _ => println!("Other"),
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    3.5 宏(Macros):

    • Rust 中的宏允许你编写类似函数的代码来生成代码。

    • Rust 内置了一些常用的宏,比如 println!vec! 等。

    • 你也可以自定义宏。

    • 示例:

      macro_rules! greet {
          () => {
              println!("Hello, World!");
          };
      }
      
      greet!(); // 调用宏
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    3.6 完整示例:

    // 定义一个模块
    mod my_module {
        // 在模块中定义函数
        pub fn hello() {
            println!("Hello from my_module!");
        }
    }
    
    // 定义一个函数
    fn add(a: i32, b: i32) -> i32 {
        a + b
    }
    
    // 主函数
    fn main() {
        my_module::hello(); // 调用模块中的函数
    
        let result = add(5, 10); // 调用函数
        println!("Result: {}", result); // 输出:Result: 15
    
        let x = 5; // 定义不可变变量
        let mut y = 10; // 定义可变变量
        y = 15; // 修改可变变量的值
    
        let number = 7;
        if number < 5 {
            println!("Number is less than 5");
        } else {
            println!("Number is greater than or equal to 5");
        }
    
        let mut count = 0;
        while count < 5 {
            println!("Count: {}", count);
            count += 1;
        }
    
        for number in 1..=5 {
            println!("Number: {}", number);
        }
    
        let x = 5;
        match x {
            1 => println!("One"),
            2 => println!("Two"),
            _ => println!("Other"),
        }
    
        macro_rules! greet {
            () => {
                println!("Hello, World!");
            };
        }
    
        greet!(); // 调用宏
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    四、编译

    以使用 Cargo 这个 Rust 的包管理器和构建工具来编译程序

    打开终端(命令行),进入到项目目录。
    运行:

    cargo build
    
    • 1

    这会在项目目录下生成一个 target/ 目录,其中包含编译生成的可执行文件。

    编译完成后,在终端中运行生成的可执行文件:

    ./target/debug/my_project
    
    • 1

    如果是库项目,需要将库文件引入其他 Rust 项目中,或者进行单元测试等。

    如果需要进行发布版的编译(带有优化):

    cargo build --release
    
    • 1

    这会在 target/ 目录下生成一个 release/ 目录,其中包含优化后的可执行文件。这个可执行文件在运行时可能会更快,但编译时间会更长。

    附加命令

    • cargo run: 编译并运行项目。如果你不需要单独编译,可以直接使用这个命令来编译和运行项目:

    • cargo check: 检查代码是否可以编译,但不生成可执行文件。这个命令可以用于快速检查代码的语法和类型错误:

    注意事项

    • 在使用 Cargo 编译 Rust 程序时,它会自动下载并管理依赖项。
    • 如果你使用的是 IDE(如 Visual Studio Code),通常也会有相应的插件支持 Cargo 的编译和调试。
  • 相关阅读:
    【问题解决】Debian更新源提示InRelease已过期
    文件操作及函数
    IF:伴FLT3-ITD突变的急性髓系白血病在米哚妥林治疗下的克隆进化
    java运行linux命令时报错
    Linux常用的指令(2023.10.27)
    [Linux] Linux文件编程 1.1 文件打开及创建
    2.go-GIN快速入门
    神经网络训练的一般步骤,神经网络的训练与测试
    QFramework引入Utility和System
    大数据(二)大数据架构发展史
  • 原文地址:https://blog.csdn.net/weixin_43764974/article/details/136311910