编译型语言和解释型语言是相对存在的。
编译型语言:
与汇编语言类似,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。
常见的编译型语言:C、C++、Object-C、Swift等。
两个步骤:
1.编译(compile):有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码,即机器语言。
负责编译的程序自然就是编译器(compiler)
2.链接(Link):
一般我们通常把代码分散在各个源文件中,作为不同的模块来组织。
这时编译各个文件时就会生成目标文件而不是前面说的可执行文件,一般一个源文件的编译都会对应一个目标文件。
这时我们需要把目标文件“打包”成一个可执行文件,这个工作由另一个程序负责完成,由于此过程好像是把包含可执行代码的目标文件、图标声音等资源文件连接装配起来,所以又称为链接(Link)。
而负责链接的程序就叫……就叫链接程序(Linker)。
解释型语言:
程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。
常见的解释型语言:Python、JavaScript、Perl、Shell
区别:
编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe、exec文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了,因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
适用场景:
前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言。
而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
解释性语言的跨平台性:
编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件,unix编译成exec文件)
。
解释性语言,例如java语言,java程序首先通过编译器编译成class文件,如果在windows平台上运行,则通过windows平台上的java虚拟机(VM)进行解释。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机。如果没有java虚拟机,则不能进行跨平台。
附加:
动态类型语言:
动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。
静态类型语言:
静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。
动态语言:
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
静态语言:
与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。
网友评论