编译型语言是把程序的源代码全部转换为二进制直接可执行机器码,后者是计算机能够直接识别的指令(具有非间接性的最高机器执行效率,但并非你的程序的效率评估,写得差的程序效率同样不会高),属于终极代码,这种程序编译为.exe(以前有更直接的.com现在很少见了)后,就脱离了源代码,你直接把.exe文件拿到机器上就可以运行,所有.cpp和.obj、.lib等等,都是不需要的。这种程序会把你上面所说的那三句话原样刻印在.exe上,因为你的源代码指令本身就是那样重复了三次。
解释型语言是对着程序源代码一行一行执行的,每执行一行,都需要一个叫解释程序的软件对源代码即时编译,即使你源代码中使用的for()循环次数是1000次,每一次循环都需要解释软件反复编译再执行,时间很大部分消耗在解释指令上(但写得好的解释型程序有时比写得糟糕的编译型程序效率反高,现实中这种例子不罕见),而且这种程序的源代码相当于公开,较难保密(与此相对,编译型程序保密性能很好,所以你没有办法从.lib中看到标准库的源代码,不知道那些函数是如何实现的)。旧式BASIC(非)和JavaScript就是此类语言的典型例子。
现代的Java和.NET程序,是介于这两种之间的机制,属于“编译为伪代码”的方式,伪代码是专供运行库“看”的(人用某种反向工程手段也可以看到“源代码”,但可以用扰乱器令反向工程失效)。VS中的C++/CLR、C#、等,都是这种方式,这几种语言编译之后,在.exe级别上是完全一样的,没有区别,但VS保留的C/C++仍然是传统的方式(你们现在所学的主要是后者)。
[
本帖最后由 TonyDeng 于 2012-5-20 13:08 编辑 ]