<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fox_lht的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fox_lht</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fox_lht]]></copyright><item><title><![CDATA[第十六章 智能指针]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/163429346</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/163429346</guid><author>fox_lht</author><pubDate>Mon, 03 Aug 2026 09:05:32 +0800</pubDate><description><![CDATA[本文介绍了Rust中智能指针的概念与用法。智能指针是拥有额外元数据和能力的数据结构，相比普通引用具有所有权管理能力。主要内容包括： 基础智能指针Box：用于堆分配、递归类型等场景，实现了Deref和Drop trait，可自动解引用和释放内存。 引用计数Rc：支持多所有权共享数据，通过引用计数管理生命周期，但仅提供不可变访问。 内部可变性RefCell：在运行时检查借用规则，允许在不可变引用下修改内部数据。 组合应用：Rc与RefCell结合可实现多所有者且可修改的数据结构。 循环引用问题：通过Weak弱引]]></description><category></category></item><item><title><![CDATA[15.4.循环和迭代器的性能比较]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161926679</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161926679</guid><author>fox_lht</author><pubDate>Fri, 12 Jun 2026 14:27:42 +0800</pubDate><description><![CDATA[本文通过基准测试比较了Rust中使用循环和迭代器查找字符串的性能差异，结果显示两者性能相近。作者指出迭代器作为Rust的零成本抽象，编译后代码与手写低级代码效率相当，且能应用循环展开等优化。文章强调闭包和迭代器融合了函数式编程理念，在保证高性能的同时提升代码可读性，体现了Rust零成本抽象的设计目标。建议开发者可放心使用这些高级特性，无需担心性能损失。]]></description><category></category></item><item><title><![CDATA[15.3.改进我们之前的输入、输出项目]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161926549</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161926549</guid><author>fox_lht</author><pubDate>Fri, 12 Jun 2026 14:25:52 +0800</pubDate><description><![CDATA[本文介绍了如何通过迭代器改进Rust代码。首先讲解了在Config::build函数中使用迭代器替代数组索引和clone方法，通过next()方法直接获取参数值并转移所有权，使代码更简洁高效。其次展示了如何在search函数中用迭代器适配器(filter和collect)替换传统的for循环，消除可变状态，提升代码可读性和潜在并发安全性。最后讨论了迭代器与循环的选择，指出虽然迭代器学习曲线较陡，但能更清晰地表达逻辑意图，且通过迭代器的惰性求值特性可能带来性能优势。这些改进使代码更加函数式和现代化。]]></description><category></category></item><item><title><![CDATA[15.2.使用迭代器处理一系列子项]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161926392</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161926392</guid><author>fox_lht</author><pubDate>Fri, 12 Jun 2026 14:22:22 +0800</pubDate><description><![CDATA[本文介绍了Rust中的迭代器模式，主要包括： 迭代器是惰性加载的，需要消费方法才会执行； Iterator trait的核心是next方法，返回Some(Item)或None； 迭代器分为消费性适配器(如sum)和迭代器适配器(如map)； 可通过闭包捕获环境变量来实现过滤等复杂操作； 示例展示了iter、into_iter、iter_mut等不同迭代器创建方式，以及map、filter等常用方法的使用。迭代器模式简化了集合遍历，提高了代码复用性和灵活性。]]></description><category></category></item><item><title><![CDATA[第十五章 函数式语言：迭代器和闭包]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161898871</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161898871</guid><author>fox_lht</author><pubDate>Thu, 11 Jun 2026 17:14:41 +0800</pubDate><description><![CDATA[本文介绍了Rust语言中函数式编程的两个重要特性：闭包和迭代器。闭包是可以捕获环境的匿名函数，有三种捕获方式（不可变借用、可变借用、所有权转移），并支持FnOnce、FnMut和Fn三种trait。文章通过T恤库存管理示例演示了闭包的实际应用，并对比了闭包与函数的异同。迭代器则是处理元素序列的高效方式。这些特性使Rust代码更简洁高效，是编写地道Rust代码的关键。文中还详细讲解了闭包的类型推断、所有权转移和性能特点。]]></description><category></category></item><item><title><![CDATA[14.6.将错误重定向到标准错误]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161898796</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161898796</guid><author>fox_lht</author><pubDate>Thu, 11 Jun 2026 17:05:58 +0800</pubDate><description><![CDATA[本文介绍了Rust中标准输出和标准错误的区别及使用方法。通过println!宏只能向标准输出设备显示信息，而eprintln!宏则用于向标准错误流输出错误信息。作者演示了如何通过重定向符号&quot;&gt;&quot;将标准输出保存到文件，同时保持错误信息显示在屏幕上。最后修改程序代码，将错误信息改用eprintln!宏输出，实现了成功信息写入文件、错误信息显示在屏幕上的功能。文章总结了如何利用Rust的标准I/O操作编写更有效的命令行程序，涵盖参数处理、文件操作和错误显示等内容。]]></description><category></category></item><item><title><![CDATA[14.5.使用环境变量]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161898654</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161898654</guid><author>fox_lht</author><pubDate>Thu, 11 Jun 2026 17:01:08 +0800</pubDate><description><![CDATA[本文介绍了如何在Rust程序中实现大小写敏感/不敏感的搜索功能。通过环境变量IGNORE_CASE来控制搜索行为，避免了每次运行都要设置参数的麻烦。采用TDD开发流程： 首先编写测试用例，区分大小写敏感(case_sensitive)和不敏感(case_insensitive)两种情况 实现search_case_insensitive函数，通过to_lowercase()统一转换为小写比较 在Config结构体新增ignore_case字段，通过env::var检查环境变量 run函数根据配置决定调用哪个]]></description><category></category></item><item><title><![CDATA[14.4.测试驱动开发]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161898486</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161898486</guid><author>fox_lht</author><pubDate>Thu, 11 Jun 2026 16:57:05 +0800</pubDate><description><![CDATA[本文摘要：文章介绍了如何使用测试驱动开发（TDD）方法实现Rust文件搜索功能。首先将搜索逻辑抽离到lib.rs文件，然后编写失败的测试用例定义预期行为（搜索&quot;duct&quot;返回匹配行）。随后逐步实现search函数：通过遍历文件内容行、检查是否包含查询字符串、收集匹配行。重点讨论了Rust生命周期注解的必要性，指出只需对contents参数和返回值声明相同生命周期。最终测试通过后，演示了程序搜索&quot;frog&quot;、&quot;body&quot;等单词的实际运行效果。整个过程]]></description><category></category></item><item><title><![CDATA[GPUI 框架完整学习教程]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161809873</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161809873</guid><author>fox_lht</author><pubDate>Mon, 08 Jun 2026 23:53:46 +0800</pubDate><description><![CDATA[GPUI 框架学习教程摘要 本教程系统讲解基于Zed编辑器开发的GPUI框架，这是一个用Rust编写的高性能GPU加速GUI框架。教程从基础到进阶共25章，内容涵盖： 核心特性：即时模式渲染、响应式编程、类型安全API，支持60fps+流畅动画 学习路径： 基础：Hello World、布局系统(Flexbox/Grid)、样式配置 核心：事件处理、组件开发、状态管理、虚拟滚动列表 进阶：多窗口管理、拖放系统、动画引擎、性能优化 特色功能：声明式UI语法、主题系统、异步任务支持、剪贴板集成 前置要求：需掌握]]></description><category></category></item><item><title><![CDATA[14.3.重构]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161691560</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161691560</guid><author>fox_lht</author><pubDate>Thu, 04 Jun 2026 16:15:12 +0800</pubDate><description><![CDATA[本文介绍了如何通过重构改进Rust程序，重点解决了四个核心问题：1. 主函数职责过多，通过将业务逻辑分离到lib.rs中实现关注点分离。2. 配置变量管理混乱，使用Config结构体封装相关参数。3. 错误信息不够友好，用Result替代panic并提供明确提示。4. 参数不足时的错误处理，通过检查参数数量并返回用户友好消息。重构步骤包括：创建parse_config函数抽取参数解析逻辑、引入Config结构体管理配置、将parse_config转为Config::new方法、改进错误处理机制、最后将核心业]]></description><category></category></item><item><title><![CDATA[14.2.读文件]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161691514</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161691514</guid><author>fox_lht</author><pubDate>Thu, 04 Jun 2026 16:06:59 +0800</pubDate><description><![CDATA[本文介绍了如何通过Rust程序从指定文件路径读取文本内容。示例代码使用std::fs模块读取名为poem.txt的诗歌文件，该文件包含艾米丽·狄更斯的诗歌文本。程序通过命令行参数接收文件路径，使用read_to_string方法读取文件内容并输出。虽然当前功能正常运行，但作者指出代码存在两个主要问题：主函数职责过多（应遵循单一职责原则），以及缺乏完善的错误处理机制。文章强调在项目早期进行代码重构的重要性，因为小规模代码更容易调整优化。示例运行结果显示成功读取并输出了诗歌文件内容。]]></description><category></category></item><item><title><![CDATA[第十四章 一个输入和输出项目：构建一个命令行程序]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161691408</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161691408</guid><author>fox_lht</author><pubDate>Thu, 04 Jun 2026 16:04:29 +0800</pubDate><description><![CDATA[本章介绍了如何使用Rust创建一个简单的命令行grep工具。主要内容包括： 项目概述：通过构建简化版grep工具，练习Rust文件操作、输入输出等核心概念 参数处理： 使用std::env::args获取命令行参数 将参数保存到变量(query和file_path) 处理参数索引（跳过程序名参数args[0]） 基础实现： 读取两个必需参数（搜索字符串和文件名） 验证参数获取功能 后续方向：提及将扩展错误处理、文件读取和字符串搜索功能 通过这个项目，开发者能学习Rust标准库使用、参数处理等基础知识，为构建]]></description><category></category></item><item><title><![CDATA[13.3.测试的组织方式]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161691219</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161691219</guid><author>fox_lht</author><pubDate>Thu, 04 Jun 2026 16:00:00 +0800</pubDate><description><![CDATA[本文摘要： Rust测试分为单元测试和集成测试。单元测试位于src目录各文件中，使用#[cfg(test)]标记测试模块，可测试私有功能。集成测试位于tests目录，作为外部调用者仅测试公共API，每个测试文件编译为独立crate。集成测试可使用子模块组织代码，通过mod.rs文件避免输出干扰。二进制项目需通过库箱暴露功能才能进行集成测试。两种测试对确保代码质量都至关重要，Rust的类型系统虽能预防部分错误，但仍需测试保证逻辑正确性。]]></description><category></category></item><item><title><![CDATA[13.2.控制测试如何运行]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161396224</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161396224</guid><author>fox_lht</author><pubDate>Mon, 25 May 2026 16:55:02 +0800</pubDate><description><![CDATA[本文介绍了Rust测试工具cargotest的使用方法。cargotest默认并行运行所有测试并捕获输出，可通过参数调整测试行为。主要功能包括：1)使用--test-threads控制并行度；2)通过--show-output显示成功测试的输出；3)按名称筛选测试用例；4)使用#[ignore]标记耗时测试，配合--ignored单独运行被忽略的测试。文章详细说明了如何通过命令行参数控制测试范围、输出格式和运行方式，帮助开发者高效执行测试并获取所需信息。]]></description><category></category></item><item><title><![CDATA[第十三章 编写自动化测试]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161395874</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161395874</guid><author>fox_lht</author><pubDate>Mon, 25 May 2026 16:45:58 +0800</pubDate><description><![CDATA[Rust测试机制解析 摘要：Rust通过类型系统保证内存安全和数据竞争防护，但无法验证业务逻辑正确性。测试机制填补了这一空白，主要包括： 测试结构：使用#[test]属性标记测试函数，通过assert!系列宏验证结果 测试类型：单元测试验证独立功能，集成测试验证模块协作 错误处理：通过should_panic属性测试预期panic，支持自定义错误消息 返回值测试：支持Result&lt;T,E&gt;作为测试返回值，可使用?操作符简化测试代码 测试组织：自动生成的测试模块提供基础结构，开发者只需添加具体测试]]></description><category></category></item><item><title><![CDATA[12.3.使用生命周期使引用一直有用]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161117239</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161117239</guid><author>fox_lht</author><pubDate>Fri, 15 May 2026 16:18:08 +0800</pubDate><description><![CDATA[Rust生命周期机制解析 摘要： Rust的生命周期系统通过编译时检查确保引用有效性，防止悬空引用和数据竞争。生命周期标注主要应用于函数返回引用、结构体包含引用等场景。编译器通过借用检查器比较作用域判断引用合法性，要求被引用者生命周期必须长于引用者。函数签名中的生命周期参数建立了输入与输出引用的关系，结构体中的引用字段也需要生命周期标注。Rust通过生命周期省略规则简化常见场景的标注，但复杂情况仍需显式声明。静态生命周期'static表示整个程序运行期有效的引用。生命周期机制与泛型、trait共同构成了Ru]]></description><category></category></item><item><title><![CDATA[12.2.在接口中使用泛型]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161070850</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161070850</guid><author>fox_lht</author><pubDate>Thu, 14 May 2026 09:34:32 +0800</pubDate><description><![CDATA[Rust中的Trait（特性）是定义共享行为的接口机制，类似于其他语言的接口概念。通过trait关键字可以定义一组方法签名，类型通过impl Trait for Type语法实现这些方法。Trait支持默认实现、作为函数参数和返回值使用，并通过Trait Bound约束泛型类型。关键特性包括：孤儿规则防止实现冲突、全覆盖实现批量扩展功能、where子句简化复杂约束。Trait的核心思想是描述类型&quot;能做什么&quot;而非&quot;是什么&quot;，为Rust的类型系统提供了灵活的多态支持，同时]]></description><category></category></item><item><title><![CDATA[第十二章 泛型、接口和生命周期]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/161070168</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/161070168</guid><author>fox_lht</author><pubDate>Thu, 14 May 2026 09:28:15 +0800</pubDate><description><![CDATA[本文介绍了Rust中泛型编程的核心概念。泛型允许开发者使用抽象类型代替具体类型，通过&lt;T&gt;语法实现函数、结构体和枚举的通用性。文章详细讲解了如何在函数参数、结构体字段和方法实现中使用泛型，特别展示了Option&lt;T&gt;和Result&lt;T,E&gt;等标准库枚举的泛型应用。Rust的泛型通过编译时单态化实现零运行时开销，将泛型代码转换为具体类型代码，既保持了类型安全又确保了执行效率。关键点包括：泛型函数定义、结构体泛型字段、impl&lt;T&gt;方法实现，以及泛型在编译期的具体]]></description><category></category></item><item><title><![CDATA[第十一章 错误处理]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/160914478</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/160914478</guid><author>fox_lht</author><pubDate>Sat, 09 May 2026 10:52:25 +0800</pubDate><description><![CDATA[Rust错误处理机制解析 Rust采用独特的错误处理方式，将错误分为可恢复错误(Result&lt;T,E&gt;)和不可恢复错误(panic!)。与主流语言的异常机制不同，Rust要求开发者显式处理可能的错误情况。对于可恢复错误，推荐使用Result枚举配合?运算符进行传播；对于不可恢复错误则使用panic!终止程序。文章详细介绍了panic的使用场景、配置策略(unwinding/abort)以及Result的各种处理方法(match/unwrap/expect/?)，并对比了不同场景下的最佳实践选择。]]></description><category></category></item><item><title><![CDATA[onPaint函数流程图]]></title><link>https://blog.youkuaiyun.com/fox_lht/article/details/160694963</link><guid>https://blog.youkuaiyun.com/fox_lht/article/details/160694963</guid><author>fox_lht</author><pubDate>Fri, 01 May 2026 23:41:50 +0800</pubDate><description><![CDATA[本文介绍了LightGrid表格控件的onPaint函数绘制流程。该流程包含5个关键阶段：1)初始化GC对象和滚动条；2)绘制列头区域；3)循环绘制可见行单元格(包括普通单元格、行头和固定列)；4)处理网格线绘制；5)性能优化点如剪裁区域和坐标缓存。文章详细说明了坐标系转换规则、选中状态处理以及空单元格绘制等特殊场景，展示了该控件如何通过只渲染可见区域实现高效的大数据量表格显示。]]></description><category></category></item></channel></rss>