通俗定义
静态类型语言:在编译阶段确定所有变量的类型
- 编译阶段确定属性偏移量
- 用偏移量访问代替属性名访问
- 偏移量信息共享
动态类型语言:在执行阶段确定所有变量的类型
- 在程序运行时,动态计算属性偏移量
- 需要额外的空间存储属性名
- 所有对象的偏移量信息各存一份
所以动态类型语言无论在时间还是空间都有比较多的性能损耗。
静态类型与动态类型对比
静态类型语言 | 动态类型语言 |
---|---|
对类型极度严格 | 对类型非常宽松 |
立即发现错误 | Bug可能隐藏数月甚至数年 |
运行时性能好 | 运行时性能差 |
自文档化 | 可读性差 |
动态类型语言的支持者认为:
- 性能是可以改善的(V8引擎), 而语言的灵活性更重要
- 隐藏的错误可以通过单元测试发现
- 文档可以通过工具生成
其他定义
美国加州大学的讲义中对强类型语言的定义如下
强类型语言:不允许程序在发生错误后继续执行
按照上面的定义,C/C++就是弱类型语言,因为它们没有对数组越界进行检查,一旦发生错误,程序就会终止
争议: C/C++是强类型还是弱类型?