Pull to refresh

Comments 55

Команда разработчиков решила вставить в код хак и выполнила хитрый маленький трюк: #define const, чтобы константа была… ничем, пустым местом. Поэтому конструкция const int x; при предварительной обработке перед компиляцией становилась int x;

Забыли ещё #define private public из кода ID Software

#define true false // happy debugging
Вообще, у меня как у паскалиста всегда возникает истерика при виде такого препроцессинга. Это даже не выстрел в ногу, это выворот себя наизнанку в надежде, что заработает хотя бы вот так.
UFO just landed and posted this here
В Делфи тоже никто не запрещает выворачиваться наизнанку:
const
  True  = False;
  False = System.True;
#define const, чтобы константа была… ничем, пустым местом.

Лично я ужасно ненавижу CONST

Дичь какая. Разработчику игр вроде бы как раз неплохо знать, хотя бы в общих чертах, что константность влияет в тч на оптимизации, выполняемые компилятором?
Upd: Ну и не знаю как они при таком трюке не схватили ошибку компиляции для перегрузок вида:

#define const
void foo(const int*);
void foo(int*);
const не особо влияет на оптимизации даже сейчас, а тогда и подавно был не более чем диагностикой компилятора. Да и появился const в языке си тоже не сразу, и в какое-то время практика его использования еще не выработалась
Upd: Ну и не знаю как они при таком трюке не схватили ошибку компиляции для перегрузок вида:

перегрузки доступны в с++, а не в чистом си, о котором идет речь (возможно, тогда плюсов еще и не было)
нет, там речь идёт не только о чистом Си:

Поэтому они использовали функцию языка C / C++ под названием CONST.


Но можно предположить, использовали именно его, а даже если и C++, то перегрузки могли просто не использовать.
Больше ужаснуло что новый код, написанный специально для работы со старым кодом, не мог работать с ним из-за забытой константности… Его при написании даже компилировать не пробовали? :-)
Кто знает сколько это занимало времени.
Вероятно это было время когда каждый писал собственные баги в компилятор.

Ну #define private public — это из кода DOOM 3.

А можно предысторию, зачем им это вообще понадобилось?

Запутались в модификаторах доступа. Раньше всё писали на чистом Си, там такого не было. Потому решили заюзать С++, ООП все дела. И в один прекрасный момент поняли, что легче всё сделать публичным, чем распутать то, что у них получилось.

А почему бы не зареплейсить во всем проекте, вместо того, чтобы видеть private там где public?
Кармак вообще до последнего оттягивал переход на C++. Думаю, там таких перлов ещё немало.
Разработчику игр вроде бы как раз неплохо знать, хотя бы в общих чертах, что константность влияет в тч на оптимизации, выполняемые компилятором?

Оптимизации — это фигня. Тем более, чем современные компиляторы обычно сами анализируют код и игнорируют константность.


А вот то, что код на С++ может перестать компилироваться, это уже проблема.
f(const int&) и f(int &) — это две большие разницы, т.к. вторая не сможет принять на вход rvalue.

При таком подходе они скорее всего не обращают внимание на предупреждения компилятора.
Потом я вспомнил, что при переносе окна в область уведомлений или в панель меню «Пуск» Windows мгновенно восстанавливает неиспользуемую/освобождённую память.

Объясните пожалуйста о чем здесь речь. Что еще за освобождение памяти при сворачивании?
В тексте ж написано:
какой-то дескриптор окна не выполнял очистку должным образом

Окно свернули — винда его память подчистила сама.
Разве дескриптор окна удаляется при сворачивании?
Дескриптор нет, но какие-то ресурсы свернутого (невидимого окна), очевидно, освобождаются операционкой.
Как говорил мой преподаватиель — «Очевидно — значит ты знаешь доказательство»
Откуда информация что там что-то освобождается?
Предположим, что ничего не освобождается. Но в таком случае перенос окна не помог бы, а нам известно что он помогает. Мы получили противоречие, следовательно исходное предположение было неверно. Следовательно, что-то освобождается. Ч. Т. Д.
Вариант предложенный ниже с «сбрасывается в своп» — тоже возможен.
Проблему откладывает пока своп не кончится и выглядит как решение. Хотя и не подтверждает изначальное утверждение.
Плюс это была не случайная находа, а «вспомнил что освобождается». Откуда он это вспомнил? В какой документации об этом речь идет?
UFO just landed and posted this here
Едрить твою черёмуху!
Это ж новый ритуал мне моя паранойя нашептала: пройтись по всем окнам, сворачивая/разворачивая их.

Напиши уж программку на powershell тогда.

Проще уж тогда Win+D, Win+D
UFO just landed and posted this here
Он просто продолжил создавать новые файлы .s, заполненные небольшими фрагментами данных, которые вставлял в произвольные места в makefile, пока они каким-то образом не перестали крашиться, после чего выпустил её!
Гениально, блин!
Не хватает откровений вествудовских разрабов Dune 2. Такого глюкодрома ни разу больше не встречал. Современные индусы отдыхают.
Камера-обскура

Напомнило другую историю с наследованием объектов:

ФАУ-2 — это такая немецкая мегапетарда. Германия ими под конец войны докучала Великобритании, но без особого успеха. Вундерваффе страдало от кучи детских болезней и хорошо если могло оторваться от земли. Зачастую взрывалась прямо на стартовом столе, а уж коли отрывалось да еще и летело в сторону Англии, то уж вообще успех. Горючее, между прочим, 3,5 тонны этилового спирта :)
Ну, сделали и мы в Блицкриге эту самую ракету. Как и немцы, сделали ее уже ближе к концу проекта и соорудили на базе объекта «самолет». Но программисты несколько схалтурили и не пооткручивали у бывшего самолета подозрительную для баллистической ракеты функциональность. Оказалость, что если во время полета к цели начинал идти дождь или снег, то во-первых ракета говорила человеческим голосом «Fliege zuruck»(нем. лечу назад), а во-вторых разворачивалась и летела обратно на базу. Фигли там, погода то нелетная.

(с)
UFO just landed and posted this here
Да-да, это тоже вспоминалось)
Или еще что-то похожее с башорга, вдогонку:

Ошибка: робот погибает при попадании в него гранаты (именно от попадания, а не от взрыва) Д — дизайнер, П — программист.
Д: программисты всё сломали! почему так получается?!
П: естественно так получается! потому, что у гранаты масса 100 кг! зачем вы это сделали?
Д: да?! а чтобы граната в воде тонула!
П: а почему она с нормальной массой не тонет?
Д: а потому что у воды плотность большая! (прим.: больше, чем у ртути)
П: а почему плотность такая большая?!
Д: а чтобы ящики деревянные плавали!
П: а почему они иначе не плавают?!
Д: а потому что у них масса 50 кг!
П: а зачем такая масса?!
Д: а иначе они некрасиво разваливаются!
Я буду читать комментарии прежде чем отправлять свой)
Ещё один древний боян про наследование.
Копипаста:
Повторное использование объектно-ориентированного кода (в программах) вызвало головную боль у Австралийских Вооруженных Сил. Т.к. симуляторы все активнее используются для тренировок боевых действий вертолетов, от программистов требуется постоянное повышение реализма используемых сценариев, включая детальные ландшафты местности и — в случае операции Феникс — стад кенгуру (т.к. испуганные животные могут легко выдать расположение воинских частей). Hачальник отдела симуляций наземных операций Defense Science and Technology Organization приказал разработчикам смоделировать перемещения кенгуру и их реакцию на вертолеты. Будучи грамотными программистами, те использовали готовые программные объекты, описывающие поведение пехоты в аналогичной ситуации, заменив изображения солдат на изображения животных и увеличив их скорость. Желая продемонстрировать свое мастерство перед посетителями — американскими пилотами — горячие австралийские парни “разбудили” кенгуру, пройдя над ними на малой высоте во время симуляции. Кенгуру разбежались, как и предполагалось, и американцы понимающе кивнули… А затем сильно удивились, т.к. кенгуру, перегруппировавшись, появились из-за холма и выпустили тучу стингеров по злополучным вертолетам. (Программисты забыли удалить соответствующий кусок кода из “пехотных” объектов).
Там еще про свиней шикарно.
Он тратил какое-то время на нахождение этих багов, но если ему это не удавалось, то он… изменял порядок файлов в makefile, чтобы файлы статически компоновались в памяти в другом порядке! Это означало, что случайно записываемый фрагмент памяти теперь находился в в каком-то другом месте, но благодаря чистой удаче игра почему-то переставала вываливаться.

И как ему за такое табуреткой голову не разбили?
UFO just landed and posted this here
UFO just landed and posted this here
То-то с каждым днем софт все тормознее и глючнее, намного глючнее, чем 20 лет назад. Профессионалы!
«Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию.»
В переводе потерялась игра слов в некоторых заголовках ("Flash forward", «Back to basics»).
Меня больше удивили деятели, которые делают printf() с произвольной строкой.
Ага, причем заметив проблему они убрали printf директивой условной компиляции вместо того чтобы поставить "%s" первым аргументом!
UFO just landed and posted this here
классика конечно классикой, но какой то бред говорить о плотности, не учитывая объем =)
Я, конечно понимаю, что не всегда есть время вычистить, например, ошибку порчи памяти, или переделать изначально неудачную иерархию классов, или разобраться с константами в новом странном языке си++. Но man printf то можно почитать и не совать ему данные первым аргументом! Это уж совсем невменяемые кодеры какие-то, как им родители вилку-то за обедом доверяют?
Понаберут по объявлению.
В начале статьи есть ссылки на предыдущие статьи цикла. Там есть и про поезд-шлем, и про многое другое.
Забавно, читать комменты «суровых кодеров» юзающих компилятор 17-го года, знающих stl и стандартные алгоритмы, комментирующих работу людей работающих на компиляторе 70-х-80-х-90-х годов в направлении, когда стандартными алгоритмами можно решить менее половины задач, а все остальное это новаторство и жесточайшая оптимизация с использованием особеностей всего, вплоть до особенностей ОС (а не только правил компилятора и оптимизатора). По сути это про случаи когда выкрутичивались в нестандартной ситуации и из спичек делали работающий велосипед.

p.s. забавно что даже тогда на решение невоспроизводимого и неизвестного бага выделялось весьма ограниченное время, для 1 человека, если работа шла в крупной компании.
Sign up to leave a comment.

Articles