#关于编译原理#2.计算机的底层世界(1)

1.终极问题

第一个问题:“您考虑过如何实现1+1=2吗?”,100%的程序猿会立刻给出答案:

int a=1;

int b=2;

int c=a+b;

第二个问题:“a=1如何实现呢?c=a+b如何实现呢?”,估计只有50%的程序猿会心虚的回答:

大概是编译原理吧,词法分析、语法分析等等,但我不太记得细节了。

第三个问题:“如何让计算机继续执行编译原理的输出结果呢?计算机如何表达a=1?a+b?”,能够清晰回答的程序猿应该不会超过5%吧。

图1

2.了解计算机底层世界规则的重要性

Have you ever had a dream,Neo,that you were so sure was real? What if you were unable to wake from that dream? How would you know the difference between the dream world and the real world?

图1

每次重温黑客帝国中,墨菲斯对Neo的终极问题,都会情不自禁的神游一番。

很多程序猿如同黑客帝国中培育在营养液中的人类,周而复始的写着if/else,活在看似温和的幻境中,却从未思考过“if/else、a=1”这些基本符号是否真是上帝遗失人间的宝物。

这些“上帝遗失人间的宝物”就是计算机底层世界的规则与真理,这些宝物或许不会立刻给一家商业公司带来可观的物质回报,但,这不正是中兴与华为、联想与华为面对美国截然不同表现的根本原因吗?

3.符号/映射/运算

接下来,为各位读者提供进入计算机底层世界的三把钥匙。

(1)第一把钥匙:符号

符号是信息的表达形式。

人类心中的所思所想是“信息”本身,语言本质是一组“符号”。同样,计算机的世界有两个符号:0和1。0和1不是“信息”,例如:“1个苹果、2个桃子”,而是“符号”。

谈到符号,又必须谈到符号的表达。例如:表达“1”,中文的符号是“一”,英文的符号是“One”,阿拉伯数字的符号是“1”。计算机中如何表达符号呢?当电路处于“通,高电压”时就是符号“1”,当电路处于“断,低电压”时就是符号“0”。

谈到“高电压/低电压”,又涉及到一个细节的概念,叫做高阻态。因为“高”和“低”是模糊的表达,当电路彻底断开,电阻近似∞,也不能说就是“0”。高阻态的概念会产生一种新的电路元件,后续文章中再展开。

图2

(2)第二把钥匙:运算

运算是处理信息的手段。

在这里必须向这位老前辈乔治·布尔献上我们的膝盖,从初中的“XX密卷”开始,这位老前辈就已经在潜移默化的蹂躏着我们——布尔代数。

图3

或:+,0+0=0、1+0=1、0+1=1、1+1=1

与:·,0·0=0、1·0=0、0·1=0、1·1=1

非:',0'=1、1'=0

异或:⊕,0⊕0=0、1⊕0=1、0⊕1=1、1⊕1=0

同或:⊙,0⊙0=1、1⊙0=0、0⊙⊕1=0、1⊙1=1

布尔老先生定义了“与”、“或”、“非”、“与非”、“或非”、“异或”、“同或”等概念,然后就是下面这些运算律了(摘自百度百科):

1.结合律:(a+b)+c=a+(b+c) , (a·b)·c=a·(b·c).

2.交换律:a+b=b+a, a·b=b·a.

3.分配律:a·(b+c)=(a·b)+(a·c), (a+b)·c=(a·c)+(b·c)

4.吸收律:a+a·b=a, a·(a+b)=a.

5.幂等律:a+a=a, a·a=a.

6.德·摩根律(反演律):(a+b)′=a′·b′, (a·b)′=a′+b′.

德·摩根律是德·摩根(De Morgan,A.)发现的利用归纳法可得德·摩根律的一般形式:(a1+a2+…+an)′=a1′·a2′·…·an′, (a1·a2·…·an)′=a1′+a2′+…+an′。

德·摩根律提供了由乘转换成加,由加转换成乘的方法 [。

7.对合律(双重否定律):(a′)′=a.

8.互补律:a+a′=1, a·a′=0.

9.零一律(幺元律):a+0=a, a·1=a.

10.囿元律(极元律):a+1=1, a·

到这里,笔者并不是想突出布尔代数本身的细节,而是试图让读者宏观的理解:布尔代数本质上提供了一种适合电子电路实现运算的方法论。让我们稍微细化的体会一下一代一代的科学家/工程师总结出来的优美的电子电路模块:

与门:实现与运算(本文旨在串联相关知识体系,因此不赘述各类门电路细节)

图4

或门

图5

非门

图6

与非门、或非门

图7

异或门、同或门

图8

PS:上述图片纯手工绘制,比较原(粗)生(糙)态,有空得请美工小姐姐帮忙重新画个好看的

(3)第三把钥匙:映射

映射是符号与符号、符号与信息的双向映射。

举个例子:在复仇者联盟与灭霸的终极战斗中,奇异博士看见了若干条未来的时间线。其中有一条路可以打败灭霸——这就是“信息”,于是奇异博士举起了1根手指隐晦的传递着这条信息,这根手指就是“符号”。可是,这根手指到底表示了什么信息呢?一群超级英雄都不清楚,因为“信息”与“符号”的对应关系只有奇异博士明白。这就是“映射”

理解了映射,从这个例子里面还可以看到“映射”的一个辩证关系:符号设计的越复杂,解码越难。你看,想弄清楚奇异博士的一根指头与打败灭霸的映射关系让钢铁侠花了一集的时间。。。

图9

4.别急

笔者曾经也很迷恋“速成”,或许“速成”正是工程领域的功利性本质——最高效率、最低成本的为我所用。但,基础科学更多的需要抛弃“功利心”,冷静、严谨的仔细观察底层世界运行的本质。

未来笔者可能会用2~3篇的篇幅向读者诠释计算机底层世界的各种关键环节,希望与同路人共勉。

你可能感兴趣的:(#关于编译原理#2.计算机的底层世界(1))