参考:《Python带我起飞》
语言分类
1. 运行角度
- 编译型:利用编译器(程序)将代码一次性转换为二进制文件(可执行文件),在运行阶段是独立的,不再需要编译器。所以概括起来,编译型语言的运行过程为:编写代码–>编译所有代码–>运行所有代码 . 属于编译型的语言包括C/C++,Pascal/Object Pascal(Delphi)
- 解释性:每次读取一行源程序,将该行代码转换成二进制代码,然后执行该二进制代码。所以解释性语言的运行过程为:编写代码–>解释一行代码–>运行一行代码–>解释一行代码–>运行一行代码–>…–>解释最后一行代码–>运行最后一行代码 . 属于解释性的语言包括Java、JavaScript、VBScript、Perl、Python、Ruby、Matlab
- 如此看来,编译型语言和解释性语言的本质区别就好像两种生活态度:全部准备好再去做事,一边准备一边做事。我原来偏向于前者,现在则偏向于后者(个人观点)。
- 两者的其他区别
- 运行速度
编译型运行速度较快,解释性运行速度较慢;可以这样考虑,运行速度指的是运行代码的速度,编译型的语言其编译阶段不包括在运行时间内,而且一次编译结束后形成可执行文件,之后再运行这段代码时就不需要再次编译了,直接运行之前编译好的可执行文件就可以了,即除第一次外,每次都可以直接运行代码。所以速度较快。而解释型语言,每次都是一边解释一边运行,而且每次都需要重新对源代码进行解释和执行,所以其运行时间包括将每一句源代码解释为二进制代码的时间,当然可能有其他原因,所以解释性语言的运行速度较慢。 - 可移植性(跨平台的能力)
——可移植性是指同一段代码在不同的系统或者环境中是否能够正常运行的能力。可以简单的这样理解:在其他条件相同的条件下,代码A在系统x下可以正常运行,在系统y下可以运行;代码B在系统x下可以运行,但在系统y下不可以运行;两者在其他的系统下都不可以运行,则可以认为代码A比代码B的可移植性强;一般代码的可移植性是基于不同类型的语言来说的,比如Python、C++之类。
------编译型语言的代码可移植性较弱,解释型语言的代码可移植性较强。
------解释型语言,在不同的系统下有专门的翻译器,对同一段代码翻译后,便可以在对应的系统环境下运行,而编译型语言,在不同的系统下需要对代码进行重新编译,因为不同的系统下二进制文件是不同的。编译型语言原本是一次编译、终身运行的,但是移植到其他的系统环境下,需要重新进行编译,破坏了一次编译、终身运行的优势,所以说其可移植性较差;而解释型语言本来就是一边解释一边运行的,移植到其他的系统环境下,还是一边解释一边运行,所以随原来性能没有影响,所以说其移植性较好。(个人理解,还望指正)
- 运行速度
2. 形态角度
- 动态语言:程序运行时可以改变其结构,可以对变量进行修改。动态语言在运行时才检查数据类型,所以定义时,不需要指明数据类型,其数据类型是在运行时,根据第一次给变量赋值的数据类型来确定变量的数据类型的。
- 静态语言:变量的类型在定义时就必须明确指明。如c++、c#、c、java等。
- **Java是解释型语言,但是也是静态语言,所以,一种语言是解释性语言和是动态语言是没有直接关系的。所以最好根据各自的定义和特征来判断。**也就是说不能根据一匹马跑的快慢来判断它吃的多少,而是直接根据它吃的多少来判断它的饭量大小(我可真啰嗦)
3. 语义角度
- 强定义类型语言:变量一旦指定类型,就必须经过类型转换(显式或着隐式)才能再赋值给该变量其他的类型的数值
- 弱定义类型语言:变量指定类型后,在存储空间允许的条件下,可以直接将其他类型的数值赋值给该变量。例如 a 为 int 类型(假设一个int类型占4个字节),将一个字符 ’a’(假设一个char类型占1个字节)赋值给变量a ,在弱定义类型语言中是可以直接赋值的。
来源:CSDN
作者:Gendien
链接:https://blog.csdn.net/qq_44761397/article/details/104059105