什么是动态类型检查?
类型检查是提供运算符的操作数是兼容类型的活动。兼容类型是对运算符合法或在语言规则下允许由编译器生成的代码隐式修改为合法类型的类型。这种自动转换称为强制转换。如果变量与类型的所有绑定在语言中都是动态的,则类型检查实际上可以动态地连续完成。动态类型检查是在程序执行期间完成的。
动态类型检查一般通过在每个数据对象中保存一个表示对象数据类型的类型标签来执行。例如,整数数据对象可以包括整数值和整数类型标签。
然后执行每个操作以开始一个类型检查序列,在该序列中检查每个参数的类型标记。仅当参数类型正确或指示错误时才执行该操作。该操作还应将适当的类型标记与其结果连接起来,以便后续操作可以对其进行检查,即通过在程序中插入更多代码以识别即将发生的错误来完成动态检查。
动态类型检查的优势
动态类型检查有以下优点:
程序设计没有灵活性。
对声明没有要求。
在程序执行过程中,可以根据需要更改与变量名称关联的数据对象的类型。
动态类型检查可以发现很多静态类型检查无法识别的错误。
在大多数语言中,某些语言结构在某些情况下无法进行静态类型检查,但动态类型检查可以实现相同的目的。
动态类型检查的缺点
动态类型检查有以下缺点:
动态类型检查占用更多空间,因为动态类型检查涉及在程序中插入额外代码以检测即将发生的错误。
程序很难调试,因为在程序测试期间没有探索所有可能的执行路径。
动态类型检查需要更多时间,这降低了执行操作的速度。
它比静态类型检查效率低。
它更贵。
错误可能潜伏在程序中,直到在执行过程中出现。
大型程序往往有很少执行的部分,因此在动态类型检查检测到类型错误之前,程序可以使用很长时间。
很少检查依赖于运行时计算值的属性。例如,命令式语言很少检查数组索引是否在边界内。
基本硬件没有实现动态类型检查。
它可以管理标签并增加复杂性。