最近,我正致力于学习语言的动态和静态分析。我已经阅读了一些像static and dynamic code analysis这样的相关问题,但我仍然有一些问题。
动态分析可以在编译和运行时期间进行,并检查程序状态。通过动态分析,可以避免不必要的执行步骤。静态分析通常指静态类型检查系统,静态分析必须正确预测实际的程序行为。对于静态类型系统,这意味着分配的类型必须描述程序在运行时可以评估的所有值。我想知道如果类型检查器将类型分配给程序而不描述程序评估的所有值,会发生什么。任何人都可以举一个例子吗?
答案 0 :(得分:0)
在静态类型系统中,如果值的类型与目标类型不兼容,则无法分配(或作为参数传递)(尽管大多数语言提供了强制分配的方法)。
静态类型语言的静态类型分析不具有预测性;这是规定性的。
但静态分析也可以进行预测分析,例如通过null
值检查可能的访问权限,或者不在switch
/ {{处理枚举的al值1}}语句,或条件总是case
或“false”等条件。静态分析可以检测到许多常见的编程错误。
使用类型注释和 type inference 也可以对动态类型语言进行静态类型分析。