python - 动态类型语言的静态分析

标签 python static-analysis dynamic-typing

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

最佳答案

假设cond(y)是一个 bool 值函数。假设你有一行

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 对。因此没有明确定义的返回值。静态分析应该如何处理不确定返回类型的函数?

这种考虑对静态分析器希望使用动态类型语言完成的任务施加了严格的限制。这并不意味着对此类语言的所有静态分析都是不可能或毫无值(value)的。其实Python也有静态分析工具,有Pylint是最发达的。但即便如此,令人惊讶的是 Pylint 的 errors and warnings 的数量如此之少。特别是关于类型错误(例如尝试添加字符串和整数)。相反,几乎所有错误和警告代码都更多地类似于“分配给不返回的函数调用”

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

相关文章:

c# - 指定的可执行文件不是此操作系统平台的有效应用程序。 Python绘图仪

python - 属性错误 : 'Index' object has no attribute 'tz_localize' with yfinance

Linux 内核内存泄漏目前已修复

java - 处理具有高圈复杂度的 if/switch 语句的代码的最佳方法是什么?

Haskell:用 Typeable 证明 `exists t. a ~ D t`

python - 如何去除unicode字符串中的空格

python - 循环导入 hell

c# - 使用正则表达式定位多个嵌套的 If 语句

c++ - 在什么情况下,dynamic_cast<> 可能会失败?

objective-c - 无法弄清楚这个动态类型的事情