2024-05-14 00:57:04 发布
网友
我在读http://tratt.net/laurie/research/pubs/html/tratt__dynamically_typed_languages/#x1-50002.3,它解释了静态分析在动态类型语言上不是实用的方法,但是原因不是很清楚。我的问题是为什么静态分析在动态类型语言上非常实用?在
假设cond(y)是一个布尔值函数。假设在你身上有线
cond(y)
x = "Hello World" if cond(y) else [1,2,3]
其中y是其他变量。静态分析如何判断x是字符串还是整数列表?y在编译时未知。唯一的方法就是运行程序,这违背了静态分析的目的
y
x
一个更现实的例子:
这将返回float或int,float对。因此没有定义良好的返回值。静态分析如何处理不确定返回类型的函数?在
这种考虑对静态分析器希望用动态类型语言完成的工作设置了严格的限制。这并不意味着对这类语言的所有静态分析都是不可能或毫无价值的。实际上,Python有一些静态分析工具,其中Pylint是开发得最多的。尽管如此,令人惊讶的是,Pylint的errors and warnings中很少有专门针对类型错误的(例如尝试添加字符串和整数)。相反,几乎所有的错误和警告代码都是"assigning to function call which doesn't return"。在
"assigning to function call which doesn't return"
假设
cond(y)
是一个布尔值函数。假设在你身上有线其中
y
是其他变量。静态分析如何判断x
是字符串还是整数列表?y
在编译时未知。唯一的方法就是运行程序,这违背了静态分析的目的一个更现实的例子:
^{pr2}$这将返回float或int,float对。因此没有定义良好的返回值。静态分析如何处理不确定返回类型的函数?在
这种考虑对静态分析器希望用动态类型语言完成的工作设置了严格的限制。这并不意味着对这类语言的所有静态分析都是不可能或毫无价值的。实际上,Python有一些静态分析工具,其中Pylint是开发得最多的。尽管如此,令人惊讶的是,Pylint的errors and warnings中很少有专门针对类型错误的(例如尝试添加字符串和整数)。相反,几乎所有的错误和警告代码都是
"assigning to function call which doesn't return"
。在相关问题 更多 >
编程相关推荐