Ответ на пост «Понятное программирование»
А это goto
А это goto
иногда думаешь, ну где этот блядсский goto дели, щас бы раз и решил местный тупичок ...
представляю какой был бы пиздец с ним :))
Выход из вложенного цикла, переход к единому обработчику ошибок, переход к финализатору... Без goto многие вещи делаются через жопу, иногда дюже глубокую.
Сложные синтаксические конструкции не всегда состоят из нескольких более простых и способных выполнятся автономно. Иногда реализация алгоритма не может быть разбита на части из-за высокой связности данных. Да, можно извратиться и написать это без goto, потеряв 50-80 % производительности и постоянно гоняя данные туда-сюда, возвращая из функций по несколько мегабайт, но это именно извращение.
Ну и несколько нестандартный, но реальный пример вынужденного использования goto. У вас есть:
1) Расчётная программа на фортране, которая может 4 месяца подряд загружать 24-процессорный сервер на 98%.
2) Сбой в работе расчётного сервера, произошедший на 3 месяце работы программы.
3) В следствии п. 2, необходимость перенести расчёт на другую машину, не теряя прогресса расчёта.
4) Программист предусмотрительный, программа каждый час сохраняет своё состояние.
5) Однако из-за большой длительности итерации главного цикла (больше суток) сохранение происходит не в нейтральном состоянии программы, а где придётся. Иногда при сохранении в стеке более 60 вызовов функций.
6) Собственно, вопрос: как после старта программы передать управление нужной инструкции без использования goto, потратив на модификацию кода программы не больше 8 часов?
Если нужна адовая производительность - код можно реализовать на ассемблере (часть).
Хороший компилятор Фортрана (ifort, например) выдаёт код более производительный, чем вручную написанный на ассемблере. Он может нагрузку на разные АЛУ балансировать, подгонять порции чтения данных по размер кешей и т.д.Но выглядит стрёмно ибо включает в себя проблему девопса, которую пытается решить программист, что уже странно само-по себе.
Это гораздо стремнее, чем вам кажется, поскольку это проблема девопса, которую пытается решить учёный, делающий вид, что он программист. Научное программирование существенно отличается от программирования коммерческого тем, что часто программу писать не обязательно. Заказчику нужна не программа, а результаты расчёта, а как они получены ему вообще пофиг. Можно программу написать, можно чужой воспользоваться, можно руками посчитать, можно порыться в архиве и найти готовый результат... При этом как исполнители, так и заказчики не всегда могут заранее предвидеть необходимые затраты ресурсов на получение результата, с той программой на 4 месяца сначала предполагалось получить результат за пару дней, но потом выяснилось что процессы, на которые обычно можно забить, тут вносят слишком большой вклад.И ещё, go-to это не грех. Но, зачастую его используют вообще везде, и производительность может выигрывать, пока автор кода жив, или не уволился. А потом начинаются длительные потуги с разматывание макарон.
В США есть одна могила, которую я при первой же возможности поеду осквернять.Да и я особо не видел в наше время, чтобы кто-то оптимизировал код до посинения. В последнее время все чаще покупают более мощные серверы. Ибо сервер стоит максимум 3 зарплаты разработчика. И это дешевле оптимизации в разы...
Иногда не помогает. Для вышеописанной суперсчиталки максимум ядер, при которых затраты на синхронизацию меньше прибавки производительности около 120 ± 10 на разных процах и памяти. А роста тактовой частоты уже давно не видно.
проблема девопса, которую пытается решить учёный, делающий вид, что он программист.Эта боль где-то за пределами шкалы Сковилла.
Всегда пожалуйста! Специфику научного программирования мало кто понимает, это отрасль со своими тараканами, причём их как бы не больше, чем в программировании системном.
PS По goto у нас действует правило, что можно применять переход вниз или наружу, но нельзя вверх или внутрь, тогда код получается более-менее читаемый. И ни в коем случае не использовать вычисляемый goto, это прямой переход по адресу, что-то вроде перетащенного в язык ассемблерного оператора JMP.
Просто вспоминаю джунов с предыдущего проекта. И если им отдать прелесть GOTO - было бы страшно. Вот и тригернуло меня). Вычисляемые Goto должны быть очень удобными, но я представляю себе уровень понимания алгоритмов и оптимизации, необходимый для его грамотного применения. А так-то один мороз по коже. Успехов Вам в ваших проектах)
На вопрос: «Нарушаем гайдлайн или теряем 3 месяца расчётов?» начальник ответил «Да ***** в ***** этот ****** гайдлайн *****! А ты ***** *************** с ******* в ****, если такое спрашиваешь!»
IT-юмор
5.7K постов52.6K подписчика
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору