类型系统
类型系统
用于定义如何将编程语言中的数值
和表达式
归类为许多不同的类型
,以及如何操作这些类型,还有这些类型如何互相作用。类型
可以确认一个值或者一组值,具有特定的意义和目的。每一个类型都对应了一个针对于这个类型的算法运算。
实际的编程语言类型系统,起源于计算机架构的实际问题、编译器实现,以及语言设计。
类型系统的作用
类型可以让编译器侦测一些代码的错误,例如 "Hello World" + 3
这样的不同数据类型间操作的问题。
利于编译器的优化,静态类型语言的类型声明,可以让编译器明确地知道程序员的意图。例如:如果我们指定一个类型是 int ,那么编译就知道,这个类型会以 4 个字节的倍数进行对齐,编译器就可以非常有效地利用更有效率的机器指令。
有类型的编程语言,可以让代码更易读和更易维护,代码的语义也更清楚,代码模块的接口(如函数)也更丰富和清楚。从高层上来说,类型可以用来定义不同模块间的交互协议,比如函数的入参类型和返回类型,从而可以让接口更有语义,而且不同的模块数据交换更为直观和易懂。
类型的本质
类型是对内存的一种抽象。不同的类型,会有不同的内存布局和内存分配的策略。
不同的类型,有不同的操作。所以,对于特定的类型,也有特定的一组操作。
内建类型
一般来说,编程语言会有两种类型,一种是内建类型,如 int
float
和 char
等。
抽象类型
一种是抽象类型,如struct
class
function
等。
抽象类型在程序运行中,可能不表示为值。
类型系统在各种语言之间有非常大的不同,也许,最主要的差异存在于:
编译时期的语法
运行时期的操作实现方式