Юмор людей ненавидящих goto, но не написавших ни одной программы длиннее 1000 строк?
чувак, ты только в обморок не падай: есть языки вообще без переменных
На ум приходит только Ассемблер. Есть еще что-то?
Учебный язык ники, брейнфак
В брейнфаке есть переменные, включая переменные циклов, собственно, поинтер указывает на текущую переменную.
чиво блять? в asm нет переменных? ну ты и мудак
не в кажом языке ассемблера они есть - в некоторых у тебя только набор регистров - сиди и наслаждайся ими
хаскель
нет переменных в том смысле, что там ничего никогда не меняется.
такие программы умеют только отвечать на вопросы (потенциально очень сложные) и кто-то снаружи должен их использовать, в стиле: «скажи, а что мне делать в ответ на такую ситуацию»? получается, что можно эту сторону, которая совет спрашивает и реально что-то делает, сделать очень простой, и сосредоточиться на основной программе, в которой нет переменных. подход называется «функциональный язык программирования».
не знаю, так ли это на самом деле, это я из головы придумал, ну а как еще с другой стороны это может быть?
такие программы умеют только отвечать на вопросы (потенциально очень сложные) и кто-то снаружи должен их использовать, в стиле: «скажи, а что мне делать в ответ на такую ситуацию»? получается, что можно эту сторону, которая совет спрашивает и реально что-то делает, сделать очень простой, и сосредоточиться на основной программе, в которой нет переменных. подход называется «функциональный язык программирования».
не знаю, так ли это на самом деле, это я из головы придумал, ну а как еще с другой стороны это может быть?
Prolog
Ну конечно же они там есть, в виде ссылок на выделенные области памяти. db, dw, set и т.д., ты даже можешь им имена назначить для удобства.
юмор людей, которые знают что в некоторых языках можно писать в стиле
fOr i tO X
fOr i tO X
Зачем ты плохому людей учишь? Сейчас у кого-то откровение случится, а потом ему на код ревью лицо за такое написание набьют.
Зачем goto, если есть switch?
надо отметить, что использование switch "по книге" является не очень хорошим действием. Все еще лучше чем goto, но уже не очень хорошим.
А вообще goto не_нужен. Кроме, может быть, низкоуровневых оптимизаций - за них мне сказать нечего.
Потому что, по сути, он решает следующие задачи.
Переход в предыдущее место кода(решается циклами и рекурсией)
Переход в определенное место кода по условию(решается if и switch)
Выход из цикла до его завершения, либо прерывание итерации цикла (решается break, continue и return)
Иными словами, есть средства, которые делают то же самое и при этом не превращают код в спагетти.
А вообще goto не_нужен. Кроме, может быть, низкоуровневых оптимизаций - за них мне сказать нечего.
Потому что, по сути, он решает следующие задачи.
Переход в предыдущее место кода(решается циклами и рекурсией)
Переход в определенное место кода по условию(решается if и switch)
Выход из цикла до его завершения, либо прерывание итерации цикла (решается break, continue и return)
Иными словами, есть средства, которые делают то же самое и при этом не превращают код в спагетти.
Выход из четырёх вложенных циклов? goto в теле цикла и метка сразу после окончания самого первого. Спагетти будет не больше, чем при использовании четырёх break.
во многих языках break с меткой можно делать.
Как по мне, в подобных случаях лучше циклы упаковать в функцию и вместо break поставить return
Выйти из функции досрочно с возвратом кода ошибки и освобождением временно занятых ресурсов:
int
funcname(int arg)
{
... {
error=EIO; goto bailout;
}
...
return 0;
bailout:
free(res1);
free(res2);
free(res3);
return (error);
}
В языке C нет деструкторов как в C++.
int
funcname(int arg)
{
... {
error=EIO; goto bailout;
}
...
return 0;
bailout:
free(res1);
free(res2);
free(res3);
return (error);
}
В языке C нет деструкторов как в C++.
пс, чувак, за последние 40 лет появилось 100500 языков, отсыпать?
И у этих языков проблемы ещё похлеще, чем у C. И это неизбежно, так как большинство новых языков появились вовсе не потому, что они заточены под какие-нибудь предметные области (хотя некоторые да, как ранние версии perl для обработки текста), а только потому что программисты становились всё более тупыми, так как бизнесу требовались именно такие. Но чудес не бывает и у тупых программистов проблемы будут и с шаблонами C++, и с классами/деструкторами и с любыми другими языковыми средствами и сахаром. Просто потому что они тупые.
В основном с утечкой памяти, но кого это интересует при наличии 16ГБ и более оперативки?...
илитарий дохуя?
ни один инженер не будет делать изделие из говна и палок просто потому, что может.
всегда было интересно, откуда среди программистов берутся такие припадальщики к корням?
да, добавляется сахар. так он и в плюсы добавляется, только мееедленно, и с учетом совместимости с кучей херни, которая там накопилась за десятилетия.
шаблоны C++ ты ваще зря приводишь в пример. это эталонный пример говна, которое стали юзать не так, как задумывалось, тормозное, и хуёво дебажимое.
ни один инженер не будет делать изделие из говна и палок просто потому, что может.
всегда было интересно, откуда среди программистов берутся такие припадальщики к корням?
да, добавляется сахар. так он и в плюсы добавляется, только мееедленно, и с учетом совместимости с кучей херни, которая там накопилась за десятилетия.
шаблоны C++ ты ваще зря приводишь в пример. это эталонный пример говна, которое стали юзать не так, как задумывалось, тормозное, и хуёво дебажимое.
Да какая разница? Ну, будет у тебя там не free(res1), а res1.destructor(). Ну, или, чтобы отвязаться от вопроса памяти, представь себе длинную функцию, в конце которой вызывается какая-нибудь дополнительная функция, например - recalc() и вот ты уже вынужден оборачивать функцию в другую функцию, чтобы этот recalc() отработал. А еще ты должен в этот return засунуть коды возврата - а ну как этот recalc() должен отрабатывать не всегда? И понеслось...
Заменить goto конечно можно, но это действие зачастую ухудшает, а не улучшает читаемость кода. Например, ты предлагаешь return вместо goto. Это понятная замена, но если в конце функции есть еще какой-то "хвост", который должен отработать, то придется делать две вложенные функции. А если есть ветвление, хоть минимальное, то три и более.
Только не говори, что ты используешь goto в программе в 1000 строк.
В модуле компиляции может быть и больше строк, и сотня отдельных функций, часть использует goto.
По неочевидной причине рассматривал код gcc. Там goto встречается предельно редко по отношению к остальному коду.
Как это и должно быть.
просто всякие дауны даже не подозревают во что компилируется их красивый switch особенно адепты явы, которые даже не в курсе, чем там занимается JIT пока они мамкины програмисты
а теперь вопрос взрывающий пуканы, чем отличается GOTO поставленный компилятором, от GOTO поставленного человеком?
и да, шутка тоже от дауна, на второй картинке должны сидеть регистры, так как во всех языках програмирования глобальные переменные сидят в той же области памяти что и локальные, а ограничения на адресацию создаются компилятором, при большом желании и куче свободного времени можно бегать по стеку и читать локалки левых процедур.
а теперь вопрос взрывающий пуканы, чем отличается GOTO поставленный компилятором, от GOTO поставленного человеком?
и да, шутка тоже от дауна, на второй картинке должны сидеть регистры, так как во всех языках програмирования глобальные переменные сидят в той же области памяти что и локальные, а ограничения на адресацию создаются компилятором, при большом желании и куче свободного времени можно бегать по стеку и читать локалки левых процедур.
тем, что го-то поставленный компилятором будет поставлен к месту, и, что немаловажно, не снизит читаемости кода.
И не надо кукарекать про частные случаи. Использование goto _может_быть_ оправдано в единичных случаях, но _обычно_ он используется где не надо, когда не надо, и что самое главное - как не надо.
И не надо кукарекать про частные случаи. Использование goto _может_быть_ оправдано в единичных случаях, но _обычно_ он используется где не надо, когда не надо, и что самое главное - как не надо.
Есть класс программ, которые к хуям ломают все оптимизации (и логику, и вселенную, и Аллаха). Получить такую можно только с помощью goto даже в пределах одной функции и не так сложно как кажется (минимальный пример где-то 5 строчек). Компиляторы такой код тупо не генерируют. А все кейсы, которые ничего не ломают прекрасно заменяются стандартными операторами.
Ломающая всё программа выглядит как-то так, но могу соврать:
if(isOk) goto a:
for x in xs {
a: print x
}
И это простейший случай, с ворохом continuations, coroutines и closures всё становится ещё хуже
Ломающая всё программа выглядит как-то так, но могу соврать:
if(isOk) goto a:
for x in xs {
a: print x
}
И это простейший случай, с ворохом continuations, coroutines и closures всё становится ещё хуже
Внимание, ответ.
Тем, что кода читают до, а не после компиляции. Ты ещё скажи, что в ассемблере всегда jmp используется, значит и goto можно.
Существуют такие понятия, как читаемость кода, проектирование ПО, расширяемость и поддерживаемость ПО, методологии разработки. И всё это летит к хуям, когда какой-нибудь даун начинает его использовать.
Нет, конечно, когда ты пишешь что-то один и для себя, тебе никто не может запретить его использовать. Нравится обмазываться говном? Пожалуйста! Читать и модифицировать это всё равно тебе.
Тем, что кода читают до, а не после компиляции. Ты ещё скажи, что в ассемблере всегда jmp используется, значит и goto можно.
Существуют такие понятия, как читаемость кода, проектирование ПО, расширяемость и поддерживаемость ПО, методологии разработки. И всё это летит к хуям, когда какой-нибудь даун начинает его использовать.
Нет, конечно, когда ты пишешь что-то один и для себя, тебе никто не может запретить его использовать. Нравится обмазываться говном? Пожалуйста! Читать и модифицировать это всё равно тебе.
Да, компилятор превращает все циклы в GoTo.
Тем не менее, компилятор проделывает все возможные оптимизации.
Если программист сам напихает GoTo, то компилятор просто не сможет выполнить какие-то оптимизации.
Так как код будет спагетти.
Да еще и отлаживать код, который напичкан GoTo, то еще удовольствие.
GoTo можно лишь использовать для эмуляции недостающего функционала. Вот, например, в VBA нету break и continue и приходится писать GoTo, что бы выпрыгнуть из цикла.
В Си GoTo могли использоваться, что бы прыгать в обработчики ошибок.
Тем не менее, компилятор проделывает все возможные оптимизации.
Если программист сам напихает GoTo, то компилятор просто не сможет выполнить какие-то оптимизации.
Так как код будет спагетти.
Да еще и отлаживать код, который напичкан GoTo, то еще удовольствие.
GoTo можно лишь использовать для эмуляции недостающего функционала. Вот, например, в VBA нету break и continue и приходится писать GoTo, что бы выпрыгнуть из цикла.
В Си GoTo могли использоваться, что бы прыгать в обработчики ошибок.
сука я этот срач помню четверть века назад. )
Тссс. Ты мешаешь людям блеснуть эрудицией.
Древнее зло пробудилось...
http://govnokod.ru/search?search=goto&page=1
http://govnokod.ru/search?search=goto&page=1
Чтобы написать коммент, необходимо залогиниться