Другие языки программирования и технологии

Правда ли что ни одна действительно серьезная программа не обходится без безусловных переходов GOTO?

На низком уровне (на уровне кода, выполняемого процессором) , вообще не существует никакого иного способа перехода в другую точку программы, кроме как "goto".
Только называется оно на ассемблере по-другому. (jmp - безусловный переход, jz - переход, если результат равен нулю, jnz - переход, если результат не равен нулю, jc - переход, если результат меньше нуля, итд) . Но смысл именно такой: перейти в другое место, если условие выполняется. (предполагается, что если оно не выполняется, то выполнять следующую команду, и никуда не переходить) .
Так что в ядре и в драйверах только на goto всё и построено.

В языках высокого уровня сделана масса gotoзаменителей, (которые при переводе программы в машинный код все равно превращаются в те же goto, только высокоуровневый программер этого не видит)) . Это сделано для удобства чтения и упрощения понятности алгоритма.
Часто, однако, в ущерб эффективности алгоритма.
Часто одно goto вместо высокоуровневых заменителей способно ускорить работу алгоритма в разы.
Валентин ******
Валентин ******
6 568
Лучший ответ
Неправда.
В моем основном проекте на работе который более 280000 строк, и - ты не поверишь! - ни одного безусловного перехода!
А вот компилированный код - да, без JMP не обходится, даже у простых программ.
goto в любых программах стараются не использовать. Этот оператор мешает человеку понимать программы, компилятору - оптимизировать их, а для скорости исполнения кода - почти катастрофа. В связи с архитектурой современных процессоров, которые стараются предугадать, что придется делать, этот оператор означает - выкинь все, что заготовил и начинай сначала. Хотя в последних моделях процессоров стоит специальный блок для предугадывания повторяющихся переходов, но это лишь костыли коду-инвалиду. В принципе на самом низком уровне без явно указанных переходов не обойтись, но чем более на низком уровне они делаются, тем меньше потери и больше возможностей для внутренней оптимизации кода - не думай, что процессор исполняет все глупости, которые ему приказали совершить, даже если они написаны на ассемблере.
Егор *
Егор *
22 474
За такое вообще кастрируют через повешение.
Borisov Alex
Borisov Alex
18 743
Неправда
Есть много других способов убить читабельность исходников :))
ГоуТу среди программистов считается просто дурным тоном. ЕГо использование это прям как корырятся в носу на официальном обеде. Так что, думаю да =D
Алексей Zabolotnyy
Алексей Zabolotnyy
14 270
goto не советуют использовать . ведь можно и без него писать
нужно различать низкоуровневое программирование, типа ассемблера, и программирование на современных языках, типа С++, С# , Java. В первом случае действительно без переходов не обойтись, но там и выбора операций немного: инкремент, декремент, проверка условия, переход, ну может еще парочка. А во втором в языках специально заложена куча способов реализации алгоритмов. И вот в них уже путать логику всякими внезапными переходами очень нехорошо
Напиши программу с использованием кучи ГОУТУ и попробуй потом её отладить. Когда запутаешься и затрахаешься, сам ответишь на свой вопрос :)

Похожие вопросы