2

“特定情况”是指它使用一些可以访问的数据,例如您当前的数据库设置、某些操作系统的版本等。

想象一下,如果编译器会检查您当前在您的应用程序中使用的数据库并给您发出警告,说“您知道,您数据库中的当前数据将永远不会触发您刚刚编写的语句”或诸如“您知道,如果这变成了一个空值,你真的会被搞砸'......这可能需要一段时间,但如果它有一些东西可以通过(例如当前数据库),它可能需要检查一些东西而不仅仅是'每一种可能性”。

您认为这可行/有价值吗?这在任何地方都存在吗?

如果有一个量子编译器可以找出每一种可能性并自动提出异常处理等,那就太酷了。

4

6 回答 6

5

我不能保证,但这似乎与已知不可能的停机问题同构。

于 2009-10-04T05:17:29.977 回答
3

正如詹姆斯所怀疑的那样,这与停止问题同构,因此被证明是不可能的。

事实上,这个问题可以简单地归结为编译 Perl(因为 Perl 需要与情境相关的知识)。有一个简单而优雅的证据证明Perl实际上不能被编译

因此,我们至少有一个反例(Perl),其中静态编译器无法检查程序的正确性,从而与假设相矛盾。 量子点

于 2009-10-05T08:50:45.273 回答
0

这在我所知道的任何地方都不存在()。但是我真的很喜欢人性化错误消息的想法:

You know, if this becomes a null value you are really going to be screwed.

至于这是否可行:我会说任何事情都可能发生,所以谁真正知道(以及我是谁来预测未来)。

是否有价值:是的 这将节省大量时间,如果它按照您所说的那样处理异常,它将成为有史以来最有用的工具之一。曾经!!!

于 2009-10-04T05:13:04.713 回答
0

听起来您在谈论一种复杂的数据流分析形式。现有编译器和静态分析工具广泛使用这种技术。目前可能没有像您建议的那样先进的工具,但这并不意味着如果有足够的时间和研究就无法创建它。

于 2009-10-04T05:39:47.313 回答
0

理论上是可能的,但不太可能。本质上,您正在做的是要求静态分析使用一些辅助数据来验证某些声明。这通常是可能的,但静态分析通常存在一定程度的不精确性。例如,如果我有代码块:

If(getResultFromDB() == someResult) {
do this;
} else {
do that;
}

如果您在 if 的第一个块中编写代码,您基本上希望分析向您抱怨,因为数据库永远不会返回 someResult。这在理论上是可能的,我的意思是它只需要检查给定数据库的函数 getResultFromDB() 的所有可能返回值,然后得出一个答案。

问题是这个数字绝对是巨大的。这通常是静态分析的一个问题,为了获得精确的结果,我们需要考虑所有可能的执行路径、输入、上下文等。在实践中这根本不可行,因此静态分析通常会在减少的地方做出让步它当前的可能性集的大小。

编辑:如果您一般对高级静态分析感兴趣,这是我前几天读到的一个有趣的分析。它试图在 PHP 源代码中发现可能的 XSS 攻击。为了发现涉及数据库的 XSS 攻击,它实际上是在一种抽象数据库中模拟数据库查询的效果。http://www.cs.washington.edu/homes/mernst/pubs/create-attacks-tr054.pdf

于 2009-10-04T05:43:27.553 回答
0

虽然这个问题可能无法完全解决,但有一些尝试使静态分析尽可能智能,其中之一 - 来自 Wesner Moise 的 NStatic - 具有很高的期望值(这也可能是该工具的原因没有发货,而且似乎不会很快发货:))

http://wesnerm.blogs.com/net_undocumented/nstatic/

于 2009-10-05T08:21:14.167 回答