文章
这里收录了我发布的全部文章。
-
现代 C++(一):C++11/14 为什么是现代 C++ 的起点
C++11/14 的核心升级不是加了几个语法糖,而是把值语义 + RAII + 移动 + lambda 组合成新范式:资源用智能指针自动管理、返回大对象用移动不用拷贝、行为用 lambda 就地编写——日常 C++ 的认知负载一次性大幅下降,Bjarne 本人说"像一门新语言"不是营销话术。
-
Go 基础:错误处理与 Errors Are Values
Go 将错误视为普通值(error 是一个只含 Error() string 方法的 interface),通过多返回值强制调用者显式处理,而非像 Java/Python 那样用异常机制隐式传播。Go 1.13 引入 error wrapping(%w、errors.Is、errors.As),Go 1.20 引入 errors.Join 支持多错误合并。这套机制的核心优势是:控制流可见、错误可编程、无隐式传播。代价是 if err != nil 样板代码多,但 Go 团队已于 2025 年 6 月正式宣布不再追求语法层面的错误处理变更。
-
Go 运行时(三):netpoller 如何用 epoll 与 gopark 跑异步 I/O
Go 运行时在创建网络 socket 时将其设为非阻塞,当 Read/Write 返回 EAGAIN 时,通过 gopark 挂起 goroutine(不占 OS 线程),将 fd 注册到 epoll/kqueue(边缘触发),就绪后通过调度器的 findRunnable 或 sysmon 唤醒 goroutine 重试——用户写的是同步代码,运行时跑的是异步 I/O。
-
Go 运行时(二):并发三色标记清除收集器
Go 使用并发、非移动、三色标记清除垃圾收集器。设计哲学是用内存换低延迟(STW < 1ms),只暴露两个调参旋钮(GOGC + GOMEMLIMIT)。Go 1.26 起默认启用 Green Tea GC,marking 阶段性能提升 10-40%。