编译型语言与解释型语言,强类型语言与弱类型语言,动态类型语言与静态类型语言
编译型语言:
需要编译器,只需编译一次,就可以将源码编译成机器语言(二进制cpu指令),后续执行无需再次编译,直接执行二进制机器指令即可,执行效率非常高。
编译型语言代表有,c、c++、Delphi、等等。
执行效率高,但是跨平台性差,需依赖对应平台的编译器,如更换平台,例如,从linux到Windows,需对源码使用Windows平台的编译器进行重新编译。
不同平台下对编译器影响较大:
(1)16位系统下int是2个字节(16位),而32位系统下int占4个字节(32位);
(2)32位系统下long类型占4字节,而64位系统下long类型占8个字节;
解释型语言:
需要解释器,源码并不是直接编译成对应平台的机器语言(二进制cpu指令),而是先翻译成中间代码,执行的时候,再通过解释器对中间代码进行一条一条的解释执行。
源码->中间代码(字节码)->机器语言(二进制cpu指令)
源码每执行一次,都需要解释器翻译一次,即源码->中间代码(字节码)->机器语言(二进制cpu指令)这个过程。
解释型语言代表有,python,JavaScript,shell,ruby,MATLAB等等。
运行效率相对编译型较低,依赖对应平台的解释器,通过对应平台的解释器从而实现了语言的跨平台性,源码在不同平台上无需改动直接使用对应平台解释器执行,且不同平台执行结果相同。实现跨平台性。
编译型与解释型语言比较:
(1)一般情况下,编译性语言的运行效率比解释性语言更高;但是不能一概而论,部分解释性语言的解释器通过在运行时动态优化代码,甚至能使解释性语言的性能超过编译性语言;
(2)编译性语言的跨平台特性比解释性语言差一些;
强类型语言:
数据类型不可以被忽略的语言 即变量的数据类型一旦被定义,那就不会再改变,除非进行强转。 在python中,例如:name = 'test',这个变量name在被赋值的那一刻,数据类型就被确定死了,是字符型,值为'test'。
弱类型语言:
相对于强类型语言而言的,数据类型可以被忽略的语言 比如linux中的shell中定义一个变量,是随着调用方式的不同,数据类型可随意切换的那种。
在强类型语言中,变量的类型有多种,例如int char float boolean 等,不同的类型相互之间转换需要强制转换。而像JavaScript这种语言,只有一种类型var ,为变量赋值时会自动判断值的类型从而确定变量的类型,并且随着程序中使用该变量的位置的不同,该变量的数据类型也会发生变化,所以javascript是弱类型语言。
动态类型语言:
运行时才进行数据类型检查, 即代码运行时,看到变量赋值时,分析变量值的类型,从而才确定变量的数据类型,不用事先给变量指定数据类型。
静态类型语言:
需要事先给变量进行数据类型定义。
Java是编译型还是解释型语言?
Java可以理解成是兼具编译型和解释型的语言。
Java文件先编译成与平台无关的.class的字节码文件,然后.class的字节码文件既可以在Windows平台上的Java虚拟机(JVM)上进行解释运行,也可以在Linux平台上的JVM上解释运行;而JVM的翻译过程时解释性的,JVM从.class的字节码文件中读出一条指令,翻译一条指令,然后执行一条指令,这个过程就称为Java的解释执行;
Python是一门解释型的强类型动态语言。
JavaScript是一门解释型的弱类型动态语言。