我正在阅读http://tratt.net/laurie/research/pubs/html/tratt__dynamically_typed_languages/#x1-50002.3,它解释说静态分析不是动态类型语言的实用方法,但原因还不是很清楚。我的问题是,为什么对动态类型的语言进行静态分析非常实用?

最佳答案

假设cond(y)是布尔值函数。假设你有线

x = "Hello World" if cond(y) else [1,2,3]


其中y是其他一些变量。静态分析如何分辨x是字符串还是整数列表? y在编译时未知。唯一知道的方法是运行程序-这违反了静态分析的目的

一个更现实的例子:

def squareRoot(x):
    if x > 0:
        return math.sqrt(x)
    else:
        return (0,math.sqrt(abs(x))) #representing complex a+bi as (a,b)


这将返回一个float或一个int,float对。因此,没有明确定义的返回值。静态分析应该如何处理不确定的返回类型的函数?

这种考虑严重限制了静态分析器希望使用动态类型的语言完成的工作。这并不意味着对这些语言的所有静态分析都是不可能的或毫无价值的。实际上,有一些针对Python的静态分析工具,其中Pylint是最先进的。尽管如此,令人惊讶的是,Pylint的errors and warnings很少专门涉及类型错误(例如尝试添加字符串和整数)。取而代之的是,几乎所有的错误和警告代码都更多地位于"assigning to function call which doesn't return"的范围内。

关于python - 动态类型语言的静态分析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36959856/

10-12 19:26