Алексей Андреев
Рано утром 9 сентября в Unix-системах отсчет времени перевалит за миллиардную секунду. Некоторые СМИ уже назвали этот перевальный пункт «проблемой-2001». И даже специалисты расходятся во мнении о том, насколько эта проблема серьезна.
Как заявил в интервью «Нетоскопу» Алексей Выскубов, работающий в исследовательском центре
«С точки зрения компьютеров число 10 в степени 9 ничем не замечательно», — полагает Алексей Выскубов. Он также рассказал, что новость об этой очередной «ошибке-2000» в качестве шутки запущена в СМИ научным руководителем одного его знакомого, вычислившим эту миллиардную секунду.
Между тем, по данным «Нетоскопа», уже в пятницу некоторые веб-серверы стали испытывать сбои, связанные с «миллиардной секундой». Например, сбои, случившиеся в работе сайта
«Как известно, дата хранится в виде числа секунд, прошедших с 1970-го года. Например, сейчас это 999867871. А послезавтра это число перевалит за
1000000000 и в нем добавится еще один разряд. Ничего криминального в этом нет, но у программистов на Perl в связи с этим может возникнуть неприятность в операциях сравнения времен (например — времени модификации файлов, или даты постинга)».
По мнению Мошкова, ошибка может случиться, например, если в программе стоит списанная с учебника типовая операция сортировки массива по дате:
@FILES=sort{ $FILEtime{$b} cmp $FILEtime{$a}} (@FILES);
В данном определении используется «cmp» — операция символьного сравнения, а не числового. А в символьном сравнении 1000000000 меньше, чем 999867871. Поэтому при такой сортировке результат окажется прямо противоположным ожидаемому.
Естественно, если программист с самого начала использовал корректную сортировку (не «cmp», a «<=>»), то ничего не случится. Но кто может поручиться, что во всех его скриптах повсюду использованы корректные виды сравнений и сортировок?
Как полагает Мошков, проблема является вполне реальной с учетом того, что многие скрипты писались в пору обучения языку Perl, когда разница между «cmp» и «<=>» была просто неизвестна авторам этих скриптов. А многие веб-мастера вообще используют чужие скрипты, сгруженные из Интернета. Поэтому «глюки ожидают нас всех в самых неожиданных местах».
Таким образом, у интернетчиков остались еще сутки для того, чтобы почистить код и встретить 1000000000-ю секунду от 1-го января 1970-го года во всеоружии.
Кроме того, как сообщают источники «Нетоскопа», еще ряд проблем 9 сентября может быть связан с тем, что юниксоидно-настроенные системные администраторы будут активно праздновать «миллиардную секунду» с применением алкоголя.