03 # 类型基础:动态类型与静态类型

通俗定义

静态类型语言:在编译阶段确定所有变量的类型

在这里插入图片描述
在这里插入图片描述

  • 编译阶段确定属性偏移量
  • 用偏移量访问代替属性名访问
  • 偏移量信息共享

动态类型语言:在执行阶段确定所有变量的类型

在这里插入图片描述
在这里插入图片描述

  • 在程序运行时,动态计算属性偏移量
  • 需要额外的空间存储属性名
  • 所有对象的偏移量信息各存一份

所以动态类型语言无论在时间还是空间都有比较多的性能损耗。

静态类型与动态类型对比

静态类型语言 动态类型语言
对类型极度严格 对类型非常宽松
立即发现错误 Bug可能隐藏数月甚至数年
运行时性能好 运行时性能差
自文档化 可读性差

动态类型语言的支持者认为:

  • 性能是可以改善的(V8引擎), 而语言的灵活性更重要
  • 隐藏的错误可以通过单元测试发现
  • 文档可以通过工具生成

其他定义

美国加州大学的讲义中对强类型语言的定义如下

强类型语言:不允许程序在发生错误后继续执行

按照上面的定义,C/C++就是弱类型语言,因为它们没有对数组越界进行检查,一旦发生错误,程序就会终止

争议: C/C++是强类型还是弱类型?

语言类型象限

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kaimo313/article/details/134411085