Andreas Hohmann

RSS: https://andreashohmann.com/atom.xml
关于技术类话题的随想。

使用 epoll、io_uring 和 C++ 协程进行异步 IO

Andreas Hohmann 通过实现 HTTP 客户端,对比 epoll、io_uring 和 C++20 协程在异步 IO 中的表现。文章深入解析了 C++ 协程 API 的设计动机,展示了如何结合 io_uring 事件循环与协程构建高性能网络服务。内容涵盖手动状态机实现、协程 awaiter 编写及底层系统调用细节。
评论点赞收藏21 天前

Zig 编译期反射实战:Struct of Arrays(结构体数组)高性能数据布局

本文深度拆解 Zig 标准库中的 MultiArrayList 实现,演示如何利用 Zig 的 comptime(编译期执行)和 @typeInfo/@Type 反射 API,自动为任意结构体生成 Struct of Arrays(SoA)数据布局。相比传统的 Array of Structs(AoS),SoA 在内存对齐和缓存友好性上更优,示例中 100 个 Token 结构体从 2400 字节压缩至 1700 字节。作者从 Zig 的类型即编译期值这一核心概念入手,逐步构建泛型容器、动态生成结构体字段,再深入分析 MultiArrayList 内部如何按对齐度降序排列字段、用单一字节数组拼接所有字段存储、以及计算偏移和容量的细节。最后讨论了当前反射 API 的局限(暂不支持动态生成方法),但强调 comptime 函数相比 Rust 过程宏的学习成本更低。全文代码示例扎实,适合有一定 Zig 或系统编程基础、对数据导向设计感兴趣的读者。
评论点赞收藏73 天前

Guile 异常处理机制

编程中异常处理往往被低估,但它实际上占据了生产系统的大部分代码量。本文从这一现实出发,指出错误消息质量直接决定系统用户体验与采纳速度,以 Rust 编译器优秀错误提示为例佐证。作者结合 GNU Guile(Scheme 方言)的异常机制,探讨如何在语言层面设计更友好的错误处理方式。适合对编程语言设计、Lisp 生态或错误处理实践感兴趣的读者。
评论点赞收藏281 天前

C++ 中的位域

系统编程(网络协议、设备驱动)常涉及位域操作。本文以 C 语言风格的结构体为例,演示如何用: 语法精确定义位域宽度(如 u16 a:3; u16 b:9; u16 c:2),让程序员按比特位精细控制内存布局。简洁实用的语法备忘,适合需要底层数据结构的 C/C++ 开发者参考。
评论点赞收藏537 天前

C++,让一让?—— 一本 move 语义专著的真实阅读体验

一本 250 页只讲 C++ move 语义的书,读起来居然津津有味?作者以亲身阅读体验力荐 Nicolai Josuttis 的《C++ Move Semantics》,称其细节扎实、图解清晰,把 move 语义的复杂之处讲得透彻易懂,并分享了核心收获:被移动后的对象处于"有效但未指定状态"。这不是营销软文或 AI 拼贴,而是真实程序员读完技术书后的有感而发,有具体的判断依据和个人视角。对于关注现代 C++ 特性的开发者,提供了一份可信的选书参考和一个可讨论的技术知识点。
评论点赞收藏746 天前

Rust 实现 Maglev 一致性哈希算法

一篇个人技术博客,作者基于 Google 2016 年 Maglev 论文中描述的网络负载均衡器一致性哈希算法,用 Rust 完成了实现并撰写了解读文章。内容从算法原理(查表跳转而非传统哈希环)开始讲起,再进入 Rust 代码实现细节,包含对论文关键设计的复述和作者自己的编码实践。对同时关注分布式系统、负载均衡和 Rust 语言的开发者来说,这篇文章提供了从论文到代码的完整路线,比直接读论文更易上手,也比只看文档更深入。没有营销包装,没有废话,是一手编码经验的真实输出。
评论点赞收藏755 天前

如何选择 C++ 代码风格

一位从 JVM/JavaScript 重回 C++ 的开发者,记录自己在个人项目和团队环境中如何选择代码风格的思考。在组织中,他直接接受已有规范来节省精力;但在自己的玩具项目里,面对 concepts、coroutines 等现代 C++ 特性,风格选择反而成了值得琢磨的事。文章没有给出标准答案,而是呈现了一种真实的工作流习惯——区分「组织内的效率妥协」和「个人项目上的主动探索」,对正在纠结代码风格或刚接触现代 C++ 的开发者有共鸣和参考价值。
评论点赞收藏858 天前

CMake:一门编程语言

作者以亲身经历回顾了不同编程语言生态的构建工具演化史:Java 有 Maven、Scala 有 sbt、Clojure 有 Leiningen、Rust 有 Cargo、Zig 有自己的构建系统,而 C++ 历经二十年始终没有形成公认的标准化构建与包管理方案。CMake 在填补空白的过程中逐渐膨胀,变得极其复杂,已经不再只是一个构建工具,而是一套独立的领域语言。文章从"CMake 本身就是一门编程语言"的 provocative 角度切入,适合在 C++ 社区引发讨论和共鸣。
评论点赞收藏868 天前

基础设施即数据

作者挑战了"基础设施即代码"的流行说法,认为我们真正追求的其实是将基础设施视为数据来处理。他指出,版本控制、持续集成、自动化测试等"代码化"带来的好处,本质上源于对数据的结构化管理和操作,而非代码本身。这个视角转换让我们重新思考基础设施管理的核心:不是把基础设施写成代码,而是将基础设施状态作为可版本化、可测试、可审计的数据来对待。文章提供了一个有价值的认知框架调整,适合对 DevOps、基础设施工程感兴趣的技术读者。
评论点赞收藏869 天前

Envoy 事件分发器

本文深入解析Envoy高性能事件分发器的实现原理。Envoy在少量工作线程上通过事件循环执行异步IO,其事件分发器基于libevent库,该库为不同平台的异步IO API(如Linux的epoll、FreeBSD/Mac的kqueue)提供统一抽象层,类似于Node.js使用的libuv。文章还介绍了libevent提供的buffer API及HTTP库功能,帮助读者理解Envoy底层事件驱动架构的设计思路。适合对服务端网络编程和高性能代理实现感兴趣的技术读者。
评论点赞收藏877 天前

使用 Scala 的 using/given 机制传递上下文对象

每个系统都逃不开"上下文对象"——用户认证信息、当前事务等数据需要在各层之间传递,一不小心就膨胀成难以维护的大杂烩。本文作者从亲身踩坑出发,深入讲解如何利用 Scala 3 的 using/given 特性来优雅地传播上下文,同时对比了传统传参和 ThreadLocal 方案的痛点。文章有具体代码示例和设计思路,不是泛泛的"最佳实践"说教,而是带着真实工程权衡的技术分享。适合 Scala 开发者阅读,能直接指导代码重构实践。
评论点赞收藏882 天前

Envoy 工厂注册机制:C++ 如何支撑动态配置与扩展

一篇深入 Envoy 代理 C++ 内部实现的技术博客。作者以"Envoy 如何在 C++ 中实现热加载配置、按需扩展组件"这一核心问题为线索,拆解工厂注册模式(Factory Registry)的设计思路与实现细节,涵盖组件注册、配置解析、实例化等关键环节。文章来自一线工程师的个人技术博客,有明确的技术立场和一手实现分析,不是泛泛介绍。适合对 Envoy 架构、C++ 设计模式或服务网格基础设施感兴趣的技术读者,提供可复用的架构参考。
评论点赞收藏898 天前

奥斯特豪特《软件设计哲学》书评

一本打破软件设计书套路的真诚书评。作者坦言对这类书期望值很低——要么绑死在一个具体项目上,要么因堆砌各种权衡条件而沦为空洞说教。但奥斯特豪特的《软件设计哲学》第二版让他越读越兴奋:不回避真实项目中的取舍,提出了"深度模块"等可操作原则,直接回应大型软件工程中的核心困境。少有的既有框架感、又有实操指向的软件设计读物,适合被各种"万能建议"疲劳轰炸过的开发者。
评论点赞收藏901 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。