2012-09-05 42 views
0

每個人都知道迪傑斯特拉的信給編輯:go to statement considered harmful(也在這裏.html成績單和這裏.pdf)。我想知道是否有人試圖通過添加任何其他語言擴展或開發允許goto的語言來找到使用goto的可重用且可維護且無害的代碼的方法。Goto被認爲是有害的,但是有沒有人試圖使用goto重新使用和維護代碼?

我問這個問題的原因是,我發現用匯編語言編寫的代碼經常使用goto和全局變量來使程序在有限的空間內正常工作。其中有128字節RAM和程序的Atari 2600是從ROM盒式磁帶加載的。在這種情況下,最好使用非結構化編程,並充分利用這些自由,從而充分利用該程序的非常有限的空間。

當您將此遊戲與不使用gotos的今日編程遊戲進行比較時,遊戲會佔用更多空間。

然後,我發現,如果爲了支持這些規則或其他語言的變化而使用gotos進行編程,那麼可能會減少或消除gotos的負面影響。有沒有人試圖找到一種方法,讓goto的NOT被認爲是有害的,通過創建一個語言或一些規則遵循,這使得gotos是無害的。

如果沒有人以無害的方式尋找方法來使用gotos,那麼我們是否可能採用結構化編程而不必僅僅基於本文?也許還有另一種解決方案可以在沒有反面的情況下使用gotos。

回答

1

將gotos與結構化程序設計相比較,就是比較程序員必須記住代碼中的每個標籤實際上意味着什麼以及在哪裏存在的情況,以明確描述條件分支的情況。

由於goto statement關於程序可能需要的優勢,我認爲今天的遊戲很大,因爲它們使用圖形和聲音資源。也就是說,顯示100萬個多邊形。與此相比,goto的成本完全可以忽略不計。

此外,編譯器在輸出彙編時最終將結構語句編譯爲goto(「jmp」)語句。

要回答這個問題,可以通過創建命名和語法約定來減少危害。然而,將這些約定強制變爲規則幾乎是結構編程所要做的。

Linus Torvald argued once goto可以使源代碼更清晰,但goto在非常特殊的情況下非常有用,我不敢將它用作程序員。

0

This question與您的設備相關,因爲我認爲這是需要goto的最常見情況之一。