在乔尔提到的latest podcast的精神中,他想要一些简单的问题以及可能有趣的答案......
在我们今天必须编程的环境中,我们不能依赖于langauage语句的执行顺序。真的吗?我们应该关注吗?
30 GOTO 10总是会进入10?*
*我没有故意使用20;)
[编辑]四个人投票结束这个问题...
“运行时编译器使用分析信息来帮助优化正在编译的代码。允许JVM使用特定于执行的信息以生成更好的代码,这意味着一个程序中的编译方法M可能生成不同的代码。在另一个“
中编译M.(来自Java并发实践,2006,Goetz等)
..看看“单形呼叫转换”
[编辑]
和另一个编辑,允许你的处理器交换语句的执行顺序......
答案 0 :(得分:25)
不,它不会。但它总是表现就好像它一样。编译器设计的基本规则之一是“似乎”规则。您的编译器可以进行任何喜欢的更改,只要结果符合,就像您遵循语言规则一样。
GOTO 10可能决定跳转到其他位置,只要编译器可以保证它不会改变程序的结果。
所以不,它不应该让你担心。
答案 1 :(得分:13)
如果你有
那就没有了40 COMEFROM 30
代码中的某处。
答案 2 :(得分:8)
答案 3 :(得分:1)
嗯,如果它没有执行就不会,例如,如果有20 GOTO 40
。
答案 4 :(得分:1)
在BASIC,是的。在其他语言中,它将生成编译错误。
答案 5 :(得分:0)
我们应该依赖代码完成我们告诉它的代码。如果我们在第30行告诉它GOTO 10
,但也告诉它跳过第30行,我们不应该在跳过第30行时出错。我们告诉程序。
答案 6 :(得分:0)
是的,如果您考虑执行BASIC程序的多核CPU,其中一个核心可能会意外错过GOTO(提示:“TLB Bug”)并继续,就像它不存在一样。