什么是动态类型检查?
类型检查是指验证运算符的操作数是否具有兼容类型的活动。兼容类型是指对运算符来说合法的类型,或者根据语言规则可以由编译器生成的代码隐式修改为合法类型的类型。这种自动转换称为强制转换。如果语言中所有变量与类型的绑定都是动态的,那么类型检查实际上可以持续动态地完成。动态类型检查在程序执行期间进行。
动态类型检查通常通过在每个数据对象中保存一个类型标签来执行,该类型标签表示对象的类型。例如,一个整数数据对象可以同时包含整数值和整数类型标签。
然后执行每个操作,首先是一个类型检查序列,其中检查每个参数的类型标签。只有当参数类型正确时才执行操作,否则会指示错误。该操作还应将相应的类型标签连接到其结果,以便后续操作可以检查它们,即通过在程序中插入更多代码来识别潜在错误来完成动态检查。
动态类型检查的优点
动态类型检查具有以下优点:
程序设计没有灵活性。(此处翻译与原文存在矛盾,原文表达的意思与实际优点相反,建议重新检查原文)
不需要声明。
与变量名关联的数据对象的类型可以在程序执行期间根据需要更改。
动态类型检查可以发现静态类型检查无法识别的许多错误。
在大多数语言中,某些情况下某些语言结构无法进行静态类型检查,但动态类型检查可以实现相同的目的。
动态类型检查的缺点
动态类型检查具有以下缺点:
动态类型检查占用更多空间,因为动态类型检查涉及在程序中插入额外的代码来检测潜在错误。
程序难以调试,因为在程序测试期间不会探索所有可能的执行路径。
动态类型检查需要更多时间,从而降低了操作执行速度。
它不如静态类型检查高效。
它更昂贵。
错误可能会潜伏在程序中,直到执行过程中遇到它们。
大型程序往往包含很少执行的部分,因此程序可能在使用很长时间后,动态类型检查才会检测到类型错误。
很少检查依赖于运行时计算值的属性。例如,命令式语言很少检查数组索引是否在范围内。
基本的硬件不实现动态类型检查。
它可以管理标签并增加复杂性。