【发布时间】:2015-03-25 22:59:27
【问题描述】:
这些规则涵盖了“as-if”规则:
对一致性实现的最低要求是:
对易失性对象的访问严格按照抽象机的规则进行评估。
在程序终止时,写入文件的所有数据应与程序执行的可能结果之一相同 根据抽象语义会产生。
交互设备的输入和输出动态应以提示输出实际传递的方式发生 在程序等待输入之前。什么构成交互式 设备是实现定义的。
这些统称为程序的可观察行为。
... 访问由 volatile glvalue (3.10) 指定的对象, 修改对象、调用库 I/O 函数或调用 执行任何这些操作的函数都是副作用,其中 是执行环境状态的变化。 ...
但是让我们采用如下的程序:
while (1) { }
// or
for (;;) { }
事实是没有对象或对函数的调用,因此没有副作用,因此没有“执行环境状态的变化”。是什么阻止编译器将此代码编译为
xorl %eax, %eax
retq
这一切都是不确定的吗?无限循环本质上是“这是一个标签,一遍又一遍地跳到它”,并将一直持续到计算机关闭。代码没有做任何有趣的事情,没有计算,没有 I/O 输出等。
在内核代码中,无限循环变得有趣。但在用户空间代码中,无限循环通常是程序编写不佳的标志。那么我的逻辑有什么缺陷呢?
【问题讨论】:
-
如果你在一个废弃的旧巴士站等车(为了好玩),如果有一辆巴士停下来会不会很奇怪?
-
您的问题是“为什么不这样做?”或“为什么不能这样做?” (或者两者都不是?)
标签: c++ halting-problem as-if