bash.im ithappens.me zadolba.li
13045

Два миллиарда мух не могут ошибаться

В связи с недавними событиями вспомнилась история, произошедшая N-дцать лет назад. Играл я в то время в X-COM и развивал прекрасного со всех сторон юнита в качестве лидера. Но случился очередной левел-ап перед полётом на Марс, и у юнита вместо очередного прибавления очков здоровья (было 246 или около того) произошло ужасное несчастье: хит-поинтов стало 28. Как начинающий программист, я понял, что произошло переполнение восьмибитной ячейки памяти (хорошо хоть не упало), хранящей количество очков здоровья, но как игроку мне это сильно не понравилось.

Спустя те же N-дцать лет ко мне пришёл разработчик с вопросом, какой именно тип сделать для колонки в базе данных — 32-битный или 64-битный (проблема скорости работы стояла остро). Система подразумевает наличие локальной базы и репозиторной базы, и структура таблиц обеих баз должна быть идентичной, чтобы упростить синхронизацию между ними. Поскольку значение в этой колонке — это количество операций, сделанных лично пользователем, то логично предположить что пара миллиардов — это практически недостижимый предел человеческих возможностей по совершению операций с системой. Но тут-то я вспомнил, что примерно то же самое, видимо, предполагалось и в этой самой игре. Ведь не всегда можно угадать, сколько же локальных баз (то есть пользователей) будет синхронизировано с репозиторной базой. Потому и предложил разработчику использовать 64-битное поле. На всякий случай… Ведь похожий случай уже был недавно.