我不能理解DART编辑器如何评价表达式时,认为代码是死的。

我不能理解DART编辑器如何评价表达式时,认为代码是死的。,dart,code-analysis,dart-editor,Dart,Code Analysis,Dart Editor,此源代码在Dart编辑器中生成警告死代码 (一) 但该常量表达式的计算结果也为false时不会生成警告 (二) (三) (四) (五) 编辑如何在这些情况下帮助我 你可以认为我所有的例子都不是真实生活的。 但是我也可以认为这个代码不是真实生活的。< /P> if(false){ } 那么,仅支持case#1而不支持case#2、#3、#4、#5以及所有其他可能的情况如何帮助我在Dart编辑器中查找死代码呢 附言 当然,这是Dart Editor的一个很好的功能,我不想贬低她的用处,但

此源代码在Dart编辑器中生成警告<代码>死代码

(一)

但该常量表达式的计算结果也为
false
时不会生成警告

(二)

(三)

(四)

(五)

编辑如何在这些情况下帮助我

你可以认为我所有的例子都不是真实生活的。

<>但是我也可以认为这个代码不是真实生活的。< /P>
if(false){
}
那么,仅支持case#1而不支持case#2、#3、#4、#5以及所有其他可能的情况如何帮助我在Dart编辑器中查找死代码呢

附言


当然,这是Dart Editor的一个很好的功能,我不想贬低她的用处,但我仍然想知道:“这是否有可能使它变得更有用,因为它几乎没有什么用处?”。

一般来说,不可能证明代码是“死的”,因为它需要在编译时运行该代码,而这段代码可能会有很长的运行时间,或者永远不会终止


所以他们必须在某个地方画一条线,看起来他们已经决定使用简单的真/假值,但在编译时不会计算更复杂的值。你可能会质疑他们的底线,认为简单的表达式可以有效地进行计算,但由于一般来说不可能证明代码是死的,他们必须在某个地方做出决定……

这一切都取决于分析的深度和完整性。如果我们分析这些表达式,我们可以收集到更多有趣的信息。还可以在基元值下编写表达式求值器​​没那么难。此外,好的工具(若称为analyzer)必须分析所有代码路径并计算所有表达式(若可能)。这被称为静态单赋值形式(SSA),使用定义链(UD链)和活变量分析(活性分析)。我认为Dart编辑器使用数据流分析,但我错了。“简单的真/假值”与控制流图(CFG)分析不同。我很抱歉,但您确实认为,要执行良好和完整的分析,需要“在编译时运行该代码,并且该代码可能有大量的运行时间或永远不会终止”。你能给我提供这种分析的链接吗(“run-code-at-compile-time-and-wait-a-mage-time-until-it-terminate-for-performing-good-analysis”)?你可以调用一个总是返回零的函数,但要证明它确实返回了,这并不是一件小事。例如,如果你调用一个函数检查它,一个整数是一个素数,然后给它传递一个十亿位数,会怎么样。答案为false,因此依赖于它的if条件是“死代码”,因为它永远不能被调用。但如果不在编译时花费几乎无限的时间来证明这一点,你就不会知道。我想说的是,像这个独特的警告这样的“有用”特性,我从来没有遇到过。如果你还不明白这是什么意思的话,那就这样吧。
if(false) {
}
if("hello" is int) {
}
if(false || false) {
}
if(false == true) {
}
if(0 > 0) {
}