主要观点:介绍了关于代码优化的两个经验法则,即“向上推 if
条件,向下推 for
循环”。
关键信息:
- 对于函数中的
if
条件,可考虑移到调用者处,如将函数中的预条件检查移到调用者,可减少检查次数,避免if
带来的控制流复杂和错误,且便于发现冗余和死条件。 - 从数据导向的角度,应将操作对象的“批处理”作为基本情况,将标量版本作为批处理的特殊情况,如
frobnicate_batch
优于逐个处理对象的循环,这样能提高性能,可分摊启动成本,灵活处理对象顺序,甚至可进行向量化操作,如 FFT 基多项式乘法。 - “向上推
if
条件,向下推for
循环”这两个建议可相互配合,如在不同条件下对一批对象进行不同操作,避免重复评估条件,移除热循环中的分支,可能实现向量化,这一模式在 TigerBeetle 的架构中也有应用,除了性能提升,有时还能提高表达性,如jQuery
对元素集合的操作。
重要细节: - 给出了具体代码示例,如函数
frobnicate
中对Option<Walrus>
的处理,以及不同的if
和for
结构的代码对比等。 - 提到了相关的“溶解枚举”重构模式,通过将重复的条件提取出来,简化代码结构。
- 引用了相关资料,如 [http://venge.net/graydon/talk...] 和 [https://en.wikipedia.org/wiki...] 。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。