怎么工作 编译器和解释器 有什么区别
我们用「add」「if」「名字」这样的人话来写代码。 可机器在里头,只懂得开·关那种 极小极小的指令。 人话和机器话之间,有一道大缝。 往那道缝上架桥的,就是编译器和解释器。
人话和机器话不一样
我们写的「add」「if」,是人读着顺口的话。
可机器真正懂的,
只是开·关排起来的极小指令。
我们的字,和机器干的活之间,有一道大缝。
所以我们的字,原样是跑不了的。
上面是我们写的一行,下面是机器懂的小指令。点点中间那道缝。
上下差得太多了。
人话一眼就读懂,机器话却认不出来。
这道缝,得有谁替我们跨过去。
做这活儿,有两种办法。
架桥的两种办法
要跨过缝,得有个替你翻译的。
办法有两种。
一种是,把整段文字事先全翻好。
另一种是,一行一行就地读着马上执行。
前者是编译器,后者是解释器。
点点两条路。「先全翻」和「一行一行就地」,样子不一样。
跨的是同一道缝,方式却很不一样。
一个事先,一个就地。
先来细看「事先整个翻译」那一边好吗?
这就是编译器的干活方式。
编译:整个事先翻好
编译器把我们的文字从头到尾全读一遍,
一次性变成机器能直接用的成品。
翻译事先就一次。那个成品可以反复地快快跑。
哪儿出了岔,它常常在跑之前就先告诉你。
就像把一整本书事先翻好,再递给读者。
点「编译」,整段文字变成成品;「运行」把它一次性快快跑完。
事先把整个翻好,运行就利落又快。
代价是,开头得等翻译翻完。
那么反过来,有没有不等、马上就开始的办法呢?
那就是解释器。
解释:一行一行就地来
解释器不另外做成品。
它把我们的文字从上往下读一行,马上就干那件事,
再读下一行又干,就这样就地进行下去。
所以不用等就能马上开始,还能轻轻松松试一试。
像在你说话旁边,一句一句替你翻译的口译员。
点「运行」:读一行就干,再到下一行。就地一行行往下走。
马上开始、一行行地走,用着很顺手。
代价是,每次跑都从头一行行重读一遍。
编译是事先·快,解释是就地·简便。
那么哪一种更好呢?
与其说谁更好,不如说是取舍
并不是哪一个一味地好;它们彼此取舍。
编译启动慢但运行快,还能事先报错。
解释马上开始、好试,但每次都一行行重读。
所以实际上,常常把两者妥当地搭配着用。
看你更看重什么,就选哪个。
点点各项。启动、运行快慢、报错时机、成品,在两者间怎么分,一看便知。
现在我们看到了,文字是怎么变成机器之事的。
可在那样运转的时候,
我们做出的值和对象,到底装在哪儿呢?
「这个指向那个」,又是什么意思呢?
下一课,也是最后一课,我们去看看那个地方。