Rust语言学习笔记

news2024/10/2 11:14:05

Rust 是一种系统编程语言,由 Mozilla 研究院于2010年开始开发,并在2015年首次发布了1.0版本。Rust 旨在提供与 C 和 C++ 类似的性能,同时解决这些语言中常见的内存安全问题。它通过所有权、生命周期和借用检查等概念来实现这一点,从而在编译时就能防止许多常见的错误,如空指针异常、数据竞争和缓冲区溢出。

Rust 的主要特点

  1. 内存安全性

    • 所有权系统:Rust 使用一套独特的所有权系统来管理内存。每个值都有一个所有者,当所有者离开作用域时,该值将被自动释放。
    • 借用检查器:Rust 编译器通过借用检查器确保引用的生命周期是正确的,从而避免悬垂指针和其他内存安全问题。
  2. 并发性

    • Rust 的设计特别考虑了并发编程的安全性。它允许开发者编写没有数据竞争的并发代码,同时保持高性能。
  3. 零成本抽象

    • Rust 支持高级抽象,如泛型、函数式编程特性(如闭包)和模式匹配,但这些抽象不会带来运行时开销。
  4. 跨平台支持

    • Rust 可以编译成多种架构的机器码,包括 x86, x86-64, ARM 等,并且可以用于嵌入式系统。
  5. 包管理和构建工具

    • Rust 提供了一个强大的包管理系统 Cargo,它不仅管理依赖项,还提供了构建、测试和文档生成等功能。
  6. 社区和支持

    • Rust 拥有一个活跃且友好的社区,提供了大量的资源和库支持。

安装 Rust

要开始使用 Rust,你需要安装 Rust 工具链。以下是安装步骤:

  1. 访问 Rust 官方网站:https://www.rust-lang.org/

  2. 下载并安装 Rust

    • 打开终端或命令提示符。
    • 运行以下命令来安装 Rust:
      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      
    • 或者在 Windows 上,你可以从 Rust 安装页面 下载安装程序。
  3. 验证安装

    • 安装完成后,打开一个新的终端窗口并运行:
      rustc --version
      
    • 你应该能看到类似 rustc 1.54.0 的版本号。

第一个 Rust 程序

让我们从一个经典的“Hello, World!”程序开始。

  1. 创建新项目

    • 在终端中运行以下命令来创建一个新的项目:
      cargo new hello_world
      cd hello_world
      
  2. 编辑源代码

    • 打开 src/main.rs 文件,你会看到以下内容:
      fn main() {
          println!("Hello, world!");
      }
      
  3. 运行程序

    • 在终端中运行以下命令来编译并运行程序:
      cargo run
      
    • 你应该会看到输出 Hello, world!

基本语法

变量
  • 使用 let 关键字声明变量。
  • 默认情况下,变量是不可变的,可以使用 mut 关键字使其可变。
let x = 10; // 不可变变量
let mut y = 20; // 可变变量
y = 30;
数据类型
  • 标量类型:整型 (i32, u32 等)、浮点型 (f32, f64)、布尔型 (bool) 和字符型 (char)。
  • 复合类型:数组 ([T; N])、元组 ((T1, T2, T3, ...) ) 和结构体 (struct)。
let a: i32 = 10;
let b: f64 = 3.14;
let c: bool = true;
let d: char = 'A';

let arr: [i32; 3] = [1, 2, 3];
let tuple: (i32, f64, bool) = (1, 2.0, true);

struct Point {
    x: i32,
    y: i32,
}

let p = Point { x: 10, y: 20 };
控制结构
  • 条件语句ifelse
  • 循环loopwhilefor
let x = 10;

if x > 0 {
    println!("x is positive");
} else if x < 0 {
    println!("x is negative");
} else {
    println!("x is zero");
}

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

for j in 0..5 {
    println!("{}", j);
}
函数
  • 使用 fn 关键字定义函数。
  • 函数可以有参数和返回值。
fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    let result = add(3, 4);
    println!("Result: {}", result); // 输出: Result: 7
}

所有权和借用

所有权
  • 每个值都有一个所有者。
  • 当所有者离开作用域时,该值将被释放。
{
    let s = String::from("hello"); // s 是字符串的所有者
} // s 离开作用域,字符串被释放
借用
  • 使用引用 & 来借用值。
  • 引用必须始终有效。
fn main() {
    let s = String::from("hello");

    let len = calculate_length(&s); // 借用 s 的引用

    println!("The length of '{}' is {}.", s, len);
}

fn calculate_length(s: &String) -> usize {
    s.len()
}

结构体和枚举

结构体
  • 使用 struct 关键字定义结构体。
  • 结构体可以包含字段。
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };
    println!("Area: {}", rect.area()); // 输出: Area: 1500
}
枚举
  • 使用 enum 关键字定义枚举。
  • 枚举可以表示一组相关的值。
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

fn main() {
    let msg = Message::Write(String::from("Hello, Rust!"));
    match msg {
        Message::Quit => println!("Quitting..."),
        Message::Move { x, y } => println!("Moving to ({}, {})", x, y),
        Message::Write(text) => println!("Writing: {}", text),
        Message::ChangeColor(r, g, b) => println!("Changing color to RGB({}, {}, {})", r, g, b),
    }
}

货物管理

创建项目
  • 使用 cargo new 创建新项目。
cargo new my_project
cd my_project
添加依赖
  • Cargo.toml 文件中添加依赖。
[dependencies]
rand = "0.8"
  • 更新依赖。
cargo build
构建和运行
  • 使用 cargo build 构建项目。
  • 使用 cargo run 运行项目。
  • 使用 cargo test 运行测试。
  • 使用 cargo doc 生成文档。

总结

Rust 是一种现代的系统编程语言,具有强大的内存安全性和并发支持。通过其独特的所有权系统和借用检查器,Rust 可以在编译时防止许多常见的错误。Rust 的生态系统也非常丰富,提供了大量的库和工具支持。如果你希望深入学习 Rust,可以参考以下资源:

  • 官方文档:Rust 官方文档 提供了详细的教程和示例。
  • 在线课程:Coursera、Udemy 等平台上有许多关于 Rust 的在线课程。
  • 社区分享:访问 Rust 论坛 和 GitHub 查看其他用户的作品和分享经验。

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

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

相关文章

Ubuntu22.04之测试两个IP地址的网速(二百七十一)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

微信小程序操作蓝牙

主要流程&#xff1a; 1.初始化蓝牙适配器openBluetoothAdapter&#xff0c;如果不成功就onBluetoothAdapterStateChange监听蓝牙适配器状态变化事件 2.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙外围设备 3.onBluetoothDeviceFound监听寻找到新设备的事件&#xff0c;…

制造业该如何应用大数据?

​收到一位朋友私信&#xff0c;提问“制造业该如何应用大数据”&#xff1f;我觉得这个问题非常好&#xff0c;而且这也将是未来机械专业领域的一个重要突破口。 而传统制造企业与计算机、互联网行业的最佳结合点就在这里。 如果你没有真正的去实施过一个企业的信息化项目&a…

【重学 MySQL】四十五、数据库的创建、修改与删除

【重学 MySQL】四十五、数据库的创建、修改与删除 一条数据存储的过程数据输入数据验证数据处理数据存储数据持久化反馈与日志注意事项 标识符命名规则基本规则长度限制保留字与特殊字符命名建议示例 MySQL 中的数据类型创建数据库创建数据库时指定字符集和排序规则 查看数据库…

[Linux]开发环境搭建

RPM和YUM 安装JDK 安装Tomcat 安装IDEA 安装MySql

代码随想录算法训练营Day20 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

目录 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 题目 235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先…

Yocto - 使用Yocto开发嵌入式Linux系统_05 认识Bitbake工具

Meeting the BitBake Tool 通过本章&#xff0c;我们将开始学习 Yocto 项目引擎如何在幕后工作的旅程。正如每一段旅程一样&#xff0c;沟通是至关重要的&#xff0c;因此我们需要理解 Yocto 项目工具所使用的语言&#xff0c;并学习如何充分利用这些工具来实现我们的目标。 Wi…

网页前端开发之Javascript入门篇(3/9):条件控制

Javascript条件控制 什么是条件控制&#xff1f; 答&#xff1a;其概念跟 Python教程 介绍的一样&#xff0c;只是语法上有所变化。 参考流程图如下&#xff1a; 其对应语法&#xff1a; var button false; // 开关状态 console.log("检查开关.."); if(bu…

一文掌握Harbor镜像同步公有云镜像仓库实践

一文掌握Harbor镜像同步公有云镜像仓库实践 目录 1 引言2 概念 2.1 Harbor2.2 阿里云的镜像仓库ACR2.3 华为云的镜像仓库SWR2.4 Harbor复制管理同步镜像 2.4.1 复制管理的工作原理 2.5 Harbor同步镜像到公有云镜像仓库的优势 3 实验&#xff1a;通过Harbor 将容器镜像同步到公…

刷题系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;知识点管理&#xff0c;科目类型管理&#xff0c;试题管理&#xff0c;试卷管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我的 开发系统&#…

vulnhub-W34kn3ss 1靶机

vulnhub&#xff1a;https://www.vulnhub.com/entry/w34kn3ss-1,270/ 导入靶机&#xff0c;扫描 靶机开在192.168.81.7.扫描端口 扫到三个端口&#xff0c;存在网站服务&#xff0c;访问 80端口没什么东西&#xff0c;443似乎访问到的是同一个界面&#xff0c;这种情况下一般是…

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件&#xff0c;但 ADCP 后处理软件无法写入信息2.3…

基于SpringBoot+vue的监理公司信息化管理系统设计与实现

目录 1. 系统概述 2. 技术选型 3. 系统模块设计 3.1 收入支出管理 3.2 合同管理 3.3 财务统计 3.4 甲方乙方公告 4. 安全性考虑 5. 效果展示和示例代码 6. 总结 1. 系统概述 随着经济的快速发展和社会的进步&#xff0c;建筑行业作为国民经济的重要支柱产业之…

[MAUI]数据绑定和MVVM:MVVM的属性验证

一、MVVM的属性验证案例 Toolkit.Mvvm框架中的ObservableValidator类,提供了属性验证功能,可以使用我们熟悉的验证特性对属性的值进行验证,并将错误属性提取和反馈给UI层。以下案例实现对UI层的姓名和年龄两个输入框,进行表单提交验证。实现效果如下所示 View<ContentP…

医院体检管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;体检分类管理&#xff0c;体检套餐管理&#xff0c;体检预约管理&#xff0c;体检报告管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;体检套餐&a…

Jetson 开发系列:Orin Nano 开箱!一款强大的嵌入式物联网开发板

边缘计算作为 AI 的一个重要应用场景&#xff0c;面临着前所未有的机遇与挑战。 谈及 AI&#xff0c;自然绕不开 NVIDIA 的产品&#xff1a; 其中&#xff0c;Jetson 系列均为 AIoT 设备打造&#xff0c;功耗低是其最大的特点。以我手头的 Jetson Ori Nano 为例&#xff0c;满…

一文彻底搞懂多模态 - 基础术语+基础知识+多模态学习

文章目录 技术交流基本术语一、数据采集与表示二、数据处理与融合三、学习与推理 基础知识一、传统机器学习二、深度学习三、优化算法四、应用领域 多模态学习一、模态表示二、多模态融合图片 三、跨模态对齐 最近这一两周看到不少互联网公司都已经开始秋招发放Offer。 不同以…

【MAUI】View和ViewModel的关联方式

方式一:创建ViewModel对象: 在View中,通过设置BindingContext为ViewModel对象,即可进行绑定。如下所示: <ContentPage......xmlns:vm="clr-namespace:MauiApp8.ViewModels"><

多模态RAG实现

在标准 RAG 中&#xff0c;输入文档包含文本数据。LLM 利用上下文学习&#xff0c;通过检索与所提查询上下文相匹配的文本文档块来提供更相关、更准确的答案。 但是&#xff0c;如果文档包含图像、表格、图表等以及文本数据&#xff0c;该怎么办&#xff1f; 不同的文档格式包…

基于 Qwen2.5-0.5B 微调训练 Ner 命名实体识别任务

一、Qwen2.5 & 数据集 Qwen2.5 是 Qwen 大型语言模型的最新系列&#xff0c;参数范围从 0.5B 到 72B 不等。 对比 Qwen2 最新的 Qwen2.5 进行了以下改进&#xff1a; 知识明显增加&#xff0c;并且大大提高了编码和数学能力。在指令跟随、生成长文本&#xff08;超过 8K…