golang中未检测到/报告失效代码,是设计原因吗?[重复]

ruoxqz4g  于 2023-02-27  发布在  Go
关注(0)|答案(2)|浏览(109)

此问题在此处已有答案

Does Go optimize out unreachable if-statements?(1个答案)
昨天关门了。
我可以把panic("don't")放在任何函数的中间,而不是放在任何分支或循环中(这会使函数的其余部分“死”代码),go编译器会很高兴地编译和运行,而不会报告这是一个问题。
有人知道这是不是故意的吗?(编译器大声抱怨未使用的导入,所以为什么不是死代码呢......)自从Go语言1发布后,他们现在不能回去改变这种行为,他们会破坏现有的格式良好的代码。只是想知道这是一个疏忽还是故意的。如果是疏忽,我想它必须等到Go语言2(当他们可以破坏东西的时候)。

1l5u6lss

1l5u6lss1#

**简短的回答:**没有人真正关心老鼠的屁股。
更长的答案:

正如@Volker所指出的,这并没有太大的区别。
我的问题是明确的,如果这种行为是故意的。(这可能是一个坏的问题,所以,但哦,好吧。)正在寻找看看这是故意的,或只是一个疏忽。
Java和其他语言都是这样做的,所以我试着看看是否有一些“不,我们不在Go语言中这样做,因为......"。似乎没有这样的情况。从我所能收集到的来看,这只是一个不够重要的问题,不需要花时间放在上面。
我在这里也问了这个问题,得到的回答基本上是,是的,这是意料之中的,很抱歉你不喜欢它,它不会改变。它已经被添加到go vet中,应该足够了。这很好--我同意。

fbcarpbf

fbcarpbf2#

实际上,这只是暴露了糟糕的编译器设计,因为控制流应该在死机时结束。因此,编译器甚至不应该在同一控制流路径上死机后翻译代码。甚至不返回。如果他们声称这是故意的,那么他们完全失去了对编译器架构的控制。这是一个编译器错误,而不是语言更改。

相关问题