编译型和解释型
编译型:编译器一次把所有的代码编译成机器语言,然后写成可执行文件;
解释型:程序运行中,由解释器不断地把源码解释,执行,并不断地解释,执行;
优缺点:
编译型执行速度较快(C/C++、VB)更适合开发操作系统、大型应用程序、数据库系统等;
解释型对不同系统平台间的兼容性较高(Java、javascript、Python)更适合做一些网页脚本、服务器脚本及辅助开发接口。
既然编译型与解释型各有优缺点又相互对立,所以一批新兴的语言都有把两者折中起来的趋势。例如Java语言虽然比较接近解释型语言的特征,但在执行之前已经预先进行了一次预编译,生成的代码是介于机器码和Java源代码之间的中介代码,运行的时候有JVM解释执行。它既保留了源码的高抽象、可移植的特点,又已经完成了对源码的大部分预编译工作,所以执行起来比“纯解释型”程序 要快许多,C#也类似。随着设计技术与硬件的不断发展,编译型与解释型两种方式的界限正在不断变得模糊。
动态语言和静态语言
动态语言:指在运行期间才去做数据类型检查的语言(所以永远不用给任何变量指定数据类型,Python、Ruby)
静态语言:数据类型是在编译期间检查的(所以写程序时要声明所有变量的数据类型,C/C++、C#、Java)
强类型语言和弱类型语言
强类型语言:强制数据类型定义的语言(一个变量一旦被指定了某个数据类型,如果不经过强制转换,那么它永远就是这个数据类型),强类型定义语言是类型安全的语言;
弱类型语言:数据类型可以被忽略的语言,一个变量可以赋不同数据类型的值,速度略快于强类型语言。
个人理解:弱类型语言应该都有“===”符号(像php,JavaScript),而且它们允许字符串跟数字相加,可见它们定义的变量的数据类型不固定。