0

每个人都知道 Dijkstra 给编辑的信:转到被认为有害的声明(也在这里.html成绩单和这里.pdf)。我想知道是否有人试图通过添加任何其他语言扩展或开发允许 goto 的语言来找到一种使用 goto 可重用和可维护且无害的代码的方法。

我问这个问题的原因是我突然想到,用汇编语言编写的代码经常使用 goto 和全局变量来使程序在有限的空间内运行良好。Atari 2600有 128 字节的 ram,程序是从 ROM 盒加载的。在这种情况下,最好使用非结构化编程并充分利用这允许为程序充分利用非常有限的空间的自由。

当你将它与今天没有使用 goto 编程的游戏进行比较时,游戏会占用更多空间。

然后我突然想到,如果通过一些规则或其他语言更改来支持这一点,也许可以使用 goto 进行编程,那么可以减少或消除 goto 的负面影响。有没有人试图通过创建一种允许 goto 无害的语言或遵循的一些规则来寻找一种方法来使 goto 不被认为是有害的。

如果没有人寻找一种以无害方式使用 goto 的方法,那么也许我们仅仅基于这篇论文就不必要地采用了结构化编程?也许还有另一种解决方案允许使用 goto 而没有不利的一面。

4

2 回答 2

2

将 goto 与结构化编程进行比较,就是将程序员必须记住代码中每个标签的实际含义和作用以及在哪里存在的情况与明确描述条件分支的情况进行比较。

至于 gotostatement在程序可能占用的位置方面的优势,我认为今天的游戏很大,因为它们使用了图形和声音资源。也就是说,显示 1,000,000 个多边形。与此相比,goto 的成本完全可以忽略不计。

而且,结构语句最终goto在输出汇编时被编译器编译成(“jmp”)语句。

要回答这个问题,可以通过创建命名和语法约定来降低 goto 的危害。然而,将这些约定强制执行到规则中几乎就是结构化编程所做的事情。

Linus Torvald 曾经辩称goto 可以使源代码更清晰,但是 goto 在非常特殊的情况下很有用,以至于我不敢作为程序员使用它。

于 2012-09-05T10:21:30.827 回答
0

This question is somehow related to yours, since I think this one of the most common situations where a goto is needed.

于 2012-09-07T09:25:50.780 回答