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