本章总结
本节阅读量:第三章在整数、加法、变量和 let 之外,加入了:
|
|
本章没有另加布尔值,而是直接使用整数条件:
|
|
eq? 的结果固定为 0 或 1。
解释器里的核心变化是选择:
|
|
编译器里的核心变化是控制流:
|
|
label 标出基本块入口,branch 和 jump 建立显式的控制流边;块末尾没有跳转时,也可以顺序 fallthrough 到下一个块。then 与 else 把结果写进同一个内部名字,两条路径再在 end label 汇合。
把解释器和编译器放在一起比较:
| 问题 | 解释器 | 编译器与目标程序 |
|---|---|---|
| condition | 立即求出一个整数 | 生成计算 condition 的指令 |
| 选择分支 | C++ if 只调用一个分支 |
两边都生成;运行时跳转只执行一边 |
if 的结果 |
直接返回被选中分支的值 | 两边写同一内部名字,在 end 读取 |
| 控制流 | 隐含在 C++ 语句中 | 显式表示为 branch、label 和 jump |
前两章的分界线仍然成立:
|
|
下一章会加入函数和调用。到那时,控制流不只会跳到同一函数里的 label,还会进入另一段函数代码并返回。
本节目录