关于Javascript变量类型预测的资源?

时间:2012-11-21 15:27:16

标签: javascript static-analysis dynamic-typing dynamic-analysis

引用这篇学术论文:Syntactic and Semantic Prediction in Dynamic Languages

  

IntelliSense实际上基于变量类型的知识。   因此,描述变量的符号必须包含其类型if   它是已知的,如果它可以解决,而且在动态语言中   一个变量可以在不同的部分携带不同的类型实例   代码和不同的程序执行。变量也可以   动态启动,只能在运行时知道其类型。   因此,符号应包含一些可能的类型列表   在语义分析中解决。但总的来说,不可能   绝对用动态语言解决; 甚至是单个程序   执行无济于事。

我在哪里可以找到更多这方面的资源,我特别感兴趣的是上面的块引用中的强调语句,最后对代码静态分析的预测率进行了一些统计。

1 个答案:

答案 0 :(得分:2)

这说明基本上是着名的图灵不可计算结果:一般来说,你无法知道计算所做的答案(或作为一种类型生成)。

虽然这一般是正确的,但它没有说明具体情况。一点想法应该说服你,如果程序员不知道某些标识符的类型是什么,他们可能无法编写任何使用它的代码。所以原始程序员知道(除非他们编写错误的代码)。但他们知道对系统的其余部分做出假设,然后执行这些假设(通常在其他地方)。

静态分析器不知道程序员做了什么假设,所以它不能那么精确。但在许多特定情况下,静态分析可以推断出类型。问题是,它有多少代码,并且可以使用构成代码背后语言的深层语义来解释代码吗?

我总是被“分析者不能(如同)人类(作为人类)”这一概念所困扰。如果分析仪可以访问人类所拥有的相同信息,那么它应该至少同样好,而且往往更好;它可以用人们无法做到的方式跟踪互动。更重要的是,如果静态分析器无法访问代码背后的关键假设,那么您如何期望其他程序员处理该代码呢?存在什么样的原因坚持他们知道某些代码块中使用的所有背景/假设?

所以我认为静态分析器的很多限制,甚至应用于动态语言,都是由于我们不愿意或无法记下编写代码时使用的假设。 (在那之后,存在设计适当强大的分析仪的能量问题)。