现有的编程语言,大致可分为编译型语言与解释性语言两大类。
**1编译型语言:**用编译型语言写的程序在执行之前,需要一个专门的编译过程,通过编译系统将源代码翻译成机器指令,再由机器运行机器码。比如Windows下的exe文件,以后就可以直接运行而不需要翻译。
**2 解释型语言:**解释型语言编写的程序不需要进行编译,而是在运行时才进行翻译,且翻译成中间代码而非机器码,再由解释器对中间代码进行解释运行,每个语句都是执行的时候才翻译。
对于编译型与解释型,两者各有利弊。对于编译型语言,编译器一般会有预编译的过程对代码进行优化,编译只做一次,运行时不需要编译。因而编译型语言的程序执行效率高。可以脱离语言环境独立运行。但缺点在于如果需要修改就需要整个模块重新编译,编译的时候根据对应的运行环境生产机器码,不同系统之间移植会需要编译不同的可执行文件。而对于解释型语言,有良好的兼容性,修改代码时直接修改就可,可快速部署。缺点就在于运行时都要解释一遍,效率不如编译型语言。
简单举个例子进行类比。面对考试有两种备考策略:针对已知错题进行复习和整本书统一复习。两者则分别对应编译型语言和解释型语言。针对错题相当于对考察知识进行一个预先的总结归纳。如果对于大型考察会更具效率,但是如果发现考察成绩较低而存在知识点缺陷时,需要进行全盘的错题总结分析。而对于整本书统一复习,会对脉络有更好的掌握,小知识点会掌握的比较清晰,但是在考察范围多的情况下,会显得效率比较低。
根据语言进行类型检查的阶段,可分为静态类型语言和动态类型语言。
**动态类型语言:**动态类型语言在在运行时进行类型检查,使用变量前不需要声明变量。
**静态类型语言:**静态类型语言在编译时进行类型检查,在使用前需要声明变量。
因而大体上而言,静态类型语言在编译时就能发现类型上的错误,会比动态类型更早的发现变量类型的错误而不需要去储存和检测类型,可以节省程序运行的时间和空间。而动态类型的主要优点在于代码重用率会更高,代码可以被不同类型的数据重用。并且在再开发和维护的方面,动态类型在更改代码时,可以把代码能接受的变得更宽广。静态类型必须要更改所以调用的代码而不能进行局部的测试。但是静态类型的类型检查会列出需要更改的地方,可以避免一些bug。
根据类型检查的严格程度,将编程语言分为弱类型与强类型两类。
**强类型语言:**一旦一个变量被指定某个数据类型,如果不经过强制类型转换则无法将之当作另一数据类型来看待。比如声明整形变量后不能作为字符串进行处理。
**弱类型语言:**一个变量可以赋予不同数据类型的值,例如若给一个整形变量a赋予字符串值,则a成为字符类型。
通过对基础概念的辨析,我们可以发现:一般而言,强类型语言更具规范性,在对于构建大型项目时,强类型语言更加规范可靠而不会出现变量的类型错误而产生bug的情况。但是这种规范性在面对一些较小的项目时,会较弱类型语言多出相当数量的代码量,显得有些累赘。而反之,弱类型语言在代码编写过程中能够更加简洁方便,减少了工作量。