реклама
разместить
Польза goto в C++

TL;DR: Дейскстра учился писать код с goto, научился, раскритиковал применение goto, учебные программы усложнили т.к. “так сказал великий Дейкстра”, учить детей программированию стало сложнее.

Польза goto в C++
1212
реклама
разместить

Если это не на 1 апреля то:
1) То есть Дийкстра и другие воспарили из-за goto ? А может вопреки?

2) Каким образом это помогает понять на интуитивном уровне? Очень удобно наверное понимать как и куда прыгает что-то верно? При том что прыгнуть оно может вообще куда угодно?

3) Нет плохих языков. Язык это инструмент. Он решает задачи. Ненужно говорить что болгарка это плохой молоток. И у С++ хватает проблем причем их на столько много что диву даешься и авторы стандартов уже головы ломают как эту мусорку чинить оставляя обратную совместимость

4) Вы так отлично говорите о быстрых языках программирования что забываете что сами себя облапошили с goto. А теперь давайте вместе угадывать на сколько удобно будет процессору предиктить куда же прыгнет goto и при этом заранее положить в кеш или стэк даже не говоря о том чтобы прям в конвеере иметь инструкции дальнейшие. Там может быть все на столько неожидано что придется обращаться к хипу и тогда замечательно побежит ваша производительность. Просто шикарно!

При этом ваши разговоры о том что сейчас это десятки строк с циклами и тд...вы серьезно? А вы не думали что циклы отлично параллелятся на процессоре например? А как параллелится ваш не предиктивный goto для компилятора?

4

Понимать как исполнитель прыгает из строки с goto xxx в строку с xxx: очень просто, совпадение xxx в обеих строках интуитивно понятно обладателям интеллекта.

1

Не из-за или вопреки goto, а благодаря тому, что в начале обучения никто не прикладывал усилия для того, чтобы они вместо использования минимального базиса для создания любых программ в первый же день обучения, занимались освоением широкого базиса, который хоть и позволяет выразить эквивалентные алгоритмы, накладывает искусственные ограничения и требует больше времени для изучения.

Какого широкого? Узнать пару циклов, свич и тд? Это дофига широко согласен. Минимальный базис в виде goto даст лучше выразить эквивалентный алгоритм? Да что за дичь я читаю гсоподи. Да иногда goto удобен но это крайне иногда в большинстве алгоритмов goto ненужен при этом без потери выразительности и при этом с большей читабильностью. При этом нормальный код это не "умно сделанный" код а баланс между быстротой и поддерживаемостью и читабильностью. С goto ты в лучшем случае чуть чуть выйграешь в компактности кода и потеряешь во всем остальном.

Сколько дней ты изучал с++ и писал hello world прежде чем сумел написать на нем простенькую 2д игру и сколько тебе было тогда лет?

недели 2-3 и было лет 17-18

А вот было бы круто, если бы ты смог сделать это за 1 день и было тебе тогда лет 6-8

1

Но вопрос некорректен так как у меня был базис паскаля

То есть целых 2-3 недели ты изучал язык чтобы понять этот самый широкий базис, вместо того чтобы изучить минимальный базис и получить безграничные возможности, а далее лишь изучать способы улучшить читаемость и сопровождаемость кода?

Я и так получил безграничные возможности изучив базис языка делав при том нормальные игры с читабильным кодом котоырй я смогу поддерживать. Делая играбильную игру а не те ссылки что ты кидал. Которые особенно для 6-8 летнего не интересны абсолютно. Где что-то прыгает в терминале

Как раз наоборот, 6-8 летним все равно, прыгает там буква или 3д Марио, у них воображение работает на полную катушку, и это я из опыта обучения 5-8 летних детей говорю а не выдумываю

Ты работал с 6-8 летними? Я да. Им похер. Ладно в мои 6-8 лет там было бы мне весело. Потмоу что тогда и технологии и все остальное были далеко позади. Мне было весело тогда что что-то прыгает в терминале. Но сегодняшним 6-8 летним далеко плевать. Им даже в майнкрафте механизмы будет интереснее собирать из поршней и редстоуна.

Это самое смешное, в майнкрафте собирать механизмы сложнее чем писать игры на C++. Как только дети это понимают, их отношение к программированию меняется. Это не сложно, нудно и непонятно, а очень просто, весело и интересно

Ничего глупее не слышал. С++ один из самых комплексных мейнстримных языков а ты мне говоришь что создание чего-то из редстоуна сложнее?

Да. Именно так.

Понимаю. Тогда разговор можем не продолжать)

С++ один из самых комплексных мейнстримных языковПочему ты (и не только ты) сравниваешь весь С++ с Майнкрафт, а не ту часть, что предлагает автор на начальных этапах обучения?

Потому что детям это весело. Потому что детям не весело смотреть как просто текст в консоли сложными путями выходит. Им интереснее когда просто и эффектно. А дальше можно заинтересовать

Разве в Майнкрафте не приходится собирать из блоков И и ИЛИ? Т.е. это уровень даже ниже, чем ассемблер. Или там есть и скриптовый язык?

Нет ничего ниже чем ассемблер. Но всегда быстрее учишься тогда когда тебе интересно. И люди делают простейшие механизмы. Берут смотрят уроки на ютуб и тд. И начинают понимать это уже на интуитивном уровне

Ниже ассемблера - это когда из блоков собираешь процессор в Майнкрафте, я про это. Видел, как кто-то собирал элементы И и ИЛИ и сделал из них калькулятор.

Это не ниже процессора это обычная булева логика. Да делали лбди калькуляторы. Но детям хватает сделать какой-нибудь механизм что откроет дверь

Вот представь, ребенок тратит сотни часов, в совершенстве овладевает созданием механизмов в майнкрафте, а теперь перед ним возникает новая задача: взять какой-нибудь нормальный язык программирования и написать на нем игру. Хотя бы тетрис. И вот тут оказывается, что все эти часы в майнкрафте плохо ему не помогают. Перед ним книжки, которые нужно прочесть до 200-ой страницы прежде чем получится вывести на экран строку текста через cout и ввести другую строку через cin, что все еще бесконечно далеко от тетриса... тогда вменяемый ребенок смотрит на игровые движки типа unity и оказывается, что нужно не просто уметь писать код, но и понимать как работает движок, а сделать на нем тетрис настолько сложно, что лучше даже не начинать, и ребенок не начинает, он берет unreal engine и делает на нем шутер, ну то есть расставляет врагов по сгенерированному уровню. Итак, потрачены сотни часов, программировать человек как не умел так и не научился.

Ему они и не должны помогать. Они должны заинтересовать. Программист всегда учится. На твоем примере можно сказать "представь что ребенок учится делать игры и учит С++ а это ему нифига не помогает так как надо научится еще и шейдеры писать научится понимать тот же директХ алгоритмы и структуры данных и так далее". И для того чтобы написать тетррис и взять юнити даже кодить уметь ненадо. Есть визуальный язык программирвоания что в юнити что в анрил. Не говоря уже о всяких гейм мейкерах. Важно заинтересовать ребенка чтобы ему было интересно этому ХОТЕТЬ обучится.

И не важно сколько часов потратит человек. Важно чтобы ему было интересно. Если тебе не интересно то даже простые вещи будут длится те же самые сотни часов. Вспомни как ты чему-то учился в школе. Как быстро ты понимал что-то и изучал когда был хороший учитель или интересная тебе тема и когда было то что тебе не интересно?

Вот в том и дело, что заинтересовать недостаточно, это лишь необходимо

как-то у меня не укладывается....не достаточно но необходимо. Ну как бы да...да? Все верно. Но только это необходимо. Все верно. Если не заинтересуешь то все - пиши пропало.

Но если заинтересуешь майнкрафтом, этого не достаточно для того, чтобы человек научился программировать.

Это достаточно чтобы заинтересовать и продолжить дальше. Например взять гейм мейкер или тот же годот. В котором есть и блочное программирование и скриптовый язык доволньо простой. А не С++ в терминале

То есть ты тратишь сотню часов в майнкрафте чтобы заинтересовать и потом этот опыт выбрасываешь и снова тратишь сотню часов в гейм мейкере, чтобы потом сказать, что в нем нельзя сделать ни 3д шутер типа Doom ни стратегию типа старкрафта ни рпг типа Skyrim ? Ок, и потом все равно выбросить все и начать изучать что?

Да все так. Так и работает обучение. Ты идешь по ступенькам не возвращаясь назад. А ты решил сразу Unreal Engine изучать? Удачи братан.

Не что-то простое можно вот в юнити набросать там тоже визуальный скриптинг есть.

Да и 3д шутер можно сделать в целом в геймейкере. Да и в одно рыло ты ни шутер как дум не сделашеь ни стратегию как старкрафт ни скайрим.

Ты для начала сделай хоть что-то похожее на игру а потом иди дальше. Ты слишком высоко целишь. Ты как мой друг которого я учил рисовать и он сразу себе купил планшет синтик и пытался рисовать в фотошопе, говоря что так делают профессионалы. Но ты сначала рисовать научись. А фотошоп и синтик это уже инструмент для профессионала, они только мешать будут в начале(разве что синтик добавит чуть чуть больше удобства и то спорно)

Вот смотри, после майнкрафта программировать не умеют люди и игру сделать не могут. После написания первых 3-4 программ на C++(музыка/рисование, синтезатор, игра) люди могут программировать и уже сделали одну игру. После 100 часов майнкрафта они умеют играть в майнкрафт, но не умеют делать игры и им это сложно. После 100 часов программирования на С++ они умеют делать разные игры и им это легко.

1. Я сказал заинтересовать майнкрафтом тем же и работать как с программированием а не делать на нем игру

2. Написание вышеперечисленных программ (музыка/рисование/синтезатор/игра) займет у тебя пару лет если изучать все это с нуля. Ну или если ты уже увлечен и сидишь сам занимаешься не меньше полу года. И это будет максимально простые вещи а не что-то серьезное. Но это если ты сам уже увлечен и заинтересован.

3. После 100 часов программирования на С++ ты уверен что ты сможешь хотябы одну игру написать? Не говоря уже про то чтобы делать "разные игры" и чтобы "им это было легко"?

Какую-то фантастику ты рассказываешь

Ого! 2 года! Хорошо, что мы не спрашивали тебя, а просто брали и писали код и у нас ушло 2 вечера вместо 2 лет.

2 вечера на игру в терминале? Или что это за игра? И что это за музыка/минтезатор/рисование? Если это максимально простые фигни то да вопросов нет можно взять библиотечку и нажать play. Но это не я тут в пример приводил дум, скайрим и так далее

Так в этом вся разница: из майнкрафта дум не делается никак. А из простой 2д игры - выйдет, можно сначала сделать игру в 2д, изучить 3д графику и поменять тип графики в игре, при этом 2д изображение даже останется в игре в качестве карты. Разница именно в том что начав делать игру на C++ ее возможно доделать, независимо от того что это за игра. Нет таких игр которые в принципе возможно сделать и при этом нельзя сделать на С++

1

Я хз претворяешься ты или как. Ты по кругу ходишь. Прочитай выше я уже об этом все говорил. Буквально на все такие же вопросы все уже ответил. А ты по кругу идешь

Вопросы? В сообщении на которое ты ответил вопросов не содержится

Но вопрос вообще непонятен к чему это? Для начала выучи базовые вещи языка а затем уже бери движок и изучай

Верно. Базовые вещи языка - int, if и goto. Это базис. Выучивается за 3 минуты. И дальше изучай библиотеку.

Процессору максимально удобно предсказывать куда прыгнет goto, это связано с тем, что место перехода известно не только во время выполнения, оно известно на этапе компиляции и явно указано в результирующем машинном коде. Безусловный переход предсказывается со 100% точностью, ведь заранее известно что он произойдёт и процессор может начать спекулятивное выполнение кода расположенного после точки перехода.

Есть плохие языки. Язык это инструмент, созданный для решения определенных задач. Как отвертка. Хорошая отвертка сделана из высокопрочного сплава и ее передают из поколения в поколение, от деда внукам, а плохая сделана из незакаленного железа и деформируется еще до того как ей закрутят первую гайку. Так и плохие языки сделаны для того же, для чего и хорошие, но сделаны плохо: программы на них работают медленно, многие вещи вообще нельзя написать, в процессе развития между версиями 2 и 3 одного языка возникает полная несовместимость.

[]