Rust 基础入门指南
Rust 基础入门指南
1. Rust 语言概述
Rust 的历史与设计理念
Rust 是由 Mozilla 研究院的 Graydon Hoare 于2010年开始创建的系统编程语言。其设计目标是创建一种安全、并发、实用的编程语言,特别关注内存安全和并发性。
Rust 的核心设计理念包括:
- 内存安全,无需垃圾回收
- 零成本抽象
- 并发安全
- 实用性和性能
Rust 的主要特点和优势
-
内存安全
- 通过所有权系统和借用检查器在编译期防止常见的内存错误
- 杜绝空指针、悬垂指针和数据竞争
-
高性能
- 与 C/C++ 性能相当
- 没有运行时开销
- 零成本抽象
-
现代语言特性
- 模式匹配
- 泛型
- 特征(Trait)系统
- 函数式编程支持
-
安全的并发
- 编译器级别的并发安全检查
- 消息传递和共享状态并发模型
与其他编程语言的对比
-
与 C/C++
- 更安全的内存管理
- 更现代的语言特性
- 没有未定义行为
-
与 Java/C#
- 没有运行时垃圾回收
- 更低的性能开销
- 更直接的硬件控制
-
与 Python/JavaScript
- 静态类型
- 编译型语言
- 性能更高
- 更严格的类型系统
2. 开发环境搭建
Rust 安装
推荐使用 rustup,这是 Rust 官方的安装工具:
# 在 Windows 上
curl https://sh.rustup.rs -sSf | sh# macOS/Linux
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装后,你将获得:
rustc:Rust 编译器cargo:包管理器和构建工具rustup:工具链管理器
开发工具配置
VSCode 配置
- 安装 “rust-analyzer” 扩展
- 安装 “CodeLLDB” 扩展进行调试
CLion 配置
- 安装 Rust 插件
- 配置 Rust 工具链
第一个 Rust 程序
创建 hello_world.rs:
fn main() {println!("Hello, Rust World!");
}
使用 rustc hello_world.rs 编译并运行
3. 基本语法与数据类型
变量与常量
// 不可变变量
let x = 5;
// x = 6; // 编译错误// 可变变量
let mut y = 10;
y = 20; // 允许// 常量
const MAX_POINTS: u32 = 100_000;
基本数据类型
// 整数类型
let a: i8 = -128;
let b: u32 = 42;// 浮点类型
let f1: f32 = 3.14;
let f2: f64 = 2.71828;// 布尔类型
let t: bool = true;
let f: bool = false;// 字符类型
let c: char = '中';
类型推断
let x = 42; // 自动推断为 i32
let y = 3.14; // 自动推断为 f64
类型转换
let x = 42;
let y = x as f64; // 显式类型转换
运算符
// 算术运算符
let sum = 5 + 10;
let difference = 95.5 - 4.3;
let product = 4 * 30;
let quotient = 56.7 / 32.2;
let remainder = 43 % 5;// 比较运算符
let a = 5;
let b = 10;
let greater = a > b;
let less_equal = a <= b;
4. 控制流
if/else 条件语句
let number = 7;if number < 5 {println!("条件为真");
} else if number == 5 {println!("number 等于 5");
} else {println!("条件为假");
}// 三元运算符风格
let result = if number > 5 { "大于5" } else { "小于等于5" };
循环
// loop 无限循环
loop {println!("永远循环");break; // 手动中断
}// while 循环
let mut counter = 3;
while counter != 0 {println!("{}!", counter);counter -= 1;
}// for 循环
for number in 1..4 {println!("{}!", number);
}
match 模式匹配
let x = 1;match x {1 => println!("one"),2 => println!("two"),3 => println!("three"),_ => println!("anything"),
}
if let 和 while let
// if let 简化匹配
let some_value = Some(3);
if let Some(value) = some_value {println!("值为:{}", value);
}// while let
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() {println!("栈顶元素:{}", top);
}
结语
Rust 的基础语法简洁而强大,通过严格的编译时检查,提供了安全且高效的编程体验。持续学习和实践是掌握 Rust 的关键。
相关文章:
Rust 基础入门指南
Rust 基础入门指南 1. Rust 语言概述 Rust 的历史与设计理念 Rust 是由 Mozilla 研究院的 Graydon Hoare 于2010年开始创建的系统编程语言。其设计目标是创建一种安全、并发、实用的编程语言,特别关注内存安全和并发性。 Rust 的核心设计理念包括: …...
青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件
青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件 一、组件二、VUE中的组件三、APP组件四、应用示例1. App.vue - 根组件2. HelloWorld.vue - 子组件3. main.js - 应用入口文件4. router/index.js - 路由配置文件5. index.html - HTML入口文件6. package.json - 项…...
基于Java的银行排号系统的设计与实现【源码+文档+部署讲解】
目 录 内容提要 1. 引言 2. 系统分析 2.1 系统初步调查 2.2 系统可行性分析 2.2.1 经济可行性 2.2.2 操作可行性 2.2.3 技术可行性 2.3 系统开发环境概述 2.3.1 硬件环境 2.3.2 软件环境 2.4 系统需求分析 2.4.1 业务流程分析 2.4.2 系统体系结构设计 2.4.3 系统逻辑模型 2.5 …...
linux-26 文件管理(四)install
说一个命令,叫install,man install,install是什么意思?安装,install表示安装的意思,那你猜install是用来干什么的?猜一猜干什么的?安装软件,安装第三方软件,错…...
VS2015中使用boost库函数时报错问题解决error C4996 ‘std::_Copy_impl‘
在VS2015中使用boost库函数buffer时遇到问题,其他函数定义均能执行,当加上bg::buffer(参数输入正确);语句后就报如下错误: 错误 C4996 std::_Copy_impl: Function call with parameters that may be unsafe - this call relies…...
pikachu靶场--目录遍历和敏感信息泄露
pikachu靶场—目录遍历和敏感信息泄露 目录遍历 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再…...
植物大战僵尸杂交版3.0.2版本
更新内容 植物大战僵尸杂交版3.0.2版本的更新内容如下: • 修复BUG: • 游戏内贴图错乱的BUG。 • 无尽模式卡死的BUG。 • 卡牌模仿者的一系列BUG。 • 干扰车可能同时出现多辆的BUG。 • 冒险模式部分关卡无法过关的BUG。 • 新增内容…...
kafka怎么保证顺序消费?
kafka怎么保证顺序消费? 1. 分区内的顺序保证2. 并发消费3. 实现顺序消费的策略4. 注意事项 kafka创建 topic 的时候没有指定分区数量,那么默认只会有一个分区。如果你想要创建一个具有多个分区的 topic,你可以在创建 topic 的命令中指定 --p…...
Makefile 模板 --- 内核模块
内核模块模板 驱动源码同级目录下 #******************************************************************************* # xxx Co., Ltd. All Right Reserved. # Author : # Version : V1.0.0 2020.10.21 # Description : # Note : gaoyang3513163.co…...
仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2
在当今这个高效运作、安全第一的物流时代,仓库作为供应链的中心地带,其安全与效率直接关系到企业的命脉。 随着科技的飞速发展,传统叉车作业模式正逐步向智能化、安全化转型,而在这场技术革新中,AI防碰撞系统N2024G-2…...
计算机视觉CV期末总复习
1.计算机视觉基础 数字图像表示 二值图像 仅包含黑白两种颜色的图像,只使用1个比特为(0黑或1白)表示 彩色图像:分不同的颜色空间 gray灰度图像 每个像素只有一个采样颜色,取值范围0--255,为8比特位&a…...
【微信小程序获取用户手机号
微信小程序获取用户手机号有2种,一种是前端自己解密,一种是获取后发给后端,后端去解密 重点:要在微信公众平台设置里面绑定微信开放平台账号,不然反解不出来用户手机号上代码: <button style"font-size: 16px;" open-type"getPhoneNumber" getphonenumb…...
WFP Listbox绑定数据后,数据变化的刷新
Listbox绑定数据通过ItemsSource来的,如果绑定的是普通的List<数据>,不会自己刷新。 使用ObservableCollection集合 解决问题的方法: 将数组替换为 ObservableCollection ObservableCollection 是专为绑定设计的集合类型,可以通知 W…...
Android Camera压力测试工具
背景描述: 随着系统的复杂化和业务的积累,日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化,需要对Android Camera应用进行全面的压测。 对于压…...
【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】
【华为OD-E卷 - 最优资源分配 100分(python、java、c、js、c)】 题目 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分…...
字符串格式时间(HH-MM)添加间隔时间后转为HH-MM输出
转换时间代码如下所示 #include <iostream> #include <iomanip> #include <sstream>//添加时间转换为时间 std::string addMinutesToTime(const std::string& timeStr, int minutesToAdd) {int hours, minutes;char delimiter;//解析输入时间std::istri…...
SQL 基础教程 - SQL ORDER BY 关键字
SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序。 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。 SQL ORD…...
STM32 软件I2C读写
单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…...
neo4j学习笔记
图数据库 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是图论为基础的,图数据库主要用于存储更多的连接数据。 图论(GraphTheory)是数学的一个分支。图论以图为研究对象,图论的图是由若干…...
【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署 1. 软硬件条件和环境测试1.1 软硬件条件1.2 开发环境测试 2. 创建基于 STM32 处理器…...
GLM-4.7-Flash效果展示:中文诗歌格律检测+不合格处自动标注与修改建议
GLM-4.7-Flash效果展示:中文诗歌格律检测不合格处自动标注与修改建议 1. 引言:当AI遇见古典诗词 你有没有想过,让一个AI来当你的诗词老师?不是那种只会背诗的AI,而是能一眼看出你写的诗哪里平仄不对、哪里押韵出错的…...
从大疆NAZA换到匿名P2飞控:一个DIY玩家的真实体验与参数调试避坑指南
从大疆NAZA到匿名P2飞控:一位DIY玩家的深度迁移指南 当我的F450机架在狭小卧室里显得笨拙不堪时,我意识到需要一次彻底的"瘦身计划"。这不是简单的机架更换,而是一次从商业飞控到开源系统的完整迁移——将大疆NAZA积累的经验移植到…...
网络通信技术基础知识,网络通信技术数据包介绍
网络通信技术是关键技术之一,对于网络通信技术,我们应对其有所了解。为增加大家对网络通信技术的认识,本文将对网络通信技术的数据包结构和原理予以介绍。如果你对网络通信技术存在兴趣,不妨继续往下阅读哦。 在网络通信中, "…...
Matlab/Simulink仿真BLDC电机:避开转速闭环控制的5个常见坑
BLDC电机转速闭环仿真避坑指南:从参数配置到结果验证的完整解决方案 在电机控制领域,BLDC(无刷直流电机)因其高效率、长寿命和低维护成本等优势,已成为工业自动化、电动汽车和消费电子等领域的主流选择。Matlab/Simul…...
3种Cookie管理方案对比:为什么本地导出才是开发者最佳选择?
3种Cookie管理方案对比:为什么本地导出才是开发者最佳选择? 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在Web开发和自动…...
从键盘敲击到屏幕显示:一个字符在Linux内核里的完整旅程(附C代码模拟)
从键盘敲击到屏幕显示:一个字符在Linux内核里的完整旅程 当你在终端敲下字母"A"时,这个简单的动作背后隐藏着一场跨越硬件、内核和用户空间的精密协作。让我们跟随这个字符的脚步,揭开Linux系统如何处理键盘输入的神秘面纱。 1. …...
保姆级教程:将你的YOLOv8模型用Gradio部署到公网,并设置密码保护(避免临时链接失效)
从原型到生产:YOLOv8模型的安全部署与Gradio高级应用指南 当你的YOLOv8模型在本地运行良好,接下来最自然的想法就是把它分享给团队成员、客户或者进行小范围演示。Gradio提供的shareTrue参数看似简单,但背后隐藏着许多值得深入探讨的技术细节…...
在MATLAB中调用与可视化Lingbot-Depth-Pretrain-ViTL-14的深度估计结果
在MATLAB中调用与可视化Lingbot-Depth-Pretrain-ViTL-14的深度估计结果 对于很多从事计算机视觉、机器人或者测绘相关研究的工程师和学者来说,深度估计是一个基础又关键的任务。它能从一张普通的二维图片中,推测出每个像素点距离相机的远近,…...
从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战
从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战 在数字信号处理领域,实现双频信号的精确叠加是一个常见但极具挑战性的任务。无论是通信系统中的载波调制,还是音频处理中的音效合成,都需要工程师能够准确地在硬件层面实现…...
数据中台是什么?怎么搭建数据中台?
去年,一家零售企业的CEO找到我,说了一句让我印象很深的话: "我们公司有数据,但没有数据能力。"很多企业建数据中台,是为了管好数据。 但这个出发点,从一开始就错了。 数据中台的核心不是管理&…...
