1.编译型语言和解释型语言
1.1 编译型语言
通过编译器将源代码(人能看得懂的,准确来说应该是程序员能看得懂的)编译成机器码(01 代码,因为计算机只认识 0 和 1),之后才能执行的语言。 一般需要经过编译、链接两个步骤。
编译就是把源代码翻译成机器码,所以编译器就相当于是一个“翻译官“。
链接是把各个模块的机器码和依赖库串连起来生成可执行文件(可执行文件的扩展名一般是.exe,所以大家下载的很多软件都是 exe 格式的,直接点开就可以运行的)
一次编译,多次执行, 编译型语言的执行效率较高。
代表语言:C、 C++、 Object-C、 Swift
1.2 解释型语言
解释性语言在运行程序的时候由解释器逐行翻译, 每次运行的时候都要解释一遍,性能上不如编译型语言。
解释型语言可形象比喻为吃火锅,边煮边吃。
代表语言:JavaScript、 Python、 PHP、 Perl、 Ruby
1.3 混合型语言
混合型语言也叫半编译型语言, 比如 C#, C#在编译的时候不是直接编译成机器码而是中间码, .NET 平台提供了中间语言运行库运行中间码,中间语言运行库类似于 Java 虚拟机。 .NET 在编译成 IL 代码后,保存在 dll 中,首次运行时由 JIT 在编译成机器码缓存在内存中,下次直接执行。 C#更接近编译型语言。
Java 先生成字节码再在 Java 虚拟机中解释执行, 严格来说属于解释型语言。.NET 依赖于 Windows,由于微软对自家开发平台(.NET)的优化, 使得多数 C#代码执行效率高于 Java 代码。
2.动态语言和静态语言
2.1 动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
主要动态语言:C#、 Object-C、 JavaScript、 Python、 PHP
2.2 静态语言
与动态语言相对应的,运行时结构不可变的语言就是静态语言。
主要静态语言:Java、 C、 C++
3.动态类型语言和静态类型语言
3.1 动态类型语言
动态类型语言和动态语言是完全不同的两个概念。
动态类型语言:是指在运行期间才去做数据类型检查的语言,说的是数据类型。
动态语言:说的是运行时改变结构,说的是代码结构。
动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。
主要语言:Python、 Ruby、 JavaScript、 Swift、 PHP、 Perl
3.2 静态类型语言
静态语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。
主要语言:C、 C++、 C#、 Java、 Object-C
4.强类型语言和弱类型语言
说到数据类型,就不得不提从数据类型是否严格定义的角度产生的另外两个概念:强类型语言和弱类型语言。
4.1 强类型语言
强类型语言,一旦一个变量被指定了某个数据类型,如果不经过强制类型转换,那么它就永远是这个数据类型。你就不能把一个整形变量当成一个字符串来处理。
主要语言:Java、 C#、 Python、 Object-C、 Ruby
4.2 弱类型语言
数据类型可以被忽略,一个变量可以赋不同数据类型的值。一旦给一个整型变量 a 赋一个字符串值,那么 a 就会变成字符类型。
主要语言:JavaScript、 PHP
5.注意
一个语言是不是强类型语言和是不是动态类型语言也没有必然联系。 Python 是动态类型语言,是强类型语言;JavaScript 是动态类型语言,是弱类型语言;Java 是静态类型语言,是强类型语言。