<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cppclub的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cppclub</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cppclub]]></copyright><item><title><![CDATA[从 Cursor 到 Claude Code：AI 编程助手的高效协作艺术全攻略]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/148723666</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/148723666</guid><author>cppclub</author><pubDate>Tue, 17 Jun 2025 20:55:34 +0800</pubDate><description><![CDATA[《Claude Code高效协作实战指南》分享了Tailwind Labs工程师总结的AI编程技巧。核心建议包括：通过频繁重启会话保持性能；编写详细Prompt提升响应质量；使用子任务并行处理复杂需求；要求AI深度思考避免表面方案；结合git确保代码安全。文章还介绍了实用功能如语音输入、文档学习模式，以及国内直连中转站解决方案。强调AI并非全自动工具，需保持人工审查，通过渐进策略实现最佳协作效果。这些实战经验可显著提升开发者与AI的工作效率。]]></description><category></category></item><item><title><![CDATA[Kagi搜索：互联网搜索的净土，值得你的每一分钱]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/147861111</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/147861111</guid><author>cppclub</author><pubDate>Sat, 10 May 2025 23:33:43 +0800</pubDate><description><![CDATA[Kagi搜索是一款付费优先的搜索引擎，旨在提供无广告、无数据追踪的纯净搜索体验。其特点包括极简设计、护眼配色、个性化过滤系统、智能摘要与AI助手、快速加载速度以及丰富的快捷指令。Kagi的定价模式采用“用多少付多少”的原则，且提供“零使用不收费”政策。]]></description><category></category></item><item><title><![CDATA[第 10 章：在C++中使用协程进行系统编程]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135961987</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135961987</guid><author>cppclub</author><pubDate>Wed, 31 Jan 2024 20:54:24 +0800</pubDate><description><![CDATA[一个进程就是一个程序的运行实例。它有自己的地址空间，除了通过共享内存，不与其他进程共享。线程存在于进程中，它们不能脱离进程存在，尽管在Linux中，进程和线程都被视为任务。它们以相同的方式被调度，并且在内核级别有相同的控制结构。尽管如此，线程被认为是轻量级的，因为程序的初始负载的较大开销由父进程承担。但这并不是完整的情况。还有纤程和协程。如果说进程和线程是真正的并发并且在共享资源上并行工作，纤程就像线程，但不符合并发。虽然线程通常依赖于任务调度器的抢占式时间分片，纤程使用协作式多任务处理。]]></description><category></category></item><item><title><![CDATA[第 9 章：理解C++内存模型]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135942785</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135942785</guid><author>cppclub</author><pubDate>Tue, 30 Jan 2024 22:30:38 +0800</pubDate><description><![CDATA[在本章中，我们汇集了使用C++实现最佳代码性能所需的全部工具集。你学习了许多不同系统和软件层面上的技术，如果你现在想休息一下，这是可以理解的。确实，我们所涵盖的一些内容，例如分支预测和缓存友好性，或通过条件变量和内存顺序实现更多算法，值得花费更多时间。我们强烈鼓励你将本章作为改进系统和更有效工作方向的一步。下一章将致力于C++特性的另一个重大改进——协程。你将看到，对于这里讨论的一些机制，如事件等待，它们更为可取，而且更轻量。第7章第3章第2章。]]></description><category></category></item><item><title><![CDATA[第 8 章：Linux中使用时钟、计时器和信号]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135919719</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135919719</guid><author>cppclub</author><pubDate>Mon, 29 Jan 2024 19:49:28 +0800</pubDate><description><![CDATA[在本章中，我们探索了Linux环境中可用的不同计时器。随后，我们了解了时钟纪元背后的重要性和UNIX时间的概念。接着，我们深入探讨了在Linux中准确测量时间的POSIX的实际实现。此外，我们研究了的领域，并检查了C++为有效的时间相关操作所提供的一系列功能。我们的探索随后带我们详细了解了框架内定义的持续时间、时间点和时钟。接下来，我们熟悉了内可用的各种时钟类型。随着我们的旅程继续，我们开始探索所提供的日历功能。最后，我们熟悉了时区，并提高了我们利用所提供的工具无缝执行时间转换的熟练度。]]></description><category></category></item><item><title><![CDATA[C++ 编程的幕后花絮]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135896682</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135896682</guid><author>cppclub</author><pubDate>Sun, 28 Jan 2024 16:07:49 +0800</pubDate><description><![CDATA[在C++的世界中，精准与创造力相结合，程序员们正在构建改变人们生活的非凡应用程序。我们希望这本书能帮助你成为那个社区不可或缺的一部分。下面，你将通过C++基础知识的速成。我们将涉及诸如C++中的应用程序构建过程、C++应用程序的底层细节，以及面向对象编程技术的快速介绍等主题。让我们开始吧！]]></description><category></category></item><item><title><![CDATA[第 5 章：高级语言结构的 IR 生成]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135889672</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135889672</guid><author>cppclub</author><pubDate>Sat, 27 Jan 2024 22:35:47 +0800</pubDate><description><![CDATA[在本章中，您学习了如何将聚合数据类型和指针翻译为LLVM IR代码。您还了解了应用程序二进制接口的复杂性。最后，您了解了将类和虚拟函数转换为LLVM IR的不同方法。有了本章的知识，您将能够为大多数实际编程语言创建一个LLVM IR代码生成器。在下一章中，您将学习有关IR生成的一些高级技巧。异常处理在现代编程语言中相当常见，LLVM对此也有一定的支持。将类型信息附加到指针上可以帮助某些优化，因此我们也将添加这一点。]]></description><category></category></item><item><title><![CDATA[第 7 章：进程间通信]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135888925</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135888925</guid><author>cppclub</author><pubDate>Sat, 27 Jan 2024 21:50:19 +0800</pubDate><description><![CDATA[我们很高兴再次讨论IPC主题。上次我们在[第3章]中讨论了管道，并使用了一些代码示例。您了解了进程间交换数据的基本机制，但如您所记，存在一些阻塞点。就像任何编程工具一样，管道有其特定用途——它们快速，可以帮助您从相关（forked）进程（通过匿名管道）和不相关进程（通过命名管道）发送和接收数据。同样，我们可以使用MQs传输数据，它们也适用于相关和不相关的进程。它们提供了将单个消息发送到多个接收进程的能力。但正如您所见，管道在发送和接收二进制数据方面是原始的，而MQs则引入了消息的概念。]]></description><category></category></item><item><title><![CDATA[Rust循环和函数]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135856602</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135856602</guid><author>cppclub</author><pubDate>Fri, 26 Jan 2024 00:29:00 +0800</pubDate><description><![CDATA[如果你想要一个函数只在特定的操作系统上工作，那么用 #[cfg(target_os = “xyz”)] 属性来标注它（其中 xyz 可以是 “windows”、“macos”、“linux”、“android”、“freebsd”、“dragonfly”、“bitrig” 或 “openbsd” 中的一个）。每个 Rust 程序的起点都是一个名为 main() 的函数，它可以进一步细分为单独的函数，以便代码重用或更好地组织代码。你可以在代码中自己使用它们，它们被放置在它们要说明的项目（比如一个函数）之前。]]></description><category></category></item><item><title><![CDATA[第三章：探索WebAssembly模块]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135852463</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135852463</guid><author>cppclub</author><pubDate>Fri, 26 Jan 2024 00:21:10 +0800</pubDate><description><![CDATA[在本章中，我们了解了WebAssembly在JavaScript引擎内部的执行方式，并探索了WebAssembly文本格式是什么以及如何使用WebAssembly文本格式定义WASM。在下一章中，我们将探索WebAssembly二进制工具包。]]></description><category></category></item><item><title><![CDATA[第 6 章：并发系统编程与C++]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135849964</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135849964</guid><author>cppclub</author><pubDate>Thu, 25 Jan 2024 17:31:29 +0800</pubDate><description><![CDATA[现代汽车已成为高度复杂的机器，不仅提供交通工具，还提供各种其他功能。这些功能包括信息娱乐系统，它允许用户播放音乐和视频，以及暖气和空调系统，用于调节乘客的温度。想象一下，如果这些功能不能同时工作的场景。在这种情况下，司机必须选择驾驶汽车、听音乐或保持舒适的气候之间进行选择。这不是我们对汽车的期望，对吧？我们期望所有这些功能同时可用，增强我们的驾驶体验，并提供舒适的旅程。为了实现这一点，这些功能必须并行运行。但它们真的是并行运行的，还是只是并发运行的？二者有什么区别？在计算机系统中，并发和并行。]]></description><category></category></item><item><title><![CDATA[第二章: 学习Emscripten]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135834459</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135834459</guid><author>cppclub</author><pubDate>Thu, 25 Jan 2024 01:07:35 +0800</pubDate><description><![CDATA[在本章中，我们学习了如何安装和使用 Emscripten 将 C/C++ 编译成 WebAssembly 模块。我们还探讨了 emsdk 工具和在生成 WebAssembly 模块时的各种优化级别。在下一章中，我们将探索 WebAssembly 模块。]]></description><category></category></item><item><title><![CDATA[第一章: 理解 LLVM]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135834219</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135834219</guid><author>cppclub</author><pubDate>Thu, 25 Jan 2024 00:10:31 +0800</pubDate><description><![CDATA[在本章中，我们了解了编译语言的工作原理以及 LLVM 如何帮助编译它们。我们使用 LLVM 编译了一个示例程序，以理解它的工作方式。在下一章中，我们将探讨 Emscripten，这是一个将 C/C++ 转换成 WebAssembly 模块的工具。Emscripten 使用 LLVM 后端进行编译。]]></description><category></category></item><item><title><![CDATA[Rust变量和类型]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135833098</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135833098</guid><author>cppclub</author><pubDate>Thu, 25 Jan 2024 00:06:16 +0800</pubDate><description><![CDATA[我们将探讨Rust程序的基本构建块，如变量和类型。我们将讨论基本类型的变量，它们是否需要声明类型，以及变量的作用域。不可变性，作为Rust安全策略的基石之一，也将被讨论和展示。我们的代码示例将围绕构建一个基于文本的游戏。]]></description><category></category></item><item><title><![CDATA[第 4 章：IR 代码生成的基础知识]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135831446</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135831446</guid><author>cppclub</author><pubDate>Wed, 24 Jan 2024 21:05:56 +0800</pubDate><description><![CDATA[我们使用// ...Decl *,// ...LLVN类表示SSA形式的值。Value类就像计算结果的标签。它通常通过IR指令创建一次，然后使用。在优化过程中可能发生各种变化。例如，如果优化器检测到%1和%2值始终相同，那么它可以用%1替换%2的使用。这改变了标签但不改变计算。为了意识到这样的变化，我们不能直接使用Value类。相反，我们需要一个值句柄。不同的值句柄具有不同的功能。为了跟踪替换，我们可以使用类。因此，Defs成员将AST的声明（变量或形式参数）映射到其当前值。]]></description><category></category></item><item><title><![CDATA[第 5 章：使用C++处理错误]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135801193</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135801193</guid><author>cppclub</author><pubDate>Wed, 24 Jan 2024 00:49:13 +0800</pubDate><description><![CDATA[每位软件开发者都应该尽可能地编写可移植的代码。编写可移植代码提供了可重用性，这可以显著降低开发成本。当然，这并不总是可能的。有些情况下，你编写的代码专用于特定系统。但对于所有其他情况，将代码从底层系统抽象出来，可以让你轻松地将其迁移到其他系统，而无需进行大规模重构来使其工作。这更安全，成本更低。让我们回到之前的示例，我们试图抽象从POSIX系统调用接收到的错误代码。它应该可以与可移植错误条件（如）进行比较。我们将用以下用例来扩展这一点。假设我们有一个也与文件打交道的自定义库，我们称之为。]]></description><category></category></item><item><title><![CDATA[第 4 章：深入了解 C++ 对象]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135778480</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135778480</guid><author>cppclub</author><pubDate>Tue, 23 Jan 2024 18:07:36 +0800</pubDate><description><![CDATA[在 C++ 中，声明和定义这两个术语通常用来指不同方面的变量、函数或类。声明在上述示例中，xfoo和Point都是声明的，但未定义。变量声明中的extern关键字表明x在程序的其他地方定义。在声明中，不会分配内存。定义：定义为已声明的名称提供实际实现。int x;在上述示例中，xfoo和Point都是定义的。因此，声明引入了一个名称并指定了其类型，而定义提供了实际的实现并为对象分配了内存。现在我们熟悉了术语，让我们深入了解 C++ 中对象的细节。]]></description><category></category></item><item><title><![CDATA[从 Rust 开始]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135761274</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135761274</guid><author>cppclub</author><pubDate>Tue, 23 Jan 2024 00:32:23 +0800</pubDate><description><![CDATA[Rust 是由 Mozilla Research 开发并得到庞大开源社区支持的编程语言。它的开发始于 2006 年，由语言设计师 Graydon Hoare 启动。Mozilla 从 2009 年开始赞助 Rust，并在 2010 年首次正式推出。此后的工作经历了多次迭代，最终在 2015 年初推出了第一个稳定的生产版本 1.0.0，该版本由 Rust 项目开发者团队开发，包括 Mozilla 的 Rust 团队和超过 1800 名贡献者的开源社区。]]></description><category></category></item><item><title><![CDATA[第 3 章：文件系统]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135760448</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135760448</guid><author>cppclub</author><pubDate>Mon, 22 Jan 2024 23:11:30 +0800</pubDate><description><![CDATA[在本章中，我们没有展示通过C++修改文件数据的任何示例。我们的目标主要是解释不同Linux文件系统实体。我们使用C++文件系统库丰富了这方面的知识 - 例如，提高系统编程意识。您了解了不同文件系统对象的角色及其特点。您还拥有C++工具来管理文件资源并提升您的抽象水平。还有一些实际示例，展示了如何通过匿名管道和命名管道在进程之间进行通信。它们在操作系统级别的实现也被讨论了，我们还简要探讨了Linux中的信号处理。在下一章中，我们将深入探讨C++语言，为其安全和安全的使用奠定基础，符合最新标准。]]></description><category></category></item><item><title><![CDATA[迭代器与范围]]></title><link>https://blog.youkuaiyun.com/cppclub/article/details/135759710</link><guid>https://blog.youkuaiyun.com/cppclub/article/details/135759710</guid><author>cppclub</author><pubDate>Mon, 22 Jan 2024 22:21:55 +0800</pubDate><description><![CDATA[现在我们理解了迭代器的基本概念，让我们将其应用于一些实际用途。我们已经看到，如果你有一对从 begin() 和 end() 返回的迭代器，你可以使用 for 循环遍历底层容器的所有元素。但更强大的是，你可以使用任何一对迭代器来遍历容器元素的任何子范围！it!= end;int main()// 加倍整个向量中的每个元素// 加倍向量前半部分的每个元素// 同样加倍向量前半部分的每个元素it!= end;]]></description><category></category></item></channel></rss>