First, Consider No Harmful
sicpers.info
sicpers.info
—E. W. Dijkstra
What is a break;, continue; or return; statement but a goto?
The restricted semantics makes it interesting without going into "an authority said they're ok". Abstracting so that you can more easily reason about (and you can explain to others so that they can more easily reason about) the full state space something can operate in is a not terrible definition for engineering in general.
What better abstractions do you have?
(Actually your point is good I simply couldn’t resist the pun)
This is like saying "What is any function call but a goto?" Not a useful question.
Just because Hindley-Milner cannot catch all possible type-related problems, that doesn't make it a bad idea. Likewise structured programming cannot replace all uses of goto, but it would be ridiculous to go back to spaghetti code as the default setting.
I had a really cool internship fifty years ago (when I was sixteen.)
The group was doing pioneering electrocardiogram recognition (now the commomplace monitor beep beep beep). We had a bunch of scary-smart M.D.-Ph.D doctors figuring things out.
And I got to try to make sense of all their code and make it work together. I remember putting copies of Dijkstra's Damation article all over the place so those guys would read it.
They did read it. They liked it. They talked about it.
And then they started to be able to debug their stuff and get it working together.
Of you can use gotos in a way that do not break the structure, yet removing it from the language makes your usage correct by construction. Does the author not see value in that?
A break and continue statement is basically like a goto, and in some cases is more convenient since it automatically knows where the target is and you do not have to add a label there yourself. But, a return statement is not really the same as goto (although some instruction sets, such as MIX, implement it as such).