编译器应该优化这个吗? - Premature Abstraction - 英语原声/中配

合集 · Premature Abstraction (4)

  1. 33:39
    编译器如何处理无限变量 - Premature Abstraction - 中配
  2. 16:32
    谁调用 main(),又是谁拿到它的返回值? - Premature Abstraction - 中配
  3. 17:13
    什么是过早抽象? - Premature Abstraction - 英语原声/中配
  4. 30:57
    编译器应该优化这个吗? - Premature Abstraction - 英语原声/中配

Parts

  1. P1 · 配音
  2. P2 · 原声
Description
P1中文配音 / P2英语原声
----------------------------------------------------------------
这是编译器系列第五期,讲生成机器码前如何清理和优化 AST:语法糖先脱糖到核心语言,再按 as-if 规则做常量折叠/传播、复制传播、死代码、内联、去虚化、尾调用优化,并配合 comptime、constexpr、宏等编译期能力。也提醒副作用、内存模型、竞态、volatile、浮点重结合与 NaN 等陷阱,以及未定义行为可能触发破坏性变换。最后谈不动点迭代、阶段排序和 O0–O3/Os/Oz/Og,并预告下一期引入 IR。
----------------------------------------------------------------
00:00:00 概述
00:01:10 清理转换
00:02:23 去语法糖
00:03:41 “As-If”规则
00:04:41 广告: Boot.dev
00:04:41 常量转换
00:07:18 控制流优化
00:08:29 函数调用优化
00:11:26 编译期
00:12:40 进一步说明
00:14:35 总结
----------------------------------------------------------------
原标题:Should a compiler optimize this?
原作者:Premature Abstraction
发布日期:2026-06-09
视频链接:https://www.youtube.com/watch?v=8LXOYCriwWw

Comments

光州の각하 3h ago

C++还有一点就是如果整数溢出会触发硬件中断,那么复杂的常量表达式就不会被被编译器重写,否则可以被重写

♥ 2 ↩ 2

true_atomic 6h ago

函数过程和返回值同样重要

♥ 3

旁白_B 7h ago

我一开始对这个视频挺怀疑的,因为答案对我来说好像很明显。只有当 foo() 没有副作用时才优化。视频很棒

♥ 2

旁白_B 7h ago

但我可以让它更蠢

旁白_B 7h ago

如果你的语言是纯函数式的,或者至少把纯函数和有副作用的表达式区分开,编译器就能更大胆地优化,因为它知道哪些表达式是纯的

Break-eta 8h ago

[吃瓜]