Skip to content

Latest commit

 

History

History
83 lines (49 loc) · 6.79 KB

File metadata and controls

83 lines (49 loc) · 6.79 KB

v0.8.0 (2026-07-11)

这一版的跨度是从 v0.7.0 之后攒到现在的全部。中间打的 v0.7.1 / v0.7.2 两个 patch 没单独发 release,内容一起记到这里。主线是卷六性能优化从零写到全卷成型、卷九 Chrome 线拆到四个主题、卷八新开 AI 子域;站点侧做了一次色魂重做加若干阅读体验优化,工程上清了一批遗留脚本。

卷六:性能优化全面成型(#88 + #95)

卷六从 v0.7.0 时的薄弱状态写到这一版彻底成型,八章 38 篇正文,从「性能思维」一路写到「编译器与体积优化」。方法是每篇必须回答「怎么测」,不能空谈优化——false sharing 贴真实 cache miss 数据、异常零成本贴汇编、std::function 讲 SBO 是怎么把小 lambda 留在对象里的。

八章的结构:

  • ch00 性能思维 + ch01 Benchmark 方法论(#88):性能工程的思路与度量方法,先解决「怎么测」再谈优化。
  • ch02 CPU 微架构 + ch03 归因方法:从流水线/分支预测/缓存讲到 perf 如何把时间归因到具体瓶颈。
  • ch04 按瓶颈调优:按测出来的瓶颈分类下手,而不是盲目「优化」。
  • ch05 多核性能:false sharing、NUMA 扩展、锁与无锁的取舍。
  • ch06 C++ 抽象代价:虚函数与 devirtualization、异常零成本、std::function 的 SBO、抽象代价速查表、RVO 与 move。
  • ch07 编译器与体积:优化级别与阻断项、LTO 与 PGO、链接与编译器、体积优化。

#95 除了新增 ch02–ch07 的正文(147 files / +11806 / -4271),还把全卷 38 篇做了一遍去 AI 味重写,英文全套跟齐(47/47 篇双语对齐)。性能卷的卷首页和卷八嵌入式索引同步更新。

卷九:Chrome 组件拆解三连(#98)

接在 #93 之后,把卷九「开源项目阅读」的 Chrome 线补到四个主题(01 OnceCallback → 04 NoDestructor)。新增 02 / 03 / 04,顺带把 01 OnceCallback 的中英文重写了一遍。

每个主题走 pre(打地基)→ full(拆实现)→ hands_on(自己写一遍)的结构,配可编译的 sample 工程。

02 WeakPtr(正文 16 篇)

拆的是 Chromium 的 base::WeakPtr。注意这套跟标准库 std::weak_ptr 不是一回事:std 的版本是控制块外挂,Chromium 这套要被指对象继承 SupportsWeakPtr,控制块挂在对象内部,所以能配合 SequenceChecker 做线程亲和性检查,也能让 WeakPtrFactory 集中作废弱引用,对象析构时一次性失效所有指向它的 WeakPtr,典型做法是把 factory 放成最后一个成员。

  • pre 七篇打地基:弱引用与生命周期、侵入式引用计数与 ScopedRefPtr、原子操作与内存序、SequenceCheckerDCHECK、concepts / requires 约束、模板 friend 与 uintptr_t 技巧、Trivial ABI。
  • full 六篇拆主线:动机与 API、控制块骨架、WeakPtrFactory 与 last member 惯用法、序列亲和性与懒绑定、Bind 集成、测试与性能。
  • hands_on 三篇自己写:设计、实现、测试。

03 FlatMap(正文 15 篇)

C++23 给标准库进了 std::flat_map(连续存储 + 排序,缓存友好),Chromium 这版是自己撸的,所以能看见从零怎么搭:FlatTree 骨架、查找插入的实现、用 sorted_unique tag dispatch 避开重复排序、底层搬动时迭代器怎么失效、bulk build 一次构造完。

  • pre 六篇:有序关联容器、vector 内部与扩容、复杂度与摊还分析、比较器与透明查找、tag dispatch 与 sorted_unique、EBO 与 pair 存储。
  • full 六篇:FlatTree 骨架、查找与插入、sorted_unique 构造、迭代器失效与 bulk build、测试与性能。

04 NoDestructor(正文 8 篇)

NoDestructor<T> 是那个乍看离谱、其实有道理的东西:把析构禁掉,对象一直活到进程结束。动机是绕开全局静态对象退出时的析构顺序坑(顺序未定义,跨翻译单元更是没法控),代价是 LSan 会报泄漏,得诚实交代清楚「这不是真泄漏」。

  • pre 两篇:静态存储与初始化、placement new 与 aligned storage。
  • full 四篇:动机与 API、核心实现、何时该用、LSan 与泄漏。
  • hands_on 两篇:设计与实现、使用与测试。

配套代码都在 code/volumn_codes/vol9/full_tutorial_codes/chrome_design/,本轮新增 12–25 号 sample(weak_ptr.hpp / flat_map.hpp / no_destructor.hpp 几个头文件,加若干驱动 cpp)。

卷八:TinyInferCpp-Lab 起步(#97)

新开 AI 子域(documents/vol8-domains/ai/)。第一个主题是个玩具级 TinyML 推理器,笔者图一乐,但路径认真:从「Tensor 是什么」一步步手搓,不调框架。

Stage 0 是工程脚手架,Stage 1 讲固定维度 Tensor,六篇正文:什么是 Tensor、Tensor 在神经网络里扮演什么角色、为什么不用内置数组、行主序内存布局、把 shape 编进类型、固定维度 Tensor 的实现。

配套工程在 code/vol8-labs/,Stage 1 的 tensor_api 六个 case 全绿。后续 stage 会接着往上搭算子和推理。

卷八的 networking 子域也补了一个起步索引(#84),作为后续网络线的占位入口。

社区来稿(#83)

社区来稿区(documents/community/incoming/)新增一篇包管理相关文章。

站点优化

这一版站点层动静不小,做了一次视觉主线重做加几个具体体验修复。

  • 色魂重做 + 组件精致化 + IDE 重构(#90):之前站点缺一个稳定的品牌主色,这一版把钢蓝定为品牌色落地,custom.css 重写 +481 行,首页 Roadmap 等组件配色统一;在线编译演示 OnlineCompilerDemo 重构成弹出式 IDE 形态。
  • 可拖拽侧边栏(#85):新增 ResizableSidebar 组件,读者可以拖拽调节侧边栏宽度,宽度记忆到本地。
  • mermaid 本地预览(#92):本地 dev 起站也能正常渲染 mermaid 图,不用非得部署后才看见。
  • mermaid 路由跳转不渲染修复(#93):SPA 跳转后 mermaid 图不显示的那个坑修了。根因是 onAfterRouteChange 被多个组件直接赋值、互相覆盖,改走统一的 subscribeAfterRouteChange 订阅器,以后路由切换逻辑都从这一个口子走。

工程改进

  • 遗留脚本清理(#94):清掉 cppref_card_generator.pycppref_manifest.jsonfix_frontmatter.py 等一批不再用的旧脚本,净删 2400 多行。
  • issue #86 修复(#87):修复 issue #86 指出的问题,顺带补上文章「最近更新」时间缺失的情况。

翻译

这一版英文对齐跟着内容主线走:卷六性能卷 38 篇全卷 EN(47/47 双语对齐)、卷九 Chrome 02 / 03 / 04 三主题、卷八 AI 子域全部中英上线,01 OnceCallback 的英文也随重写同步。

点这里直接访问站点