Ответ на пост «Понятное программирование»

А это goto

Ответ на пост «Понятное программирование» Картинка с текстом, Программирование, IT юмор, Обучение, Ответ на пост

IT-юмор

5.7K постов52.6K подписчика

Добавить пост

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

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

представляю какой был бы пиздец с ним :))

раскрыть ветку (12)
3
Автор поста оценил этот комментарий
Go-to очень удобный был, когда ООП не было. Сейчас хочешь go-to - дели код)
Всё. Ушел пить свои таблетки.
раскрыть ветку (11)
4
Автор поста оценил этот комментарий

Выход из вложенного цикла, переход к единому обработчику ошибок, переход к финализатору... Без goto многие вещи делаются через жопу, иногда дюже глубокую.

раскрыть ветку (10)
5
Автор поста оценил этот комментарий
Единый обработчик пишется мидлварой в микросервисе. Сложные синтаксические конструкции дробятся на логические единицы. Это вариант. Их много. Описанные Вами ситуации похожи на неверно подобранное решение задачи (паттерн).
Скажу по своему - дай дураку GOTO и он положит балансировщик своим адским монолитом. Если интересно, можете мне скинуть пример, в котором без GOTO по-вашему никак) Я пока не видел ни одной такой ситуации, хотя имею достаточный опыт в рефакторинге легаси-монолитов...
По-сути любое применение go-to дробит код на несколько фрагментов. Вы их не видите, как и того ада с условными ветвлениями, который городит компилятор...UPD...
раскрыть ветку (9)
3
Автор поста оценил этот комментарий

Сложные синтаксические конструкции не всегда состоят из нескольких более простых и способных выполнятся автономно. Иногда реализация алгоритма не может быть разбита на части из-за высокой связности данных. Да, можно извратиться и написать это без goto, потеряв 50-80 % производительности и постоянно гоняя данные туда-сюда, возвращая из функций по несколько мегабайт, но это именно извращение.

Ну и несколько нестандартный, но реальный пример вынужденного использования goto. У вас есть:

1) Расчётная программа на фортране, которая может 4 месяца подряд загружать 24-процессорный сервер на 98%.

2) Сбой в работе расчётного сервера, произошедший на 3 месяце работы программы.

3) В следствии п. 2, необходимость перенести расчёт на другую машину, не теряя прогресса расчёта.

4) Программист предусмотрительный, программа каждый час сохраняет своё состояние.

5) Однако из-за большой длительности итерации главного цикла (больше суток) сохранение происходит не в нейтральном состоянии программы, а где придётся. Иногда при сохранении в стеке более 60 вызовов функций.

6) Собственно, вопрос: как после старта программы передать управление нужной инструкции без использования goto, потратив на модификацию кода программы не больше 8 часов?

раскрыть ветку (8)
1
Автор поста оценил этот комментарий
Если где-то можно вставить go-to это можно разбить на 2 метода. В вышеописанном случае производительностью пренебрегают в угоду надёжности.
Если нужна адовая производительность - код можно реализовать на ассемблере (часть). Либо брать более мощный сервер.
В принципе проблема понятна, к сожалению с фортраном не знаком. Но выглядит стрёмно ибо включает в себя проблему девопса, которую пытается решить программист, что уже странно само-по себе. Описанная ситуация больше похожа на системную проблему работы команды, чем кода.
Но, уточню, я не имел дела с исследовательскими проектами и столь длительными рассчётами и аналитикой.
И ещё, go-to это не грех. Но, зачастую его используют вообще везде, и производительность может выигрывать, пока автор кода жив, или не уволился. А потом начинаются длительные потуги с разматывание макарон.
Да и я особо не видел в наше время, чтобы кто-то оптимизировал код до посинения. В последнее время все чаще покупают более мощные серверы. Ибо сервер стоит максимум 3 зарплаты разработчика. И это дешевле оптимизации в разы...
раскрыть ветку (7)
2
Автор поста оценил этот комментарий

Если нужна адовая производительность - код можно реализовать на ассемблере (часть).

Хороший компилятор Фортрана (ifort, например) выдаёт код более производительный, чем вручную написанный на ассемблере. Он может нагрузку на разные АЛУ балансировать, подгонять порции чтения данных по размер кешей и т.д.
Но выглядит стрёмно ибо включает в себя проблему девопса, которую пытается решить программист, что уже странно само-по себе.

Это гораздо стремнее, чем вам кажется, поскольку это проблема девопса, которую пытается решить учёный, делающий вид, что он программист. Научное программирование существенно отличается от программирования коммерческого тем, что часто программу писать не обязательно. Заказчику нужна не программа, а результаты расчёта, а как они получены ему вообще пофиг. Можно программу написать, можно чужой воспользоваться, можно руками посчитать, можно порыться в архиве и найти готовый результат... При этом как исполнители, так и заказчики не всегда могут заранее предвидеть необходимые затраты ресурсов на получение результата, с той программой на 4 месяца сначала предполагалось получить результат за пару дней, но потом выяснилось что процессы, на которые обычно можно забить, тут вносят слишком большой вклад.
И ещё, go-to это не грех. Но, зачастую его используют вообще везде, и производительность может выигрывать, пока автор кода жив, или не уволился. А потом начинаются длительные потуги с разматывание макарон.

В США есть одна могила, которую я при первой же возможности поеду осквернять.
Да и я особо не видел в наше время, чтобы кто-то оптимизировал код до посинения. В последнее время все чаще покупают более мощные серверы. Ибо сервер стоит максимум 3 зарплаты разработчика. И это дешевле оптимизации в разы...

Иногда не помогает. Для вышеописанной суперсчиталки максимум ядер, при которых затраты на синхронизацию меньше прибавки производительности около 120 ± 10 на разных процах и памяти. А роста тактовой частоты уже давно не видно.

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

проблема девопса, которую пытается решить учёный, делающий вид, что он программист.
Эта боль где-то за пределами шкалы Сковилла.

Автор поста оценил этот комментарий
Благодарю за развернутый ответ!
раскрыть ветку (4)
Автор поста оценил этот комментарий

Всегда пожалуйста! Специфику научного программирования мало кто понимает, это отрасль со своими тараканами, причём их как бы не больше, чем в программировании системном.

PS По goto у нас действует правило, что можно применять переход вниз или наружу, но нельзя вверх или внутрь, тогда код получается более-менее читаемый. И ни в коем случае не использовать вычисляемый goto, это прямой переход по адресу, что-то вроде перетащенного в язык ассемблерного оператора JMP.

раскрыть ветку (3)
1
Автор поста оценил этот комментарий

Просто вспоминаю джунов с предыдущего проекта. И если им отдать прелесть GOTO - было бы страшно. Вот и тригернуло меня). Вычисляемые Goto должны быть очень удобными, но я представляю себе уровень понимания алгоритмов и оптимизации, необходимый для его грамотного применения. А так-то один мороз по коже. Успехов Вам в ваших проектах)

Автор поста оценил этот комментарий

В вышеописанном примере же как раз внутрь… Исключительный случай?

раскрыть ветку (1)
Автор поста оценил этот комментарий

На вопрос: «Нарушаем гайдлайн или теряем 3 месяца расчётов?» начальник ответил «Да ***** в ***** этот ****** гайдлайн *****! А ты ***** *************** с ******* в ****, если такое спрашиваешь!»

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку