【Rust】简介、安装和编译

文章目录

  • 一、Rust简介
  • 二、Rust 安装
  • 三、Rust 程序结构
    • 3.1 模块(Modules):
    • 3.2 函数(Functions):
    • 3.3 变量(Variables):
    • 3.4 控制流(Control Flow):
    • 3.5 宏(Macros):
    • 3.6 完整示例:
  • 四、编译

用了一个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

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

三、Rust 程序结构

项目结构:

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


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();
    }
    

3.2 函数(Functions):

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

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

  • 示例:

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

3.3 变量(Variables):

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

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

  • 示例:

    // 声明不可变变量
    let x = 5;
    // x = 10; // 错误!不可变变量不能修改
    
    // 声明可变变量
    let mut y = 10;
    y = 15; // 可变变量可以修改
    

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<T>动态数组类型(可变长度数组)不定长
Option<T>可选值类型,用于处理可能为 None 的值不定长
Result<T, E>结果类型,用于处理可能出错的操作不定长
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");
    }
    

    while 循环:

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

    for 循环:

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

    match表达式:

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

3.5 宏(Macros):

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

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

  • 你也可以自定义宏。

  • 示例:

    macro_rules! greet {
        () => {
            println!("Hello, World!");
        };
    }
    
    greet!(); // 调用宏
    

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!(); // 调用宏
}

四、编译

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

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

cargo build

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

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

./target/debug/my_project

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

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

cargo build --release

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

附加命令

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

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

注意事项

  • 在使用 Cargo 编译 Rust 程序时,它会自动下载并管理依赖项。
  • 如果你使用的是 IDE(如 Visual Studio Code),通常也会有相应的插件支持 Cargo 的编译和调试。

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

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

相关文章

面试redis篇-12Redis集群方案-分片集群

原理 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&#xff1a; 海量数据存储问题高并发写的问题 使用分片集群可以解决上述问题&#xff0c;分片集群特征&#xff1a; 集群中有多个master&#xff0c;每个master保存不同数据每个master都可以有…

python自动化管理和zabbix监控网络设备(有线网络和路由配置部分)

目录 目录 一、拓扑图 二、core-sw1 三、core-sw2 四、sum-sw1 五、sum-sw2 六、FW1 七、DMZ-SW1 结语 一、拓扑图 二、core-sw1 sys sysname core-sw1 vlan batch 10 20 30 40 50 60 100 vlan batch 200 210 220 230 240 250 stp region-configuration region-name…

基于雷达影像的洪水监测技术方法详解

洪水发生时候大多数是阴雨天气&#xff0c;光学影像基本上拍不到有效影像。雷达影像这时候就能发挥其不受天气影像的优点。现在星载的雷达卫星非常多&#xff0c;如高分三号、陆探一号、海丝一号&#xff08;巢湖一号&#xff09;、哨兵1号等。本文以哨兵1号L1地距(GRD)产品来介…

机器学习YOLO操作全流程​​编

YOLO介绍 Ultralytics YOLOv8,是最新的著名实时目标检测和图像分割模型。它基于深度学习和计算机视觉的最新进展,提供了无与伦比的速度和精度性能。由于其精简的设计,适用于各种应用,并且可以轻松适配不同的硬件平台,从边缘设备到云端API。 探索 YOLOv8 文档,这是一个全…

pytorch -- CIFAR10 完整的模型训练套路

网络结构 代码 # CIFAR 10完整的模型训练套路&#xff1a; import torch.optim import torchvision from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom model import *# 1. 准备数据集 train_data torch…

TensorFlow2.x 精选笔记(2)自动求导与概率

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

Premiere企业发展历程公司历史回顾视频制作pr时间线模板

企业发展历程公司历史回顾视频制作PR时间线模板mogrt。 项目特点&#xff1a;色彩控件&#xff0c;适用于任何字体&#xff0c;包含视频帮助&#xff0c;适用于Premiere Pro 2021及以上版本。 更多PR资源下载&#xff1a;https://prmuban.com/37916.html

手机和windows的便签怎么共享账号使用

在忙碌的生活中&#xff0c;我经常需要在手机和电脑之间同步记事信息。可是&#xff0c;每次当我在手机上记下一些重要事项后&#xff0c;想要在电脑上查看或继续编辑时&#xff0c;总是遇到各种麻烦。因为手机和电脑上的便签软件各不相同&#xff0c;无法实现账号共享和内容同…

用 React 实现搜索 GitHub 用户功能

用 React 实现搜索 GitHub 用户功能 在本篇博客中&#xff0c;我们将介绍如何在 React 应用中搜索 GitHub 用户并显示他们的信息。 创建 React 应用 首先&#xff0c;我们使用 Create React App 创建一个新的 React 应用。Create React App 是一个快速搭建 React 项目的工具…

好用的IP反查接口

IP-API.com - Geolocation API - Documentation - JSON 自定义返回参数调用&#xff08;1&#xff09;&#xff1a; http://ip-api.com/json/24.48.0.1?fieldsstatus,message,country,countryCode,region,regionName,cityhttp://ip-api.com/json/24.48.0.1?fieldscountry,co…

用C#开发Excel插件的强大开源工具

推荐一个开源项目&#xff0c;方便我们使用C#为Excel开发插件。 01 项目简介 Excel-DNA是一个.Net开源项目&#xff0c;为开发者提供了一种便利的方法&#xff0c;可以将.Net代码与Excel集成&#xff0c;能够轻松的为Excel创建自定义函数、图表、表单等&#xff0c;一方面不仅…

IT廉连看——Uniapp——页面样式与布局

IT廉连看——Uniapp——页面样式与布局 目标&#xff1a; 了解样式与布局的规范 熟记px和rpx的区别 全局样式与index样式的区别 一、查看uniapp框架简介——尺寸单位 px尺寸单位的使用是贯穿始终的。 [IT廉连看] 二、尺寸单位——实操效果 1、打开Hbuilder X并进入in…

组态王连接施耐德M580PLC

组态王连接施耐德M580 网络架构 网线连接PLC和装组态王软件的PC组态设置帮助 可先查看帮助&#xff1a;菜单栏点击【帮助】->【驱动帮助】&#xff0c;在弹出窗口中PLC系列选择莫迪康PLC的“modbusRtu\ASSCII\TCP”查看组态配置流程&#xff1a; 相关说明&#xff1a; 1、…

Springboot中如何记录好日志

Springboot中如何记录日志 日志体系整体介绍 日志一直在系统中占据这十分重要的地位&#xff0c;他是我们在系统发生故障时用来排查问题的利器&#xff0c;也是我们做操作审计的重要依据。那么如何记录好日志呢&#xff1f;选择什么框架来记录日志&#xff0c;是不是日志打越…

uni-app原生api的promise化以解决异步等待问题分析

相信各位在进行uni-app开发的时候会遇到各种关于异步回调问题&#xff0c;例如要传code给后端以换取session_key&#xff0c;在这之前需要先调用 uni.login&#xff0c;所以执行的顺序是必须同步等待的。在写这篇文章之前对于整体的流程概念需要做一个梳理&#xff0c;以便能更…

SpringCloud-Docker安装与详解

Docker 是一款强大的容器化平台&#xff0c;通过其轻量级的容器技术&#xff0c;使应用程序的开发、部署和管理变得更加便捷和高效。本文将深入探讨 Docker 的安装过程&#xff0c;并详细解析其基本概念、组件及常用命令&#xff0c;以帮助读者充分理解和熟练使用 Docker。企业…

【kubernetes】关于k8s集群中kubectl的陈述式资源管理

目录 一、k8s集群资源管理方式分类&#xff1a; &#xff08;1&#xff09;陈述式资源管理方式&#xff1a;增删查比较方便&#xff0c;但是改非常不方便 &#xff08;2&#xff09;声明式资源管理方式&#xff1a;yaml文件管理 二、陈述式资源管理方法&#xff1a; 三、ku…

linux查看服务器内核CUP版本相关命令

服务器参考 计算架构&#xff1a;x86-64产品系列&#xff1a;华为云耀云服务器操作系列&#xff1a;CentOS 7 执行uname -a查看服务器内核版本 Linux hecs-82210 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux执行hostn…

【Flink CDC(一)】实现mysql整表与增量读取

文章目录 一. 运行前准备1. 依赖1.1. Maven dependency1.2. SQL Client JAR&#xff08;推荐&#xff09; 2. 配置 MySQL 服务器&#xff08;必须&#xff09; 二. 功能说明1. 启动模式2. 全量阶段支持 checkpoint3. 关于无主键表Exactly-Once 处理 三. 实战1. 实现mysql整表与…

交叉编译qt到arm平台

使用pkg-config命令查看xxx包是否存在&#xff1a; pkg-config --print-errors xxx pkg-config的搜索路径可以通过环境变量PKG_CONFIG_PATH指定。需要在运行./configure 之前指定。 ./configure -release -qt-libjpeg -qt-libpng -qt-zlib -qt-pcre -xplatform linux-aarch64-…