解释语言与编译语言

一种编程语言能被计算机执行的前提是它在执行前被翻译成机器码. 根据这个翻译过程发生的时间不同, 可以将编程语句分为解释语言(Interpreter)与编译语言(Compiler). Interpreter还有口译的涵义. 在这里, 解释器就是口译者, 它将用户写的脚本语句口译成机器码给计算机"听".


我理解的的解释语言即脚本语言, 写完代码后可以直接运行而无需编译过程. 例如, Javascript, Python, Matlab, Shell. 而用编译语言写完代码后需要有编译操作, 然后才能执行. 不过, 这两个操作已经被很多IDE合并成一个(用户可见的)操作, 例如, 在Eclipse里面, 只需要$F_{11}$一下, Build与Run/Debug过程就可以自动无缝进行了.

Python 有点例外, 因为它在运行之前会产生一个pyc文件, 是一种介于Python代码与机器码的中间代码. 所以不能简单用是否会产生中间代码文件来判断一个语言是解释语言还是编译语言. 但是还是有一个简单直观的判断方法的: 可执行的代码文件一定是解释性的, 否则是编译性的. 可执行的含义限定为linux系统中文件权限控制码的最低位为1(例如001/1, 101/5, 111/7), 而不是IDE里可执行.

一般来说, 解释语言因为在执行时: (1)需要同时运行解释器, (2)边解释边运行, 在速度上有些慢. 而编译语言则将解释过程放在运行之前, 且运行时无其他overhead, 所以速度上有优势.

不过,听说python又是例外. 至于其原理, 暂时没有兴趣去了解.


# Reference Thinking in C++, 2nd, Chapter 2.
posted @ 2016-12-24 14:03  宁静是一种习惯  阅读(245)  评论(0编辑  收藏  举报