0%

程序语言的类型系统:优点、问题、本质

2020年3月18日 下午12:08

程序语言的类型系统主要提供如下的功能

  • 程序语言的安全性。
    • 使用类型可以让编译器侦测一些代码的错误,例如:可以识别出一个错误无效的表达式,如“Hello, World” + 3这样的不同数据类型间操作的问题。
    • 强类型语言提供更多的安全性,但是并不能保证绝对的安全。
  • 利于编译器的优化。
    • 静态类型语言的类型声明,可以让编译器明确地知道程序员的意图。因此,编译器就可以利用这一信息做很多代码优化工作。
    • 例如:如果我们指定一个类型是 int ,那么编译就知道,这个类型会以 4 个字节的倍数进行对齐,编译器就可以非常有效地利用更有效率的机器指令。
  • 代码的可读性。
    • 有类型的编程语言,可以让代码更易读和更易维护,代码的语义也更清楚,代码模块的接口(如函数)也更丰富和清楚。
  • 抽象化。
    • 类型允许程序设计者对程序以较高层次的方式思考,而不是烦人的低层次实现。例如,我们使用整型或是浮点型来取代底层的字节实现,我们可以将字符串设计成一个值,而不是底层字节的数组。
    • 从高层上来说,类型可以用来定义不同模块间的交互协议,比如函数的入参类型和返回类型,从而可以让接口更有语义,而且不同的模块数据交换更为直观和易懂。

类型带来的问题

  • 类型带来的问题就是我们作用于不同类型的代码,虽然长得非常相似,但是由于类型的问题需要根据不同版本写出不同的算法,如果要做到泛型,就需要涉及比较底层的玩法

核心:每个语言都需要一个类型检查系统

  • 静态类型检查是在编译器进行语义分析时进行的。
    • 如果一个语言强制实行类型规则(即通常只允许以不丢失信息为前提的自动类型转换),那么称此处理为强类型,反之称为弱类型。
  • 动态类型检查系统更多的是在运行时期做动态类型标记和相关检查。
    • 所以,动态类型的语言必然要给出一堆诸如:is_array(), is_int(), is_string() 或是 typeof() 这样的运行时类型检查函数。