一、计算机语言分类
低级语言、高级语言、专用语言、脚本语言
1、低级语言:机器语言、汇编语言和符号语言。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令(机器码)的合集,他是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能;汇编语言(亦称符号语言)用助记符代替机器指令的操作码,汇编语言源程序必须经过汇编生成目标文件,然后执行。
2、高级语言:主要是相对汇编语言而言,它更接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序,编写的程序称为源程序。高级语言并不是特指某一具体语言,而是包括很多编程语言,如流行的java,C/C++,C#,pascal,python,lisp,prolog,FoxPro,易语言等。
3、专用语言:CAD系统中的绘图语言和DBMS的数据库查询语言。
4、脚本语言:又被称为扩建的语言或者动态语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。脚本语言是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言。一个脚本通常是解释运行而非编译。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。一个脚本可以使得本来要用键盘进行的相互式操作自动化。
二、高级语言分类
编译型语言、解释型语言、混合型语言
1、编译型语言:编译型语言首先将源代码“翻译”生成目标代码(机器语言),再由机器运行机器码(二进制),其目标程序可以脱离其语言环境独立执行。编译只需一次,以后要运行就不需要重新编译,所以编译型语言执行效率高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。编译由编译器完成。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了。但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织。这时编译各个文件时就会生成目标文件(Object file)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的一部分,所以我们还不能直接运行。待所有的源文件的编译都大功告成,我们就可以最后把这些半成品的目标文件“打包”成一个可执行文件了,这个工作由另一个程序负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫……就叫链接程序(Linker)。链接程序除了链接目标文件外,可能还有各种资源,像图标文件啊、声音文件啊什么的,还要负责去除目标文件之间的冗余重复代码,等等。链接完成之后,一般就可以得到我们想要的可执行文件了。
2、解释型语言:解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。一般来说,现有的解释性语言都是采用的逐行解释一句,执行一句这样的方式来构建的。这样解释性语言每执行一次就要翻译一次,效率比较低 。解释型程序中,由于程序总是以源代码的形式出现,因此只要有相应的解释器,移植几乎不成问题。释程序的优点是当语句出现语法错误时,可以立即引起程序员注意,而程序员在程序开发期间就能进行校正。
3、混合型:Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是 编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的 Python字节码解释器负责解释执行字节码。
编译型vs解释型
编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
三、动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型(数据类型)语言。
1、动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
2、静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
四、强类型定义语言和弱类型定义语言
1、强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
2、弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。