计算机不能直接理解高级语言,所以需要将高级语言翻译成机器语言,翻译有两种方式:编译、解释,这两种方式主要是翻译的时间不同。
编译性语言
编译性语言指代码需要先编译成机器语言的二进制文件,然后再执行。这样在执行的时候就不需要再翻译了,所以执行效率高。典型的有C/C++。
解释性语言
解释性语言指跳过编译阶段,直接运行,在运行时翻译。每次执行都需要翻译一次,所以效率较低。每种解释性语言都有对应的引擎来解释执行。有点类似于“同声翻译”,代码一边由相应的解释器“翻译”成机器语言,一边执行。脚本语言都是解释性的,典型的有Python、JavaScript。
Java比较特殊,即包含编译,也包含解释。先编译成字节码(可以被Java解释器解释的独立于平台的中间代码),然后解释器分析执行每条Java字节指令。Java字节码可以看做是运行在Java虚拟机JVM上的机器代码,其使得“写一次,到处运行”成为可能。
我们也可以将C和Java称为系统语言,将解释性语言具体化为脚本语言。下面分析这两种的区别:
1、抽象:脚本语言的抽象级别更高,这种语言自身中,存在高级的数据结构,如列表和字典结构
2、类型:系统语言通常是强类型和静态类型定义的,所有变量的类型要在程序中指定,在编译时检查。脚本语言是松散的类型定义,完全没有类型声明,在运行时进行动态类型检查。
3、执行:系统语言的特点是编译,编译成可执行的二进制再执行。脚本语言的特点是解释,指令被立即执行,跳过了中间的编译过程。脚本语言是交互式的,敲入命令就能看到结果。
4、速度:上面三点是脚本语言在速度与效率、易用性与表示式的强大性之间进行折衷的表现。这就使得脚本语言的执行速度比系统语言慢一个数量级,但性能降低不是真正的问题。思想是用脚本语言来组合组件,这些组件是用C这样的快速系统语言来编写的。所以所有需要运行快速的东西将因为是用快速的语言实现的而运行的快速,脚本语言只用于将东西绑在一起。
5、灵活:编译语言修改不灵活,发现问题后需要修改源代码后先编译,再执行,然后了解修改得对不对。脚本语言可以直接修改执行看效果。
6、依赖:编译语言可以脱离其语言环境独立执行,但解释型语言不能脱离其解释器。
编译性语言与解释性语言