语言类型

语言的翻译方式分为:编译和解释。除此之外还有更深一层的概念,例如静态语言,动态语言,强类型语言,弱类型语言。


语言类型

低级语言

前面我们知道,计算机内的程序和数据都是以0和1进行表示的。在打孔时代,程序员直接在纸带上打孔,从而对计算机进行操作。再后来,为了方便记忆,用0和1的序列的代表机器指令,这些指令合集诞生了汇编语言。但无论是机器指令还是汇编语言都是直接操作机器的,统称为低级语言。因为是针对特定机器的机器指令的助记符,所以汇编语言是无法独立于机器(特定的CPU体系结构)的。但汇编语言也是要经过翻译成机器指令才能执行的,所以也有将运行在一种机器上的汇编语言翻译成运行在另一种机器上的机器指令的方法,那就是交叉汇编技术。

高级语言

高级语言是从人类思维出发的计算机语言,将苦涩难懂的机器语言抽象成人类的思维模式。一条高级语言命令往往需要数条机器指令来完成。高级语言独立于机器的特性是依靠编译器为不同机器生成不同代码来实现的。编译即可以编译成可以直接执行的目标代码,也可以编译成一种中间表示,拿到不同的机器和系统上执行,通常这种情况下需要支撑环境,例如解释器或者虚拟机的支持。例如java编译成bytecode在虚拟机内执行。所以说高级语言不依赖于机器,是指在不同的机器或平台上高级语言的程序本身不变,而通过编译器编译得到的目标代码去适应不同的机器。从这个意义上来说,通过交叉汇编,一些汇编程序也可以获得不同机器之间的可移植性,但这种途径获得的移植性远远不如高级语言来的方便和实用性大。

编译型语言

编译型语言和汇编语言类似,也是有一个负责翻译的程序来对源代码进行转换,生成相对应的可执行代码。这个过程就叫做编译 Compile,而复杂编译的的程序就叫做编译器 Compiler。如果程序代码都包含在一个源文件中,那么通常编译过后就会生成一个可执行文件,可以直接运行。但是对于一些比较复杂的项目,为了方便管理,代码通常会分布在各个源文件中,作为不同的组件或者模块来组织。这时候进行编辑就会生成目标文件 Object file,而这些目标文件都是相对独立的,但是又不能给我们提供我们想要完整的程序,所以在所有目标文件生成完毕后,会把这些目标文件打包成为一个完整的可执行文件,这个工作由链接程序 Linker完成。链接的东西不止是目标文件,甚至还有图标文件,声音文件等。

解释型语言

解释的意思类似于人类之间的翻译,一本外文书籍,编译型一次性翻译,解释型在你阅读的时刻进行翻译。所以在运行时会不停的解释,执行。。。
相对于编译型语言,解释型语言的优点在于解释型语言会保存完整的源代码,那么只要有对应平台的解释器,那么移植便不是问题。并且由于解释型语言省略了编译,在调试时也非常方便,不用一次小修改就等待一次编译。

动态语言

动态语言是指在运行期间才检查数据类型的语言。也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。

静态语言

静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

强类型语言

强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

弱类型语言

数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容