文章
这里收录了我发布的全部文章。
-
C++ 工程化(二):命名规范没有统一标准但有底线规则
C++ 没有统一的命名规范,主流风格(STL/Google/LLVM/Qt/Unreal)各自为政——这是 C++ 40 年多时代叠加的历史遗留问题。但"没有统一标准"不等于"怎么写都行":C++ 标准对保留标识符有硬性规定,违反就是 UB;宏必须全大写也是跨风格的唯一共识。实操铁律是:进入已有 codebase 严格 follow,新建项目选一个成熟 style guide 一以贯之,并用 clang-format 强制执行——风格选择的质量远不如风格一致性的质量重要。
-
Go RPC:gRPC、HTTP/2 与 proto 契约
gRPC 用 .proto 文件定义服务契约,代码生成器产出强类型的 server 接口和 client stub,通过 HTTP/2 实现单连接多路复用、头部压缩和四种通信模式(unary/server-stream/client-stream/bidi-stream)。核心价值不是"比 REST 快",而是契约即代码、跨语言一致、streaming 原生支持。
-
C++ 工程化(一):Modern CMake 的核心是 target-based 与传递性语义
CMake 不是构建系统而是构建系统生成器(读 CMakeLists.txt → 生成 Makefile / Ninja / VS 工程 / Xcode 工程)。Old-Style CMake 靠 includedirectories、adddefinitions 这种全局命令驱动,无作用域、无传递性、无法组合;Modern CMake(3.15+ 是真正的基线)把一切挂在 target 上,用 PUBLIC/PRIVATE/INTERFACE 显式表达"这个使用需求是只给我自己用,还是要传递给 consumer"。掌握这三个关键字 + generator expressions($<...>)+ CMakePresets.json + FetchContent,就写得出 2026 年的 idiomatic CMake。
-
Go 工具链:Protobuf 的字段编号、Varint 与二进制序列化
Protobuf 用字段编号(而非字段名)标识数据、用 Varint 压缩整数、省略零值字段,实现了比 JSON 小 2-5 倍、快 5-10 倍的序列化性能,同时通过字段编号机制天然支持 schema 前向/后向兼容演化。