计算机:一切都是数字
对计算机而言,一切都是数字。数字的最终支撑是晶体管。晶体管是一类尺寸特别小(几十纳米),密度特别大(指甲大小容纳几十亿以上),速度特别快(纳秒)的硬件开关。
针对这种二元开关,并不是非要使用二进制数字不可,但显而易见的是,使用二进制是最自然、直接、简洁的方案。
所以,计算机的根本是几十亿、上百亿颗运转不息的二元开关,这些开关的运转可以被周密无比的准确设计。
- 第一步:硬件实现,造出 CPU,拥有特定指令集,可以接收这些特定指令集的组合来完成各种工作。指令集直接对应二进制机器码,人类根据清晰的规则向 CPU 传达自己的想法
- 第二步:对指令集稍加整理,表示为可读性更好的以文本语言表示的汇编指令。汇编指令中的大部分都是和机器码一一对应,只是起了一个更容易记住的名字(最最简单的抽象)。另有少部分汇编指令与机器码是一对多关系,这里出现了另外一种抽象(对有意义的过程体单独命名)
- 第三步:基于汇编语言,针对特定问题,构造新的表示方式。这其中最杰出的代表是 C 语言:面向 Unix 操作系统诞生的语言。从此,编译语言诞生。
- 第四步:不再向下编译,而是利用汇编语言直接实现针对新表示方式的软件解释器。这里最重要的思想是,除了 CPU 这个硬件解释器之外,完全可以构造自己的软件解释器。从此,解释语言诞生。
这是计算机中一个比较底层的 mental model:编译与解释的交互式递归。
对于某一种特定的编程语言来说,具体实现是解释还是编译,不是二选一的关系。但对于大部分语言来讲,往往最终只剩下一种方式,要么二选一,要么是混合型产物。
不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。