D'altra parte è risaputo che anche nel kernel Linux si fa ampio uso di goto, eppure sono quasi vent'anni che esiste e sta ancora là. Torvalds difende il goto dicendo che tutto sommato "is fine", a volte può rendere il tutto più leggibile se ricorrendovi si riescono ad evitare magari 8 livelli di indentazione e roba simile ([ot]e da questo punto di vista non ho mai capito - sarà ignoranza mia - perché mai il C99 ha portato il numero massimo di blocchi nidificati da 15 a 127 e il numero massimo di istruzioni condizionali nidificate da 8 a 63... una forma di tolleranza per gli psicopatici?[/ot]).

In fondo è sempre così, basta non abusare di niente. Stessa storia anche per le "famigerate" friends functions in C++ (come si legge nella FAQ relativa all'argomento tra quelle linkate da shodan in firma).
Anche io non ho mai fatto uso di una goto in una riga di codice. Certo, non che abbia prodotto chissà cosa, ma di codice ne ho scritto un bel po' e non mi sono mai visto costretto a ricorrere a goto. In realtà forse perché anche io sono stato "brainwashed by CS people who thought that Niklaus Wirth actually knew what he was talking about." quindi ho sempre avuto il "terrore" di usarli, but meh. Come dicevo, sono sempre riuscito a sopravvivere senza.

Insomma forse è positivo che un linguaggio consenta il ricorso ad alcune caratteristiche potenzialmente pericolose, viene lasciato tutto all'intelligenza del programmatore. Poi vabbè ne esistono altri concepiti per programmatori decerebrati la cui filosofia è "no no! Questo non si fa" e quindi eliminano i goto, le variabili globali (anche se alla fine è possibile ricorrervi lo stesso), le funzioni friend, l'aritmetica dei puntatori, l'ereditarietà multipla, la gestione dinamica della memoria, l'overloading di operatori e tutto ciò che potenzialmente potrebbe essere pericoloso o potrebbe rendere il codice troppo "complicato", un po' come dire "tenere fuori dalla portata dei bambini".