Comments 55
Команда разработчиков решила вставить в код хак и выполнила хитрый маленький трюк: #define const, чтобы константа была… ничем, пустым местом. Поэтому конструкция const int x; при предварительной обработке перед компиляцией становилась int x;
Забыли ещё #define private public из кода ID Software
#define true false // happy debugging
Вообще, у меня как у паскалиста всегда возникает истерика при виде такого препроцессинга. Это даже не выстрел в ногу, это выворот себя наизнанку в надежде, что заработает хотя бы вот так.
#define const, чтобы константа была… ничем, пустым местом.
Лично я ужасно ненавижу CONST
Дичь какая. Разработчику игр вроде бы как раз неплохо знать, хотя бы в общих чертах, что константность влияет в тч на оптимизации, выполняемые компилятором?
Upd: Ну и не знаю как они при таком трюке не схватили ошибку компиляции для перегрузок вида:
#define const
void foo(const int*);
void foo(int*);
const не особо влияет на оптимизации даже сейчас, а тогда и подавно был не более чем диагностикой компилятора. Да и появился const в языке си тоже не сразу, и в какое-то время практика его использования еще не выработалась
перегрузки доступны в с++, а не в чистом си, о котором идет речь (возможно, тогда плюсов еще и не было)
Upd: Ну и не знаю как они при таком трюке не схватили ошибку компиляции для перегрузок вида:
перегрузки доступны в с++, а не в чистом си, о котором идет речь (возможно, тогда плюсов еще и не было)
Больше ужаснуло что новый код, написанный специально для работы со старым кодом, не мог работать с ним из-за забытой константности… Его при написании даже компилировать не пробовали? :-)
Вероятно это было время когда каждый писал собственные баги в компилятор.
Ну #define private public — это из кода DOOM 3.
А можно предысторию, зачем им это вообще понадобилось?
Запутались в модификаторах доступа. Раньше всё писали на чистом Си, там такого не было. Потому решили заюзать С++, ООП все дела. И в один прекрасный момент поняли, что легче всё сделать публичным, чем распутать то, что у них получилось.
Разработчику игр вроде бы как раз неплохо знать, хотя бы в общих чертах, что константность влияет в тч на оптимизации, выполняемые компилятором?
Оптимизации — это фигня. Тем более, чем современные компиляторы обычно сами анализируют код и игнорируют константность.
А вот то, что код на С++ может перестать компилироваться, это уже проблема.
f(const int&)
и f(int &)
— это две большие разницы, т.к. вторая не сможет принять на вход rvalue.
Потом я вспомнил, что при переносе окна в область уведомлений или в панель меню «Пуск» Windows мгновенно восстанавливает неиспользуемую/освобождённую память.
Объясните пожалуйста о чем здесь речь. Что еще за освобождение памяти при сворачивании?
В тексте ж написано:
Окно свернули — винда его память подчистила сама.
какой-то дескриптор окна не выполнял очистку должным образом
Окно свернули — винда его память подчистила сама.
Разве дескриптор окна удаляется при сворачивании?
Дескриптор нет, но какие-то ресурсы свернутого (невидимого окна), очевидно, освобождаются операционкой.
Как говорил мой преподаватиель — «Очевидно — значит ты знаешь доказательство»
Откуда информация что там что-то освобождается?
Откуда информация что там что-то освобождается?
Предположим, что ничего не освобождается. Но в таком случае перенос окна не помог бы, а нам известно что он помогает. Мы получили противоречие, следовательно исходное предположение было неверно. Следовательно, что-то освобождается. Ч. Т. Д.
Вариант предложенный ниже с «сбрасывается в своп» — тоже возможен.
Проблему откладывает пока своп не кончится и выглядит как решение. Хотя и не подтверждает изначальное утверждение.
Плюс это была не случайная находа, а «вспомнил что освобождается». Откуда он это вспомнил? В какой документации об этом речь идет?
Проблему откладывает пока своп не кончится и выглядит как решение. Хотя и не подтверждает изначальное утверждение.
Плюс это была не случайная находа, а «вспомнил что освобождается». Откуда он это вспомнил? В какой документации об этом речь идет?
Едрить твою черёмуху!
Это ж новый ритуал мне моя паранойя нашептала: пройтись по всем окнам, сворачивая/разворачивая их.
Это ж новый ритуал мне моя паранойя нашептала: пройтись по всем окнам, сворачивая/разворачивая их.
Он просто продолжил создавать новые файлы .s, заполненные небольшими фрагментами данных, которые вставлял в произвольные места в makefile, пока они каким-то образом не перестали крашиться, после чего выпустил её!Гениально, блин!
Не хватает откровений вествудовских разрабов Dune 2. Такого глюкодрома ни разу больше не встречал. Современные индусы отдыхают.
Камера-обскура
Напомнило другую историю с наследованием объектов:
ФАУ-2 — это такая немецкая мегапетарда. Германия ими под конец войны докучала Великобритании, но без особого успеха. Вундерваффе страдало от кучи детских болезней и хорошо если могло оторваться от земли. Зачастую взрывалась прямо на стартовом столе, а уж коли отрывалось да еще и летело в сторону Англии, то уж вообще успех. Горючее, между прочим, 3,5 тонны этилового спирта :)
Ну, сделали и мы в Блицкриге эту самую ракету. Как и немцы, сделали ее уже ближе к концу проекта и соорудили на базе объекта «самолет». Но программисты несколько схалтурили и не пооткручивали у бывшего самолета подозрительную для баллистической ракеты функциональность. Оказалость, что если во время полета к цели начинал идти дождь или снег, то во-первых ракета говорила человеческим голосом «Fliege zuruck»(нем. лечу назад), а во-вторых разворачивалась и летела обратно на базу. Фигли там, погода то нелетная.
(с)
Да-да, это тоже вспоминалось)
Или еще что-то похожее с башорга, вдогонку:
Или еще что-то похожее с башорга, вдогонку:
Ошибка: робот погибает при попадании в него гранаты (именно от попадания, а не от взрыва) Д — дизайнер, П — программист.
Д: программисты всё сломали! почему так получается?!
П: естественно так получается! потому, что у гранаты масса 100 кг! зачем вы это сделали?
Д: да?! а чтобы граната в воде тонула!
П: а почему она с нормальной массой не тонет?
Д: а потому что у воды плотность большая! (прим.: больше, чем у ртути)
П: а почему плотность такая большая?!
Д: а чтобы ящики деревянные плавали!
П: а почему они иначе не плавают?!
Д: а потому что у них масса 50 кг!
П: а зачем такая масса?!
Д: а иначе они некрасиво разваливаются!
Ещё один древний боян про наследование.
Копипаста:
Копипаста:
Повторное использование объектно-ориентированного кода (в программах) вызвало головную боль у Австралийских Вооруженных Сил. Т.к. симуляторы все активнее используются для тренировок боевых действий вертолетов, от программистов требуется постоянное повышение реализма используемых сценариев, включая детальные ландшафты местности и — в случае операции Феникс — стад кенгуру (т.к. испуганные животные могут легко выдать расположение воинских частей). Hачальник отдела симуляций наземных операций Defense Science and Technology Organization приказал разработчикам смоделировать перемещения кенгуру и их реакцию на вертолеты. Будучи грамотными программистами, те использовали готовые программные объекты, описывающие поведение пехоты в аналогичной ситуации, заменив изображения солдат на изображения животных и увеличив их скорость. Желая продемонстрировать свое мастерство перед посетителями — американскими пилотами — горячие австралийские парни “разбудили” кенгуру, пройдя над ними на малой высоте во время симуляции. Кенгуру разбежались, как и предполагалось, и американцы понимающе кивнули… А затем сильно удивились, т.к. кенгуру, перегруппировавшись, появились из-за холма и выпустили тучу стингеров по злополучным вертолетам. (Программисты забыли удалить соответствующий кусок кода из “пехотных” объектов).
Там еще про свиней шикарно.
Он тратил какое-то время на нахождение этих багов, но если ему это не удавалось, то он… изменял порядок файлов в makefile, чтобы файлы статически компоновались в памяти в другом порядке! Это означало, что случайно записываемый фрагмент памяти теперь находился в в каком-то другом месте, но благодаря чистой удаче игра почему-то переставала вываливаться.
И как ему за такое табуреткой голову не разбили?
«Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию.»
В переводе потерялась игра слов в некоторых заголовках ("Flash forward", «Back to basics»).
Меня больше удивили деятели, которые делают printf() с произвольной строкой.
Меня больше удивили деятели, которые делают printf() с произвольной строкой.
Я, конечно понимаю, что не всегда есть время вычистить, например, ошибку порчи памяти, или переделать изначально неудачную иерархию классов, или разобраться с константами в новом странном языке си++. Но man printf то можно почитать и не совать ему данные первым аргументом! Это уж совсем невменяемые кодеры какие-то, как им родители вилку-то за обедом доверяют?
Забавно с тестированием картриджей
Вроде бы еще никто не упомянул шикарный поезд из Fallout 3, который на самом деле шлем.


Забавно, читать комменты «суровых кодеров» юзающих компилятор 17-го года, знающих stl и стандартные алгоритмы, комментирующих работу людей работающих на компиляторе 70-х-80-х-90-х годов в направлении, когда стандартными алгоритмами можно решить менее половины задач, а все остальное это новаторство и жесточайшая оптимизация с использованием особеностей всего, вплоть до особенностей ОС (а не только правил компилятора и оптимизатора). По сути это про случаи когда выкрутичивались в нестандартной ситуации и из спичек делали работающий велосипед.
p.s. забавно что даже тогда на решение невоспроизводимого и неизвестного бага выделялось весьма ограниченное время, для 1 человека, если работа шла в крупной компании.
p.s. забавно что даже тогда на решение невоспроизводимого и неизвестного бага выделялось весьма ограниченное время, для 1 человека, если работа шла в крупной компании.
Sign up to leave a comment.
Грязные трюки разработчиков видеоигр