目录

类型系统

类型系统用于定义如何将编程语言中的数值表达式归类为许多不同的类型,以及如何操作这些类型,还有这些类型如何互相作用。

类型可以确认一个值或者一组值,具有特定的意义和目的。每一个类型都对应了一个针对于这个类型的算法运算。

实际的编程语言类型系统,起源于计算机架构的实际问题、编译器实现,以及语言设计。

类型系统的作用

类型可以让编译器侦测一些代码的错误,例如 "Hello World" + 3 这样的不同数据类型间操作的问题。

利于编译器的优化,静态类型语言的类型声明,可以让编译器明确地知道程序员的意图。例如:如果我们指定一个类型是 int ,那么编译就知道,这个类型会以 4 个字节的倍数进行对齐,编译器就可以非常有效地利用更有效率的机器指令。

有类型的编程语言,可以让代码更易读和更易维护,代码的语义也更清楚,代码模块的接口(如函数)也更丰富和清楚。从高层上来说,类型可以用来定义不同模块间的交互协议,比如函数的入参类型和返回类型,从而可以让接口更有语义,而且不同的模块数据交换更为直观和易懂。

类型的本质

类型是对内存的一种抽象。不同的类型,会有不同的内存布局和内存分配的策略。

不同的类型,有不同的操作。所以,对于特定的类型,也有特定的一组操作。

内建类型

一般来说,编程语言会有两种类型,一种是内建类型,如 int floatchar 等。

抽象类型

一种是抽象类型,如struct class function 等。

抽象类型在程序运行中,可能不表示为值

类型系统在各种语言之间有非常大的不同,也许,最主要的差异存在于:

  • 编译时期的语法

  • 运行时期的操作实现方式