rust
文章平均质量分 86
pumpkin84514
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Rust 调用 C 函数的 FFI
项目最佳做法绑定声明用extern "C"明确类型unsafe 封装只在最小封装层使用unsafe模块划分拆分为bindingswrapper构建方式用cccrate 自动编译 C 源码错误处理推荐封装为(进阶)自动生成绑定用bindgen处理大型头文件应用层接口只使用 Rust 风格的安全函数。原创 2025-07-02 22:14:16 · 539 阅读 · 0 评论 -
C 调用 Rust 的过程
C 和 Rust 都是高性能语言,Rust 提供了内存安全的优势,但某些系统级应用可能已经使用 C 或 C++ 编写,并且它们的代码库非常庞大,不能轻易重写。为了在现有的 C 系统中利用 Rust 的优势,我们需要能够将 Rust 函数暴露给 C 代码调用。FFI是一种机制,允许不同编程语言之间互相调用函数。在 C 中调用 Rust 代码,或者反过来,都是通过 FFI 实现的。在 Rust 中,使用 extern "C"语法来声明外部 C 函数,C 调用 Rust 函数,Rust 会将其定义为。原创 2025-06-23 06:53:18 · 1184 阅读 · 0 评论 -
rust的main.rs和lib.rs该怎么写
main.rs:只管组织程序流程、入口、参数解析,不做“事”。lib.rs:暴露架构核心模块,便于测试和复用,是你“可被调用”的 DDD 内核。原创 2025-06-14 09:36:08 · 721 阅读 · 0 评论 -
Rust Mock 工具
Mock(模拟)是测试中不可或缺的工具,用来替代复杂或不可控的依赖,比如数据库、网络服务等,帮助我们写出高质量、健壮的测试代码。Rust 社区中,mockall和mockito是两款主流且强大的 Mock 库,分别针对 trait 依赖和 HTTP 请求。原创 2025-06-01 00:13:20 · 1268 阅读 · 0 评论 -
Rust 测试代码应该放哪里?
Rust测试代码组织实践指南:单元测试通常写在实现文件内(使用#[cfg(test)]标记)或模块同级tests.rs中,可访问私有项;集成测试则放在项目根目录tests/中作为独立crate,仅能测试公开接口。小型模块推荐内联测试,大型项目应按模块层级拆分测试文件,保持测试与代码结构一致。关键原则是"小而精本地测,大而全拆模块,对外测放tests",既保证测试效率又便于维护扩展。原创 2025-06-01 04:00:00 · 1362 阅读 · 0 评论 -
Rust 配置解析`serde` + `toml`
TOML 是一种类似 ini 的配置文件格式,语法简单,适合人类阅读,常见于 Rust 工程的Cargo.toml。如果你有字段在某些配置文件中可能会省略,比如version# version = "1.0.0" // 这行没写你就不能定义为,否则会报错。有值时解析为没值时解析为None这样你的配置就可以“少写字段”而不影响程序运行。Rust 字段类型TOML 写法是否可省略说明String❌ 否不能省略,否则报错✅ 是省略时为None❌ 否普通数组❌ 否表数组(嵌套结构)原创 2025-05-31 13:13:25 · 1361 阅读 · 4 评论 -
什么是 TOML?
TOML,全称,是一个专门为配置文件设计的语言,追求的是:“人类易读 + 机器易解析”。TOML 的语法非常接近 INI,但更加强大和一致性,是 Rust 官方默认的配置文件格式。app: App,port: u16,port: u16,部分内容配置文件格式TOMLRust工具serdetomlcrate使用场景项目配置、插件配置、本地服务配置优势层级清晰、易读、强类型映射支持。原创 2025-05-31 12:52:32 · 1055 阅读 · 0 评论 -
Rust 开发环境搭建与插件
用户请求写一篇完整的优快云文章,要求根据之前的建议生成。文章要包含结构清晰、标题、代码示例、常见提示、跨平台Rust工具链安装差异等内容。文章需准确,包括插件和使用提示,CLI程序示例等。主要内容包括:介绍、Rust工具链安装(Windows/macOS/Linux差异)、VS Code安装与扩展列表、扩展细节与使用、开发者常见提示(如rust-analyzer功能、crate使用等)、小项目示例代码、工作流加速、故障排除和总结。已思考 56 秒。原创 2025-05-08 23:43:58 · 1619 阅读 · 0 评论 -
学习笔记二十二—— 并发五大常见陷阱
两个及以上线程在。原创 2025-04-21 23:15:00 · 1307 阅读 · 0 评论 -
学习笔记二十一——并发概述
并发:思考怎么把活排好队。并行:把排好队的活扔到多核/多机同时干。工程实践里,一定组合模型才能兼顾性能、可靠性与易用性。深刻理解关键概念(锁、消息、调度、背压……)是写出正确并发程序的第一步。终极口诀“并发管队列,并行管核;概念先吃透,模型再拼合。原创 2025-04-21 23:05:00 · 1145 阅读 · 0 评论 -
学习笔记二十——Rust trait
逐句解释Trait 是一组方法签名 + 关联项。它不保存数据,只规定“类型必须具备哪些行为”。实现 Trait = 给类型贴上能力标签。编译器据此检查和生成代码。所有抽象都基于 Trait—— 接口、泛型约束、动态分发、异步、闭包、迭代器… 背后都是 Trait 系统。▶类比:在 Java/C# 里;Rust 把它写成。原创 2025-04-20 23:58:03 · 1251 阅读 · 0 评论 -
学习笔记十九——Rust多态
dyn Trait。原创 2025-04-20 23:51:49 · 851 阅读 · 0 评论 -
学习笔记十八——Rust 封装
将数据与操作它的方法组织在一起,并对外隐藏实现细节,只暴露对外接口。Rust 提供了现代化、静态安全的封装机制,它不像 Java 有 class,但功能上实现了同样甚至更强的封装能力。它定义了某种能力/行为的抽象struct或enum可以实现多个 trait外部通过 trait 使用对象,无需关心具体类型println!内容用途封装表现数据载体私有字段保护数据不被外部访问impl方法实现把行为挂在数据上trait抽象接口通过能力驱动调用,不关心类型mod / pub。原创 2025-04-19 23:43:41 · 1126 阅读 · 0 评论 -
学习笔记十七——Rust 支持面向对象编程吗?
项目Rust 的情况支持封装✅ 有模块系统和可见性控制支持抽象✅ 有 trait 类似接口支持多态✅ 静态和动态多态都支持支持继承❌ 明确不支持类继承语法是否类 OOP❌ 没有 class,语法更像函数式语言Rust 是一门“支持面向对象编程思想,但不强调传统 OOP 结构”的现代语言。它提倡组合优于继承,接口多态代替继承多态。原创 2025-04-19 23:21:39 · 654 阅读 · 0 评论 -
学习笔记十六——Rust Monad从头学
如果一个东西(比如 Option、Result、Future)能做到包值 + 链操作 + 保持上下文结构不变,它就是一个 Monad。就像数学里的“加法结合律”,Monad 定律是确保你写的链式操作是稳定的、不会因为写法不同导致逻辑出错。类型类型构造器unitbind(链接)OptionSome(x)ResultOk(x)Futureasync{}原创 2025-04-17 23:58:49 · 1641 阅读 · 0 评论 -
学习笔记十五——rust柯里化,看不懂 `fn add(x) -> impl Fn(y)` 的同学点进来!
你说:我要点一个鸡腿汉堡!店员说:好的,请先选肉 → 鸡腿再选酱料 → 辣酱最后选芝士 → 加!是不是你并没有一次性说完,而是一步一步选项配置完成?每次传一个参数。这就是“柯里化”的思想:把一个需要多个参数的函数,变成“一层一层传一个参数”的函数结构。✅ 翻译成人话:“我这个函数add,先让你告诉我x,我会返回一个新的函数,这个新函数能接收y,然后把x + y返回。它是个两步操作函数,每步只干一件事。原创 2025-04-17 23:46:22 · 1303 阅读 · 0 评论 -
学习笔记十四——一文看懂 Rust 迭代器
迭代器就是一个可以“一个个吐出值”的东西。[1, 2, 3];println!("{:?("{:?("{:?("{:?// None每次调用.next(),它就给你一个Option<T>Some(x)None优点表现✅ 安全没有手动索引越界的烦恼✅ 高性能零成本抽象,懒执行,自动内联✅ 表达力强写起来非常流畅,读起来像“数据管道”✅ 可组合。原创 2025-04-16 23:11:55 · 1317 阅读 · 0 评论 -
学习笔记十三—— 理解 Rust 闭包:从语法到 impl Fn vs Box<dyn Fn>
Trait(特质)就是 Rust 中的“能力接口”。谁实现了某个 Trait,就可以被当成“具有某种能力”的对象使用。Fn()表示能多次调用FnMut()表示可变调用FnOnce()表示调用一次概念通俗解释闭包能记住外部变量的小函数Trait能力接口,如 Fn 表示可调用impl Fn()编译期固定,快运行时多态,灵活Trait 对象抽象能力 + 虚表,运行时查找实际调用方法。原创 2025-04-16 22:45:02 · 1367 阅读 · 0 评论 -
学习笔记十二——Rust 高阶函数彻底入门(超详细过程解析 + 每步数值追踪)
高阶函数(Higher-Order Function)就是接收函数作为参数,或者返回一个函数的函数。这听起来有点绕,举个生活例子:比如你请我帮你“打字”,但你告诉我:“你打完一遍,再打第二遍”,那你传给我的就是一个“打字”的动作(函数),我来帮你调用两次,这种“把函数传进去”的行为就是高阶函数。表达式含义示例参数是函数f(f(x))连续两次调用 f|x| x * 2闭包语法返回闭包。原创 2025-04-15 23:44:37 · 798 阅读 · 0 评论 -
学习笔记十一——零基础搞懂 Rust 函数式编程
函数式编程(Functional Programming)是:用纯粹、可组合的函数来表达程序逻辑,同时避免副作用。看不懂?我们来一句一句拆开讲 👇很多人第一反应是:“函数不都是函数吗?为啥还要强调‘纯’?副作用 =函数除了返回结果,还影响了“外部世界”。行为是副作用吗?原因改了一个全局变量✅ 是改变了外部状态打印输出println!✅ 是改变了控制台写入文件✅ 是改变了磁盘状态发 HTTP 请求✅ 是影响了外部网络单纯返回值❌ 否没动外部任何东西组合性 =原创 2025-04-15 23:26:42 · 1173 阅读 · 0 评论 -
学习笔记十——智能指针
类型安全性借用检查是否自动释放功能特点&T&mut T✅ 是✅ 是✅ 是借用引用,不拥有数据*const T*mut T❌ 否❌ 否❌ 否原生裸指针,用于 FFI、底层控制智能指针(如 Box)✅ 是✅ 是/部分✅ 是拥有数据,带有自动释放和额外功能📌 智能指针本质是一个拥有值的结构体,实现了Deref和Drop,让你可以像指针一样访问值,又能自动释放资源。智能指针 = 拥有数据 + 自动管理资源 + 像引用一样使用Rc、RefCell 是组合神器,但要小心引用环。原创 2025-04-14 00:18:52 · 837 阅读 · 0 评论 -
学习笔记九——Rust所有权机制
变量里存的是实际的数据。let x = 10;// x 是 i32 值类型在 Rust 中,所有权机制用于管理内存,确保内存安全,不靠垃圾回收(GC),也不手动free。概念通俗解释所有权谁拥有值,谁负责清理移动所有权转移,原值失效复制创建副本,两个变量互不影响借用临时访问但不拥有,分可变/不可变引用表示地址,借用的语法工具生命周期引用能活多久(不能活得比原值久)生命周期参数显式告诉编译器“谁和谁一样久”!原创 2025-04-14 00:04:29 · 1348 阅读 · 0 评论 -
学习笔记八——内存管理相关
a → b → a // 永远互相指着,永远无法释放工具功能说明典型使用场景Rc<T>多个所有者,共享资源单线程共享结构,如树结构Weak<T>不增加计数,防止循环引用父指向子用 Rc,子指向父用 WeakRefCell<T>运行时可变借用检查单线程内部可变性borrow_mut在 RefCell 中获取可变引用downgrade将 Rc 转为 Weak,不影响引用计数避免结构间强依赖Deref让自定义类型也能用*x访问内部值智能指针封装Drop离开作用域时自动释放资源自动释放连接、缓存等。原创 2025-04-13 21:53:00 · 638 阅读 · 0 评论 -
学习笔记七——Rust错误处理
打开文件可能失败(标准库返回 io::Error)解析文件内容格式可能出错(比如不是合法数字)你想统一返回,那就需要定义自己的错误类型。Rust 不相信“侥幸不出错”,它要你在写代码时承认失败的可能性,并好好处理它。原创 2025-04-13 00:15:00 · 1017 阅读 · 0 评论 -
学习笔记六——Rust 切片全解析
(i, c)知识点通俗解释切片的本质借用一段原始数据(不复制、不拥有)&arr[..3]从头到第 2 个元素(不包含第 3 个){:?打印切片要用调试格式.chunks(n)每 n 个元素切成一组,返回多个切片(i, c)避免乱切字符串,查找字符正确位置可变切片&mut [T]借用并修改数据。原创 2025-04-12 00:15:00 · 1130 阅读 · 2 评论 -
学习笔记五——Rust 控制流全解析
控制流就是**程序根据情况“怎么走”**的能力。在 Rust 中,控制流不只是控制路径,更是表达式,也就是说,大部分结构都能返回值,不是单纯“执行一下就完了”。你就等于说:“我要拥有一个可变的堆上字符串,我可能有,也可能没有。Rust 的String存在堆上的数据(可以动态增长)有“所有权”:谁负责创建,就负责释放可变的但是"Tom"固定存在程序里的静态只读文本类型是&str,只是“借来读一下”你不能修改它、不能拿来做主所以,不能让你装一个“借来的只读文字进去”,因为它要能负责到底。原创 2025-04-12 00:15:00 · 1024 阅读 · 0 评论 -
学习笔记四——Rust 函数通俗入门
return类型是否 Copy示例轻量类型✅ Copyi32boolchar胖类型❌ MoveStringVecBoxHashMap有堆内存(要手动释放)拷贝开销大,容易造成内存泄漏默认只能moveT是泛型:可以是任意类型是 Trait 限制:表示 T 必须能比较大小问题要考虑的点参数传递方式move 还是借用?是否可变?是否用泛型如果是通用函数,需要加<T>和 trait 限制返回引用了吗?如果返回引用,要写生命周期'aRust 的函数不仅仅是“能执行的块”,它是。原创 2025-04-11 00:15:00 · 901 阅读 · 0 评论 -
学习笔记三—— Rust 的数据类型
类型类别可变示例说明i32u8整数✅默认整数是 i32f64f32浮点数✅默认浮点是 f64bool布尔❌truefalse条件判断char字符❌'中''🚀'Unicode 字符&str字符串❌"Tom"字面量,只读String字符串✅可变、堆分配tuple复合✅打包不同类型array复合✅[1, 2, 3]长度固定,同类型struct自定义✅建模现实对象enum自定义✅多种状态管理ZST特殊零大小类型,占位用!原创 2025-04-11 03:00:00 · 937 阅读 · 3 评论 -
学习笔记二——变量 let、mut、const 到底有啥区别?
错误代码报错说明解决方法let x = 1;x = 2;❌ 不能修改不可变变量改为let mut x❌ const 必须指定类型改为❌ 类型不匹配改为正确类型⚠️ 未使用变量警告改为_unused或使用变量提高程序安全性避免意外 bug让代码更易读、可维护你不写错,Rust 就不会放过你。原创 2025-04-10 00:17:50 · 762 阅读 · 0 评论 -
学习笔记一—— Rust 包管理神器 Cargo 全面详解
Rust 之所以被称为“工程师的语言”,是因为它把代码质量和工程实践融合得非常深入,而Cargo 就是这种理念的体现。如何用 Cargo 创建、运行、管理项目Cargo.toml和Cargo.lock的作用与区别如何使用features做功能开关如何通过workspace组织大型项目构建优化(debug/release)常见命令操作。原创 2025-04-10 00:17:16 · 2417 阅读 · 0 评论 -
Windows 下 Rust 安装全攻略(无需 Visual Studio)
2Default host triple: [按箭头键选择]然后一路回车,完成安装!原创 2025-04-09 01:28:03 · 2808 阅读 · 0 评论 -
Rust 是如何层层防错的
Rust 把很多错误提前到编译期就报出来,减少运行时意外;提供了cargo fmtclippy等工具,帮助你养成好习惯,减少隐性 bug;编译器不报错 ≠ 代码就没问题,测试还是必不可少;Rust 不仅语法严谨,还通过一整套工具链、测试机制帮你兜底,防错做到极致。原创 2025-04-09 00:06:57 · 999 阅读 · 0 评论 -
Rust 入门四大基石详解:值、类型、代码、运行方式与范式
模块关键点数据值、类型、组合类型、引用、指针、堆与栈代码函数、方法、闭包、接口(trait)、虚表、动态分派运行方式并发与并行、同步与异步、Future、状态机编程范式泛型、trait约束、抽象复用、接口设计。原创 2025-04-08 07:21:47 · 738 阅读 · 0 评论 -
栈与堆的本质区别:深入理解 Rust 的内存管理模型
栈与堆不仅仅是内存概念,更是 Rust 安全和高效的基础。更好地读懂编译器提示;合理设计数据结构;编写性能更优、内存更稳健的程序。Rust 并不要求你亲自管理内存,但它希望你理解内存的使用方式,这正是它安全又高效的秘诀。原创 2025-04-08 00:31:22 · 1348 阅读 · 0 评论 -
理解 Rust 中的 String 分配机制
在64 位系统中,一个 word = 8 字节Rust 中很多基础类型如指针、usize等都是一个 word 大小一个String包含 3 个字段:指针 + 长度 + 容量 → 共 3 个 word = 24 字节.rodata存储静态常量堆上拷贝数据(可变性)栈上维护指针、长度、容量安全、高效、结构清晰。原创 2025-04-07 23:52:42 · 1113 阅读 · 0 评论
分享