智能编译器无法阻止无限循环和SQL Cartesian连接

时间:2013-10-29 04:02:01

标签: c# sql loops cartesian-product

由于以下两个问题导致程序崩溃,我感到很沮丧:

  • 无限循环(例如C#或Javascript)
  • SQL连接我忘记添加连接子句的地方

如果编译器足够胜任,这些似乎是可以预防的问题。如何以编程方式防止这些问题?

1 个答案:

答案 0 :(得分:1)

现代编译器可以并且为了优化原因而展开循环,但是在不知道某些数据的情况下,甚至无法对循环是否将终止进行启发(参见:dataflow programming)。事实上,决定你的程序本身是否会终止称为Halting Problem

在其他情况下,您想要无限循环。例如,图形引擎通常会执行以下操作:

while(true)
   render

至于你的SQL连接......我想当你错过一个时,它应该是非常明显的。在某些情况下,如果不给出INNER JOIN,则暗示INNER JOIN,因此从这个意义上说,编译器正在解决这个问题。