代码揭秘:编译和解释

计算机并不能直接地接受和执行高级语言编写的代码,要使机器能够明白用高级语言所写的代码,有两种可行的方法: 一是对程序进行编译;二是对程序进行解释; 所以,高级语言也分为两种,即编译类语言和解释类语言。要理解编译和解释,我们先要了解一下翻译的概念。所谓翻译就是指在机算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻译或加工的对象,当计算机执行翻译程序时,就将它翻译为与之等价的另一种语言(目标语言)的程序(目标程序)。执行这种翻译的程序就是编译程序(或编译器)。编译是指事先编好一个称为编译程序的机器语言程序并作为系统软件存放在计算机内,当用户把由高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后计算机再执行该目标程序,以完成源程序要处理的运算并取得结果。

解释的执行方式类似于日常生活中的“同声传译”,也就是说,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此解释型的程序并不会产生目档程序。

但是我们现在常见的是动态语言和静态语言,那么这和编译和解释有关系么? http://haohetao.javaeye.com/blog/589070中提到,

动态类型语言:在运行期间检查数据的类型的语言。用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。

http://fish2007.javaeye.com/blog/250193中提到

总的来说,生成目标代码的是编译性的语言,没有生成目标代码的是解释性的语言 (目标代码包括中间代码)。

可以简单地理解为直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的编码再执行的语言称为静态语言。

当前静态语言有:Java、C/C++、C#、DELPHI、VB等。

动态语言有:ASP、PHP、Perl、Python,Smalltalk、 Ruby等。