Tutti sono a conoscenza delle Lettere di Dijkstra all'editore: vai alla dichiarazione considerata dannosa (anche qui trascrizione .html e qui .pdf) e da quel momento c'è stata una spinta formidabile per evitare la dichiarazione goto ogni volta che è possibile. Sebbene sia possibile utilizzare goto per produrre codice non tentabile e tentacolare, rimane comunque nei moderni linguaggi di programmazione . Anche la struttura avanzata di controllo della continuazione in Scheme può essere descritta come un goto sofisticato.
Quali circostanze giustificano l'uso di goto? Quando è meglio evitare?
Come domanda di follow-up: C fornisce una coppia di funzioni, setjmp e longjmp, che forniscono la possibilità di andare non solo all'interno del frame dello stack corrente ma all'interno di uno qualsiasi dei frame chiamanti. Questi dovrebbero essere considerati pericolosi come goto? Più pericoloso?
Lo stesso Dijkstra si pentì di quel titolo, di cui non era responsabile. Alla fine di EWD1308 (anche qui .pdf) ha scritto:
Finalmente un racconto per la cronaca. Nel 1968, le Comunicazioni dell'ACM pubblicarono un mio testo sotto il titolo " La dichiarazione goto considerata dannosa ", che negli anni successivi sarebbe stata più frequentemente citata, purtroppo, tuttavia, spesso da autori che non ne avevano visto più titolo, che è diventato una pietra miliare della mia fama diventando un modello: vedremmo tutti i tipi di articoli sotto il titolo "X considerato dannoso" per quasi ogni X, incluso uno intitolato "Dijkstra considerato dannoso". Ma cosa era successo? Avevo presentato un documento sotto il titolo " Un caso contro la dichiarazione goto", che, per accelerare la sua pubblicazione, l'editore si era trasformato in una" lettera all'editore ", e nel frattempo gli aveva dato un nuovo titolo di sua invenzione! L'editore era Niklaus Wirth.
Un articolo classico ben ponderato su questo argomento, da abbinare a quello di Dijkstra, è la Programmazione strutturata con Go to Statements , di Donald E. Knuth. Leggere entrambi aiuta a ristabilire il contesto e una comprensione non dogmatica della materia. In questo documento, l'opinione di Dijkstra su questo caso è riportata ed è ancora più forte:
Donald E. Knuth: Credo che presentando un simile punto di vista non sia affatto in disaccordo con le idee di Dijkstra, dal momento che ha recentemente scritto quanto segue: "Per favore, non cadere nella trappola di credere che io sono terribilmente dogmatico su [il vai alla dichiarazione]. Ho la spiacevole sensazione che gli altri ne stiano facendo una religione, come se i problemi concettuali della programmazione potessero essere risolti con un solo trucco, con una semplice forma di disciplina del codice! "
goto
.