编程语言发展史

image.png

类型

类型的本质:

  • 类型是对内存的一种抽象。不同的类型,会有不同的内存布局和内存分配的策略。
  • 不同的类型,有不同的操作。所以,对于特定的类型,也有特定的一组操作。

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

程序语言的安全性

使用类型可以让编译器侦测一些代码的错误,例如:可以识别出一个错误无效的表达式,如“Hello, World” + 3这样的不同数据类型间操作的问题。强类型语言提供更多的安全性,但是并不能保证绝对的安全。

利于编译器的优化

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

代码的可读性

有类型的编程语言,可以让代码更易读和更易维护,代码的语义也更清楚,代码模块的接口(如函数)也更丰富和清楚。

抽象化

类型允许程序设计者对程序以较高层次的方式思考,而不是烦人的低层次实现。例如,我们使用整型或是浮点型来取代底层的字节实现,我们可以将字符串设计成一个值,而不是底层字节的数组。从高层上来说,类型可以用来定义不同模块间的交互协议,比如函数的入参类型和返回类型,从而可以让接口更有语义,而且不同的模块数据交换更为直观和易懂。

动态、静态、强类型、弱类型

动态、静态

编译时类型的约束
静态:变量声明时必须指定类型
动态:变量声明时不必指定类型,变量类型可动态调整

强类型、弱类型

运行时类型的约束
强类型:不允许值类型的隐式转换
弱类型:允许值类型进行隐式转换

严谨与灵活

由上面编程语言发展图、类型象限图可知:仍然有生命力,近些年创造、热门的语言都趋于严谨,这是因为随着程序的复杂度提升,更加的严谨意味着更少的错误。
类型对于习惯了 JS 灵活的前端工程师来说,一开始会感觉戴上了沉重的镣铐,但磨刀不误砍柴工:如上文类型系统提供的功能可知类型系统不仅能够在编译时提早警告错误,对于大型工程的协作提供了类型保证,对于代码提示、代码维护也更加友好,细细体会还是利大于弊。
对于前端开发而言:即便还没有接触 TS,但也得相信整个行业的趋势所向。

参考

32 | 编程范式游记(3) - 类型系统和泛型的本质
如何成为一名专业的前端工程师
弱类型、强类型、动态类型、静态类型语言的区别是什么?