Различия между сопрограммами и goto?
Вопрос
Я всегда читаю об ужасной вещи «гото».Но сегодня, читая о языке программирования Google Идти, я вижу, что он поддерживает Coroutines (Горутины).
Вопрос в том:
Coroutine == GoTo
Или
Coroutine != GoTo?
Почему?
Решение
Горутины — это не то же самое, что goto — они выполняются параллельно с основным кодом.Когда вы заявляете что-то вроде (из их примера на http://golang.org/doc/efficient_go.html)
go list.Sort(); // run list.Sort in parallel; don't wait for it.
основной код продолжает работать - он не ждет завершения сортировки.Процедура сортировки запускается в собственном облегченном потоке выполнения, и когда она завершает сортировку, поток завершается.
Переход к переходу приведет к тому, что основной код перейдет на отдельный путь выполнения, поэтому операторы после goto
никогда бы не сбежал.
Другие советы
Ключевое отличие состоит в том, что goto
операторы на языках, которые их поддерживают, позволяют переходить в любое место программы практически без ограничений.Хотя сопрограммы на первый взгляд могут показаться похожими, на самом деле они очень разные.
Сопрограммы позволяют приостанавливать процедуры (со всем их контекстом) и возобновлять их. определенный локации.Итак, пока сопрограммы делают паузу и yield
контроль над другими процедурами до того, как они завершатся, а затем возобновятся позже, точки, в которых процедуры завершаются и возобновляются, известны заранее.
Невозможно просто перейти к произвольной строке процедуры, рассматриваемая процедура должна ожидать возобновления в определенном месте.Хотя эта передача контроля гораздо более структурирована, чем при goto
злоупотребляя этим мощным механизмом, можно написать запутанный код.Опять же, разве это не относится к каждой мощной функции языка программирования?;-)