Rust学习
文章平均质量分 89
rust学习笔记,学习经验分享
编码浪子
一杯咖啡,一台电脑,一个bug都没有的代码,这真的很美!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
冒泡排序:像气泡一样“浮“出顺序的神奇算法
它就像水底的气泡一样,把小的元素"浮"到最上面,大的元素"沉"到最下面。冒泡排序也是这样:小的元素会"浮"到数组的前面,大的元素会"沉"到数组的后面。冒泡排序就像水底的气泡,小的元素慢慢"浮"到数组的前面,大的元素"沉"到后面。[3, 5, 8, 4, 2] → 5和8比较,5<8 → 不交换 → [3, 5, 8, 4, 2][3, 5, 8, 4, 2] → 8和4比较,8>4 → 交换 → [3, 5, 4, 8, 2]完成一轮比较后,最大的元素(8)已经"浮"到了数组的最后面。原创 2025-10-29 09:49:23 · 803 阅读 · 0 评论 -
趣味学RUST基础篇(实战Web server)完结
呼……终于把前面那些忍术都学会了。”小新擦了擦汗,合上厚厚的《Rust 忍者秘籍》。小新瞪大了眼睛:“Web 服务器?那不是爸爸用来工作的大电脑吗?我也能做?”秘籍温柔地回答:“当然!今天,我们就用学到的所有知识,从最底层开始,亲手搭建一个能返回 ‘Hello, 动感超人!’ 的网站!就像搭积木一样简单!小新挠头:“服务器是啥?它怎么和我的浏览器说话?“想象一下,服务器就像一个永不挂机的‘客服中心’。它用一根叫的‘超级电话线’一直开着,等着别人打进来。当你在浏览器输入。原创 2025-09-16 09:13:55 · 1210 阅读 · 0 评论 -
趣味学RUST基础篇(高级特征)
章鱼小新的家族是忍者世家,小新掩人耳目的身份是一家火锅店老板,平时用的都是“基础忍术”——变量、函数、控制流,就像他每天吃零食、看动感超人一样普通。这样的代码,用的是“函数项”,它更像是忍术的一个“快照”。它虽然装的是普通水,但贴上‘隐身药水’的标签后,就成了独一无二的宝贝!但“不安全 Rust”就像打开了“问题是:闭包很特别,每个闭包都是独一无二的“定制符咒”,它们的类型连编译器在编译前都看不清长什么样。这个函数永远不会正常返回(因为它直接让程序崩溃了),所以它的“返回类型”是一个“不存在的类型”。原创 2025-09-16 09:11:58 · 805 阅读 · 0 评论 -
趣味学RUST基础篇(OOP)
简单说,就是把程序当成一个真实世界来设计!对象= 店铺、员工、顾客、锅底属性= 店铺位置、员工姓名、顾客口味方法= 上菜、加汤、结账地铁闸机:没刷卡进不去,出站要刷卡电梯按钮:只能按当前楼层允许的按钮游戏关卡:必须通关才能进入下一关记住:当你有一系列状态,且不同状态有不同的行为时,状态模式就是你的最佳选择!原创 2025-09-15 09:07:27 · 1139 阅读 · 0 评论 -
趣味学RUST基础篇(异步补充)
简单说,就是给异步操作定规矩!就像麦当劳有《服务手册》,章鱼小新也要为他的火锅店制定《智能服务标准》。// 定义火锅店的服务标准(异步Trait)// 必须实现的方法// 可以有默认实现的方法println!("欢迎光临章鱼小新火锅!");小订单、多等待→ 用异步任务(智能服务员)大计算、少等待→ 用线程(大师傅)两者结合→ 发挥最大效能记住:异步不是万能的,线程也不是落后的。关键是根据场景选择合适的工具!原创 2025-09-12 10:39:10 · 1551 阅读 · 0 评论 -
趣味学RUST基础篇(异步)
想象一下,你网购了一台游戏机。下单那一刻:你并没有拿到游戏机(现在没有准备好)。但你知道:过几天,快递会把它送到你家(未来某个时刻会准备好)。在编程中,Future就像这个“未来的快递包裹”。它代表一个现在可能还没有结果,但在未来某个时刻会有结果的值。返回的不是一个User,而是一个—— “一个将来会包含用户信息的包裹”。返回的不是一个图片文件,而是一个—— “一个将来会包含图片数据的包裹”。别名Future在别的语言里也叫 “Promise” 或 “Task”,意思都一样。原创 2025-09-11 14:36:28 · 1204 阅读 · 0 评论 -
趣味学RUST基础篇(多线程并发)
武器特点适用场景线程 (创建分身,同时干活需要真正并行的任务消息传递 (安全!避免数据竞争,代码清晰推荐优先使用,尤其任务逻辑独立时共享状态 + 锁 (MutexArc灵活,可以直接修改共享数据多个线程需要频繁读写同一份数据若非必要,勿增实体;若要共享,必加防护。Rust 通过其独特的所有权系统和类型系统,在编译时就能帮你揪出大部分并发错误,让你写出既快又安全的代码,不用再为“段错误”、“数据竞争”这些恐怖的东西担惊受怕了!原创 2025-09-11 09:29:52 · 330 阅读 · 0 评论 -
趣味学RUST基础篇(智能指针_结束)
RefCell<T>是 Rust 的“内部可变性”工具,它让你在“外表不可变”的情况下,安全地修改内部数据 —— 规则检查从“编译时”挪到“运行时”。写测试 mock 对象构建循环数据结构多个所有者共享并修改同一数据(配合Rc<T>引用循环就像两个朋友互相谦让,结果谁也出不去。用Weak<T>打破循环,让一方“只看不拥有”,就能顺利释放内存。原创 2025-09-10 13:57:56 · 910 阅读 · 0 评论 -
趣味学RUST基础篇(智能指针2)
当一个变量“寿终正寝”(离开作用域)的时候,Rust 会自动调用一个叫drop的函数,帮你把它的“遗物”(比如堆内存、文件句柄)收拾干净。这在其他语言里,你得自己记得说:“喂,我用完这个对象了,快释放内存!但在 Rust,你什么都不用做——它自己会默默收拾好,还不会忘。举个栗子:你用Box<T>分配了一块内存,用完之后,只要变量超出作用域,Rust 就会自动释放那块内存。不用手动free(),也不会内存泄漏。因为 Rust 有Drop这个贴心管家。当然可以!原创 2025-09-10 09:44:17 · 1113 阅读 · 0 评论 -
趣味学RUST基础篇(智能指针1)
Box<T>在 Rust 中,是“取引用”,是“解引用”。let x = 5;let y = &x;// y 是个引用,指向 xassert_eq!(5, *y);// 必须加 * 才能“解开”引用,拿到里面的 5如果你写assert_eq!(5, y),会报错:“你不能拿一个整数和一个‘指向整数的指针’比较!所以:*y的作用就是“顺着箭头找到背后的值”。原创 2025-09-09 11:42:20 · 1332 阅读 · 0 评论 -
趣味学RUST基础篇(函数式编程迭代器)
你用高级语法写的代码,Rust 编译器能把它变成和你手写汇编一样高效的机器码。你用“自动驾驶”模式开车,结果发现它比你手动开还省油、还安全。你用“美颜滤镜”拍照,结果发现画质和原图一模一样,只是更好看了。Rust 说:“你不用的,不收你钱(不引入开销);你用了的,我给你做到极致(不可能手写更好)。这正是 C++ 之父 Bjarne Stroustrup 说的“零开销(zero-overhead)”原则!原创 2025-09-09 10:36:15 · 893 阅读 · 0 评论 -
趣味学RUST基础篇(函数式编程闭包)
魅力说明匿名灵活不用命名,随手创建,随手用记忆超群能捕获定义时的环境变量类型智能编译器自动推断,省心省力。原创 2025-09-08 15:51:49 · 1097 阅读 · 0 评论 -
趣味学RUST基础篇(构建一个命令行程序完结)
现在search函数已经通过测试,可以投入使用了!你回到主程序run函数调用它,完整代码如下;//重点是这行println!("{line}");Ok(())搜"frog"→ 返回 1 行搜"body"→ 返回多行搜(根本不存在的词)→ 一行都不返回完美!你的“迷你 grep”大功告成!正常结果 → 走stdout→ 可以被保存、被处理。错误信息 → 走stderr→ 直接弹出,不会被“淹没”。这就像:一个好的服务员,不会把账单和垃圾一起扔进垃圾桶。原创 2025-09-08 10:29:34 · 747 阅读 · 0 评论 -
趣味学RUST基础篇(构建一个命令行程序2重构)
太好了!我们的探测器已经能听懂指令了,知道要找“”,并且知道去“”里找。但问题来了——它还!就像一个拿着探测器的探险家,眼睛一闭,啥也看不见。所以,第二步,我们要教它如何“翻阅卷轴”——读取文件!原创 2025-09-05 14:39:17 · 1404 阅读 · 1 评论 -
趣味学RUST基础篇(构建命令行程序1)
这一节,我们开始做一个小程序,顺便把前面的内容回顾一下。。手动一页页翻?太慢了!你需要一个!这,就是我们今天要用 Rust 打造的——一个属于你自己的 grep,我们可以叫它“使用Rust做的工具不仅(运行速度),还(安全性高),而且打包出来就一个(单一二进制文件),不管是在 Windows、Mac 还是 Linux 的探险营地里,都能直接打开就用!简直是造“探险工具”的完美人选。原创 2025-09-05 09:05:20 · 1060 阅读 · 0 评论 -
趣味学RUST基础篇(测试)
默认的错误信息有时候太冷冰冰了。assert!失败时只说:“断言失败”,你根本不知道result到底是啥。解决办法:加自定义消息!assert!result是不是清楚多了?就像朋友在告诉你:“兄弟,你忘了把名字加进去啊!准备 → 执行 → 断言:测试三步走,稳如老狗。多用assert_eq!和assert_ne!:清晰明了,失败时还能看到具体值。善用自定义消息和:让错误信息更有“人情味”,定位 bug 更快。原创 2025-09-04 14:05:51 · 1332 阅读 · 1 评论 -
趣味学RUST基础篇(泛型扩展)
类型语法关键点函数T: Trait约束行为结构体多参数T, U更灵活枚举Option和Result的秘密方法可通用,可特化,可自泛型。原创 2025-09-03 09:13:50 · 928 阅读 · 0 评论 -
趣味学RUST基础篇(泛型)
工具作用类比泛型<T>抽象类型,避免重复代码万能模板Trait约束泛型的行为能力合同生命周期'a管理引用的存活时间时间管理大师“恭喜各位!经过今天的《Rust 代码瘦身营》,你已经掌握了:用泛型消灭重复代码用 Trait 确保类型有正确行为用生命周期防止悬垂引用”原创 2025-09-03 09:05:53 · 887 阅读 · 0 评论 -
趣味学RUST基础篇(错误处理)
panic!原创 2025-09-02 11:25:02 · 1264 阅读 · 0 评论 -
趣味学RUST基础篇(HashMap)
就像一个魔法储物柜每个抽屉都有一个标签(Key)抽屉里放着对应的物品(Value)"蓝队" → 10 分"黄队" → 50 分你想查蓝队得分?直接问:“蓝队多少分?10!它不靠“第几个”,而是靠“叫什么”来查找,又快又准!原创 2025-09-02 09:14:07 · 768 阅读 · 0 评论 -
趣味学RUST基础篇(向量)
向量就像一个自动伸缩的货架,里面一格一格地放着相同类型的物品。可以放 1 个、10 个、甚至 1000 个!但所有格子里的东西必须是同一类型(比如全是i32数字,或全是String字符串)用途:存文件的每一行、购物车商品、游戏得分列表……原创 2025-09-01 14:34:48 · 1033 阅读 · 1 评论 -
趣味学RUST基础篇(String)
类型名字特点&str字符串切片“只读卷轴”,通常来自字面量,比如"hello"String动态字符串“可编辑卷轴”,能增、删、改,像Vec<T>一样灵活通常我们说“字符串”,就是指这两个一起。“只读”和“可变”是两回事!字符串,远比你想象的复杂。Rust 没有隐藏这种复杂性,而是把它摆在你面前,让你写出真正健壮的代码。原创 2025-09-01 14:22:28 · 1188 阅读 · 0 评论 -
趣味学RUST基础篇(管理包和模块)
概念类比作用mod建房间划分代码区域路径门牌号定位某个函数或结构体pub开门按钮决定是否对外开放use快捷方式简化对常用项的调用模块树大楼平面图展示所有模块的层级关系。原创 2025-09-01 10:03:34 · 890 阅读 · 0 评论 -
趣味学RUST基础篇(枚举&模式匹配)
而是你的工具箱里又多了一把趁手的“螺丝刀”。突然,法庭传来消息:这枚 25 美分硬币可不简单,它是一枚“州纪念币”,背面刻着一个州的名字!这保证了你永远不能假装“盒子肯定有东西”,必须面对“可能为空”的现实,从而避免了“十亿美元的错误”。:它不让你假装“肯定有东西”,而是逼你面对现实——“可能有,也可能没有”。你再也不用区分具体是哪种装备了,他只关心“这是出行装备”这件事本身。代码更短,缩进更少,没有多余的“空判决”!来表示“没有”,但这就像个“定时炸弹”,一不小心就会炸(程序崩溃)。原创 2025-08-31 11:53:40 · 967 阅读 · 0 评论 -
趣味学RUST基础篇(结构体&方法)
你想设计一个“剑圣”这样的英雄。这个英雄需要哪些信息?你需要给每个信息贴上标签。// struct = "设计一个英雄"active: bool, // 标签1:是否活跃?(是/否)username: String, // 标签2:用户名 (比如 "朱比瑟斯")email: String, // 标签3:电子邮件 (比如 "flash@justiceleague.com")sign_in_count: u64, // 标签4:登录次数 (比如 100 次)struct。原创 2025-08-30 22:36:06 · 1422 阅读 · 0 评论 -
趣味学Rust基础篇(所有权)
文件类型Rust 操作比喻能否继续使用原变量?小便签i32bool…)复印一份Copy给同事一张复印件✅大合同StringVec…)转移原件Move把原件交出去,自己没了❌小而简单的类型(整数、布尔、字符等)可以Copy,赋值后原变量依然有效。复杂类型(StringVecBox等)会Move,赋值后原变量失效。只要一个类型或它的成员需要“清理工作”(Drop),它就不能是Copy。原创 2025-08-29 14:50:52 · 870 阅读 · 0 评论 -
趣味学Rust基础篇(控制流程)
控制流关键词口诀适用场景条件判断ifelse ifelse“如果……就……否则……”做选择题无限循环loopbreakcontinue“一直干,直到喊停”重试操作、等待信号条件循环while“当……时,一直干”计数、状态检查遍历集合for“把每个都过一遍”遍历数组、列表(首选!if条件必须是bool,不能是数字或字符串。if是表达式,可以赋值给变量,但所有分支返回类型必须一致。遍历集合,优先用for,安全又省心!原创 2025-08-29 11:18:22 · 878 阅读 · 0 评论 -
趣味学Rust基础篇(函数)
函数可以“做菜”,也可以“上菜”。这个“菜”就是返回值。在 Rust 里,函数默认返回最后一个表达式的值,不需要写return(除非你想提前退出)。5 // 直接写 5,它就是“菜”,端上桌!// x 得到 5println!("x 是 {x}");// 输出:x 是 5-> i32表示“这道菜是i32类型的整数”。5是表达式,没有分号,所以它被返回。错误示范:加了分号就变“语句”,不返回值!x + 1;// 加了分号,变成语句,返回 (),但函数声明要 i32 → 报错!原创 2025-08-28 11:33:44 · 1071 阅读 · 0 评论 -
趣味学Rust基础篇(数据类型)
明确性与安全性:类型必须清晰(静态类型),默认不可变,访问越界会 panic。这些规则在编译时和运行时帮你抓住错误。性能与控制:提供了从u8到i128的精细整数选择,用于系统编程,数组在栈上分配以获得极致性能。现代性char支持 Unicode,让程序天生支持多语言。组合性:通过元组和数组,可以轻松组合数据。而Vec等标准库类型则提供了更高级的抽象。零成本抽象:这些类型和检查带来的安全性,几乎没有运行时性能损失。现在,你已经掌握了 Rust 构建程序的“基本积木”。原创 2025-08-28 09:28:52 · 793 阅读 · 0 评论 -
趣味学Rust基础篇(变量与可变性)
let(不可变)默认安全。盒子上锁,防止意外修改。let mut(可变)明确授权。需要修改时才解锁,且明确告知他人。const(常量)全局铁律。编译时确定,永不改变,作用域广。let(隐藏)灵活转换。同名换新盒,可改类型,转换后回归安全。这些规则共同作用,让 Rust 程序在编译时就能捕获大量潜在的错误(比如数据竞争、空指针、类型错误),而无需牺牲运行时性能。这就是 Rust “零成本抽象”和“内存安全”的精髓所在。现在,你已经理解了 Rust 变量背后的核心哲学。原创 2025-08-27 22:42:55 · 772 阅读 · 0 评论 -
趣味学习Rust基础篇(用Rust做一个猜数字游戏)
这篇文章不仅带你一步步完成游戏,更会清晰地解释 Rust 的核心概念,让你在实践中真正理解这门语言。各位亲爱的小伙伴们,想学一门强大的编程语言吗?今天,我们就用 Rust 来做一个超经典的“猜数字”游戏。一边玩,一边就把 Rust 最重要的几个“法宝”给学明白了!准备好了吗?Let’s go!原创 2025-08-27 21:49:42 · 1117 阅读 · 0 评论 -
GBT32960 协议编解码器的设计与实现
通过合理的架构设计和细致的实现,我们实现了一个既高效又可靠的 GBT32960 协议编解码器。严格遵循协议规范健壮的粘包处理完善的错误处理全面的测试覆盖这个实现不仅保证了协议的正确性,也为上层应用提供了一个稳定的基础。原创 2025-03-04 21:45:30 · 823 阅读 · 0 评论 -
基于 Rust 与 GBT32960 规范的编解码层
1. 完整的帧解析逻辑:- 起始符验证,根据接口协议验证是否0x23开头- 命令标识和应答标志解析- VIN码解析,vin码17个字节长度- 加密方式解析,读取加密方式,测试的时候可以先不使用,上生产环境后要打开- 数据单元长度解析,表示数据payload的总长度- 数据单元提取- 校验和验证2. 数据完整性检查:- 最小帧长度检查- 完整数据长度检查- 校验和验证3. 添加了单元测试:- 测试有效帧的解码- 测试校验和错误的情况。原创 2025-03-03 22:33:52 · 727 阅读 · 0 评论 -
基于 Rust 与 GBT32960 规范构建高并发、高可用、高扩展服务端程序
该服务端架构依托 Rust 语言搭建,严格遵循 GBT32960 规范,致力于为复杂应用场景提供优质的数据交互与命令处理服务。其功能架构分为数据解析层、命令处理层、并发控制层、故障应对层和扩展适配层。数据解析层凭借 Rust 的模式匹配与结构体定义,精准解析规范中的数据格式,对规范细节的准确把握及解析算法的优化是高效处理高并发数据的关键。命令处理层依据规范,借助函数映射或状态机,关联不同命令与处理逻辑,确保处理逻辑的正确完整以及妥善应对异常是核心要求。原创 2025-03-03 15:27:52 · 1444 阅读 · 0 评论 -
构建一个rust生产应用读书笔记7-确认邮件3
在什么情况下触发邮件发送(如用户注册、密码重置等)。邮件的内容格式(包括主题、正文、签名等)。收件人的信息来源(从数据库中获取还是其他方式)。是否有特殊的业务逻辑需要考虑(如个性化内容、多语言支持等)。书中的第七章内容比较多,这周调代码好了好长时间,下一节就记录我代码重构的过程吧。原创 2024-12-31 15:13:03 · 1139 阅读 · 0 评论 -
构建一个rust生产应用读书笔记7-确认邮件2
当每个集成测试文件都是一个独立的可执行文件时,共享测试辅助函数的一种常见方法是创建一个单独的模块,该模块可以被所有测试文件导入和使用。这个模块通常包含所有测试需要共用的辅助函数、常量、配置和其他资源。原创 2024-12-24 14:49:39 · 1338 阅读 · 0 评论 -
构建一个rust生产应用读书笔记7-Mock编码浪子
编写单元测试是确保代码质量、稳定性和可维护性的关键步骤,尤其是在采用测试驱动开发(TDD)方法时。对于组件的测试,我们确实应该从小处着手,先保证组件本身的功能正确无误,然后再逐步集成到更大的系统中。这不仅可以提高我们的信心,还能简化调试和问题定位。原创 2024-12-23 10:48:14 · 1174 阅读 · 0 评论 -
构建一个rust生产应用读书笔记7-确认邮件1
亲爱的读者们,在前一章中,我们介绍了对新订阅者的电子邮件地址的验证——它们必须符合电子邮件格式。现在我们拥有的电子邮件虽然在语法上是有效的,但我们仍然不确定这些邮箱是否真的存在:有人实际使用这些电子邮件地址吗?它们可以接收到邮件吗?我们无法确定,而唯一的方法就是发送一封真正的确认邮件。原创 2024-12-19 08:58:06 · 914 阅读 · 0 评论 -
构建一个rust生产应用读书笔记6-拒绝无效订阅者02
根据DDD的原则,定义清晰的边界上下文(Bounded Contexts)。每个上下文应该封装一个独立的业务领域,并且有明确的接口与其他上下文交互。这样可以帮助保持各部分的分离,减少耦合。确实,验证POST请求中路径下的有效负载(payload)中的电子邮件地址是否符合预期格式只是确保数据质量的第一步。如你所提到的,即使一个电子邮件地址在语法上是有效的,我们仍然无法确定该地址是否实际存在、被使用或可以接收邮件。为了进一步确认电子邮件地址的有效性和可达性,发送一封确认邮件是一种常见且有效的做法。原创 2024-12-18 08:56:05 · 1416 阅读 · 0 评论 -
构建一个rust生产应用读书笔记6-拒绝无效订阅者01
rust是一门不太容易掌握的语言,在实际学习过程中遇到了很多问题,很不可思议。不过大多数情况下都可以在网上找到答案,希望正在学习的朋友们不要放弃。原创 2024-12-17 09:04:48 · 1349 阅读 · 0 评论
分享