<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[程序猿视角]]></title><description><![CDATA[用简单的语言，说明复杂的道理 —— 一名程序员的阅读心得和没有头绪的随笔记录。]]></description><link>https://blog.youkuaiyun.com/quicmous</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; quicmous]]></copyright><item><title><![CDATA[函数式编程“闭包”概念深入解析]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150558288</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150558288</guid><author>quicmous</author><pubDate>Wed, 20 Aug 2025 17:14:20 +0800</pubDate><description><![CDATA[闭包是函数与定义时的词法环境组合体，能记住外部变量状态。它具有状态保持、词法作用域绑定等特性，广泛应用于封装私有变量、回调函数等场景。不同语言对闭包支持程度不同，使用时需注意性能问题和循环陷阱。闭包通过绑定词法环境实现状态持久化和数据封装，是现代编程的重要工具。]]></description><category></category></item><item><title><![CDATA[Rust：实现仅通过索引（序数）导出 DLL 函数的功能]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150474494</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150474494</guid><author>quicmous</author><pubDate>Sun, 17 Aug 2025 23:08:01 +0800</pubDate><description><![CDATA[本文介绍了在Rust中隐藏DLL函数名、仅通过序数导出的方法。通过创建.def模块定义文件，结合MSVC链接器参数/DEF:exports.def /EXPORT:NONE，使用NONAME关键字强制序数导出。步骤包括：配置cdylib项目、编写#[no_mangle]函数、创建.def文件分配序号、设置链接参数，最后验证生成仅包含序数导出的DLL。该方法仅适用于MSVC工具链，可有效保护内部符号名称，调用方需通过GetProcAddress按序数加载函数。]]></description><category></category></item><item><title><![CDATA[Rust：DLL 输出对象的生命周期管理]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150466184</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150466184</guid><author>quicmous</author><pubDate>Sun, 17 Aug 2025 13:33:33 +0800</pubDate><description><![CDATA[本文介绍了在Rust开发DLL时安全传递对象地址给C语言的完整方案。核心是通过Box::into_raw泄漏所有权，由C调用方显式管理生命周期，并提供销毁函数。示例展示了一个线程安全的计数器实现，使用Mutex保证内部可变性。关键措施包括：所有权转移协议、空指针检查、FFI兼容内存布局(repr(C))。同时建议使用RAII封装管理生命周期、避免跨DLL析构、保持版本兼容性。对于共享所有权场景，可选用Arc引用计数方案。最佳实践推荐使用abi_stable库、自动化测试工具和内存分析工具来确保安全性。]]></description><category></category></item><item><title><![CDATA[Rust 中 &i32 与 *i32 的深度解析]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150431695</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150431695</guid><author>quicmous</author><pubDate>Fri, 15 Aug 2025 22:24:41 +0800</pubDate><description><![CDATA[Rust 中 &amp;i32 和 *i32 是两种关键指针类型，存在本质区别。&amp;i32 是安全的引用，由编译器保证内存安全，自动管理生命周期，禁止空值，严格遵循借用规则；而 *i32 是不安全的裸指针，需要手动管理，允许空值，主要用于 FFI 和底层操作，必须在 unsafe 块中使用。虽然 &amp;i32 可安全转换为 *i32，但反向转换需要显式不安全操作。日常开发应优先使用 &amp;i32，仅在特定场景（如 C 交互或极端性能优化）才考虑 *i32。]]></description><category></category></item><item><title><![CDATA[Rust 中 Box 的深度解析：作用、原理与最佳实践]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150431214</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150431214</guid><author>quicmous</author><pubDate>Fri, 15 Aug 2025 21:44:09 +0800</pubDate><description><![CDATA[Rust中的Box是核心智能指针，主要用于堆内存分配、所有权转移和解决递归类型问题。它将数据从栈移到堆，适用于大型数据或需要延长生命周期的场景。Box实现独占所有权和自动释放，编译后效率与手动管理相同。关键应用场景包括处理递归数据结构、实现trait对象、优化大数据传递和构建复杂类型。相比其他智能指针，Box开销最小但不支持共享所有权。最佳实践建议优先使用栈分配，必要时采用Box来防止栈溢出或减少复制开销。Box体现了Rust零成本抽象与安全内存管理的核心设计理念。]]></description><category></category></item><item><title><![CDATA[Delphi7：THashedStringList 详细用法指南]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150423885</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150423885</guid><author>quicmous</author><pubDate>Fri, 15 Aug 2025 15:26:22 +0800</pubDate><description><![CDATA[THashedStringList 是 Delphi 中基于哈希表的高效字符串列表类，相比 TStringList 提供 O(1) 时间复杂度的快速查找能力。摘要内容包含：1) 基本创建和键值对操作；2) 高级功能如自定义分隔符和哈希函数；3) 性能优化技巧；4) 典型应用场景如配置解析和缓存系统；5) 常见问题解决方案。特别适合处理大型数据集(1000+项)和需要频繁查找的字符串操作，但需注意其不支持排序功能，可通过临时 TStringList 实现排序需求。]]></description><category></category></item><item><title><![CDATA[Rust：构造函数 new() 如何进行错误处理？]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150277783</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150277783</guid><author>quicmous</author><pubDate>Tue, 12 Aug 2025 17:29:28 +0800</pubDate><description><![CDATA[Rust 中 new() 方法的错误处理主要有三种方式：1) 返回 Result&lt;T,E&gt;（推荐处理可恢复错误），2) 使用 panic!（仅适用于不可恢复错误），3) 返回 Option&lt;T&gt;（简化处理）。最佳实践是根据场景选择方案：Result 适合需要详细错误信息的输入校验，panic! 用于代码逻辑错误，Option 适用于简单存在性检查。关键原则是显式处理错误、避免隐藏错误，并利用类型系统和错误 trait（如 thiserror）提升代码健壮性。]]></description><category></category></item><item><title><![CDATA[Rust：专业级错误处理工具 thiserror 详解]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150220208</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150220208</guid><author>quicmous</author><pubDate>Mon, 11 Aug 2025 17:07:03 +0800</pubDate><description><![CDATA[Rust错误处理库thiserror详解：专为库开发设计，支持自定义错误类型和自动特征实现。通过#[derive(Error)]宏可快速定义包含格式化错误信息、错误来源和回溯的枚举或结构体错误类型。相比anyhow更适合需要精确错误控制的场景，支持模式匹配和高效错误处理。文章涵盖安装、核心功能、属性详解、最佳实践及与anyhow的对比，是库开发者提升错误处理能力的实用指南。]]></description><category></category></item><item><title><![CDATA[Rust：anyhow 高效错误处理库核心用法详解]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150219685</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150219685</guid><author>quicmous</author><pubDate>Mon, 11 Aug 2025 16:51:58 +0800</pubDate><description><![CDATA[本文详细介绍了Rust中anyhow库的核心用法，它专为简化错误处理设计，特别适合快速原型开发和需要丰富错误上下文的场景。文章从基础错误处理、错误创建、链式回溯到自定义错误转换，全面解析了anyhow的功能，并提供了动态上下文、结果类型简化等进阶技巧。同时指出了在库开发、性能影响等方面的注意事项，最后通过实用代码示例和调试技巧展示了最佳实践。使用anyhow能显著减少错误处理样板代码，推荐结合?操作符和上下文包装来提升代码质量。]]></description><category></category></item><item><title><![CDATA[Rust 库开发全面指南]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150209658</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150209658</guid><author>quicmous</author><pubDate>Mon, 11 Aug 2025 14:08:54 +0800</pubDate><description><![CDATA[/!这是一个数学计算库//!//!提供各种数学计算功能/// 计算两个数的和////// # 示例/// ```////// ```a + b/// 计算阶乘/// 自定义错误类型/// 安全除法} else {Ok(a / b)]]></description><category></category></item><item><title><![CDATA[使用 Rust 创建 32 位 DLL 的完整指南]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150208496</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150208496</guid><author>quicmous</author><pubDate>Mon, 11 Aug 2025 10:33:52 +0800</pubDate><description><![CDATA[本文详细介绍了使用Rust创建32位DLL的完整流程。主要内容包括：环境准备（安装Rust工具链和32位目标）、项目配置（Cargo.toml设置）、DLL代码编写规范（extern &quot;C&quot;和#[no_mangle]使用）、两种编译方式（GNU和MSVC ABI）、头文件创建、C++调用示例，以及高级主题如结构体处理、回调函数和错误处理。文章还提供了构建优化建议（减小DLL体积）和调试技巧，并总结了内存管理、ABI兼容性和线程安全等常见问题的解决方案。]]></description><category></category></item><item><title><![CDATA[Delphi 7 字符串复制机制详解]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150148525</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150148525</guid><author>quicmous</author><pubDate>Sun, 10 Aug 2025 15:38:23 +0800</pubDate><description><![CDATA[Delphi 7 的字符串复制采用引用计数和写时复制机制，实现高效内存管理。字符串赋值仅复制引用而非内容，修改时才创建新副本。该机制确保性能但需注意：多引用共享时修改会触发复制，原始字符串不受影响；多线程环境需同步写操作；循环修改应预分配内存避免性能损耗。开发中可通过UniqueString显式控制复制，或使用TStringBuilder等替代方案处理高频修改场景。理解这一机制对编写高效安全的Delphi代码至关重要。]]></description><category></category></item><item><title><![CDATA[Delphi 中的字符串类型 string 详解]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150147659</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150147659</guid><author>quicmous</author><pubDate>Sun, 10 Aug 2025 14:53:10 +0800</pubDate><description><![CDATA[在 Delphi 7 中，字符串类型默认实现为 AnsiString，其内存结构包含引用计数、长度字段和以 NULL 结尾的字符数据。理论上字符串长度可达 2,147,483,647 字符（2GB），但实际受限于 32 位系统内存分配，通常不超过 512MB。使用时需注意：索引从1开始、避免直接操作内存、大文本建议使用 TMemoryStream 替代。关键特性包括自动内存管理、写入时复制机制，以及与 C 风格字符串的二进制兼容性。]]></description><category></category></item><item><title><![CDATA[Delphi：TList/TObjectList 设计中的 Notify 设计范式]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150112851</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150112851</guid><author>quicmous</author><pubDate>Sat, 09 Aug 2025 18:46:25 +0800</pubDate><description><![CDATA[Delphi中的TList/TObjectList采用混合设计模式实现灵活的集合管理。其核心是Notify方法，结合了观察者模式（状态变更时通知）和模板方法模式（父类定义流程，子类扩展行为）。当列表执行删除等操作时，自动触发Notify通知，子类TObjectList可重写该方法实现对象释放等定制逻辑。这种设计遵循开闭原则，通过虚方法扩展功能而不修改基类，同时保持职责分离——基类管理数据结构，子类处理业务逻辑。实际实现中需注意操作顺序，先处理业务逻辑再调用父类方法，避免访问已释放内存。这种模式在多种框架中广]]></description><category></category></item><item><title><![CDATA[Delphi7：HashMap 键值对存储详解]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150103585</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150103585</guid><author>quicmous</author><pubDate>Sat, 09 Aug 2025 10:18:08 +0800</pubDate><description><![CDATA[Delphi 7 实现 HashMap 功能的解决方案摘要 在 Delphi 7 中，可通过以下方式模拟 HashMap： 推荐方案：使用 THashedStringList 支持字符串键值对，自动管理对象生命周期 高效查找（O(1)），原生支持无需第三方库 示例：HashMap.Values['key'] := 'value' 备选方案： TBucketList：支持任意键类型（需转为 Pointer），需手动释放对象 自定义类：封装 TBucketList 实现类型安全，适合复杂需求 第三方库：如 JV]]></description><category></category></item><item><title><![CDATA[Windows ASLR 地址空间布局随机化技术详解]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/150072721</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/150072721</guid><author>quicmous</author><pubDate>Fri, 08 Aug 2025 18:37:09 +0800</pubDate><description><![CDATA[Windows ASLR（地址空间布局随机化）是一种核心安全技术，通过随机化关键系统组件和应用程序在内存中的加载地址，增加内存破坏漏洞的利用难度。其核心原理包括进程启动时随机化可执行文件、DLL、栈、堆等关键区域的基址，32位和64位系统采用不同随机化熵值。技术实现依赖/DYNAMICBASE编译选项和重定位表，Windows 8后引入强制ASLR机制。虽然存在信息泄漏等绕过手段，但ASLR与DEP、CFG等技术协同构成纵深防御体系，大幅提高了攻击门槛，成为现代操作系统安全的重要基石。]]></description><category></category></item><item><title><![CDATA[如何查看DLL动态链接库内部结构？]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/149899573</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/149899573</guid><author>quicmous</author><pubDate>Mon, 04 Aug 2025 10:16:28 +0800</pubDate><description><![CDATA[本文系统介绍了分析DLL文件内部结构的各类工具：1）微软官方工具（Dumpbin、Dependency Walker）；2）专业逆向工具（Ghidra、IDA Pro）；3）PE文件分析工具（PEView、CFF Explorer）；4）专用DLL分析工具（Dll Export Viewer）；5）终端文本工具（objdump）和Python编程接口（pefile）。文章提供了工具对比表和使用建议，涵盖从快速检查到深度逆向分析的全套解决方案，帮助用户根据需求选择合适的工具组合进行DLL分析。]]></description><category></category></item><item><title><![CDATA[Rust：如何开发32位的DLL动态库]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/149897664</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/149897664</guid><author>quicmous</author><pubDate>Mon, 04 Aug 2025 09:33:38 +0800</pubDate><description><![CDATA[这篇教程演示了如何用Rust创建32位DLL并在C++中调用。主要步骤包括：1)添加32位工具链；2)配置Cargo.toml为cdylib；3)实现导出函数(DllMain、calculate、to_uppercase等)；4)处理跨语言内存管理；5)编译为32位DLL。配套提供了C++测试代码，展示如何加载DLL、调用函数并处理回调。关键点包括使用no_mangle标记导出函数、正确内存管理约定以及32位兼容性。]]></description><category></category></item><item><title><![CDATA[Rust： 获取 MAC 地址方法大全]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/149884472</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/149884472</guid><author>quicmous</author><pubDate>Sun, 03 Aug 2025 19:13:15 +0800</pubDate><description><![CDATA[Rust中获取MAC地址需使用第三方库如mac_address，标准库不提供此功能。文章详细展示了多种方法：获取所有/特定接口MAC地址、过滤虚拟接口、格式化输出，并处理跨平台兼容性问题（Windows/macOS/Linux）。还包括错误处理、重试机制和实用函数如MAC地址验证。代码示例涵盖基础到高级用法，如通过注册表获取Windows MAC地址、自定义错误类型等，为不同场景提供全面解决方案。]]></description><category></category></item><item><title><![CDATA[Rust 同步方式访问 REST API 的完整指南]]></title><link>https://blog.youkuaiyun.com/quicmous/article/details/149884229</link><guid>https://blog.youkuaiyun.com/quicmous/article/details/149884229</guid><author>quicmous</author><pubDate>Sun, 03 Aug 2025 18:53:49 +0800</pubDate><description><![CDATA[Rust同步访问REST API简明指南 本文介绍了使用Rust以同步方式访问REST API的完整方案。内容涵盖： 核心依赖：推荐使用reqwest的blocking特性配合serde进行JSON处理 基本请求：包括GET获取文本/JSON数据，以及POST发送JSON/表单数据 高级功能：请求头设置、超时控制和分页处理 错误处理：自定义错误类型的最佳实践 同步方案特别适合简单应用和脚本场景，避免了异步编程的复杂性，同时仍能提供完整的API访问能力。文中包含可直接使用的代码示例，展示了从基础到进阶的各种A]]></description><category></category></item></channel></rss>