编译型语言
编译型语言是指使用专门的编译器,针对特定平台将源代码,一次性编译成可被该平台硬件执行的机器语言,并链接生成可执行程序。生成的可执行程序可脱离开发环境,在特定的平台上独立运行。
由于是一次性编译成机器语言,所以每次运行程序无需再次编译,通常运行效率较高。但因为编译时依赖特定平台,通常无法移植。如果需要移植,需要将源代码置于待移植平台上重新进行编译。
现有的 C 、C++、Objective-C、Pascal 等高级语言都属于编译型语言。
解释型语言
解释型语言是指使用专门的解释器,将源程序逐行解释成特定平台的机器代码并立即执行的语言。解释型语言通常不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。可以这样认为,每次执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。
解释型语言移植方便,只需提供特定平台的解释器即可,每个特定平台上的解释器都负责将源程序解释成特定平台的机器指令。也就是说,解释型语言可以实现源程序级的移植。例如python
总结:编译是对高级语言程序进行一次性翻译,这样的好处是,一旦源程序被彻底翻译,它就可以重复运行,且今后都不再需要编译器和源代码,运行效率较高,但不跨平台;解释型语言则每次运行,都需要借助源程序和解释器,其最大的好处就是,程序有很好的可移植性,跨平台,运行效率相对较低。
静态语言(强类型语言)
静态语言是在编译时变量的数据类型即可确定,多数静态类型语言要求在使用变量之前必须声明数据类型。 例如:C++、Java、Delphi、C#等。
动态语言(弱类型语言)
动态语言是在运行时确定数据类型。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。 例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等。
强类型定义语言
强制数据类型定义的语言。一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。
弱类型定义语言
数据类型可以被忽略的语言。一个变量可以赋不同数据类型的值。强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误