Приход нового тысячелетия не избавит нас окончательно от подобных неприятностей
Автор этого утверждения - руководитель консультационной фирмы Artemis Management Services Кэйперс Джонс в течение долгого периода времени занимался сбором сведений о программном обеспечении и компьютерных системах, призванных доказать актуальность этого стандарта.
"Приближение 2000 года и ввод в обращение евро не оставляют специалистам по информационным технологиям времени для раздумий, - говорит Джонс. - Нужно действовать без всяких отлагательств. Проанализировав создавшееся положение, я понял, что, к сожалению, даже приход нового тысячелетия не избавит нас окончательно от подобных неприятностей. И практика подтверждает мое предположение".
По мнению Джонса, лучшим способом избежать осложнений, аналогичных проблеме 2000 года, могла бы стать разработка единого метода представления дат. Используемые в настоящее время стандарты не лишены недостатков. Достаточно сказать, что стандарт ISO не позволяет работать с так называемым научным форматом дат. Большая часть существующих программ вообще не поддерживает последний формат. (В научном формате представления дат к обозначению, соответствующему стандарту ISO ("год-месяц-день"), добавляется дополнительный код, определяющий тип летосчисления: юлианское или астрономическое.)
Джонс обещает, что обязательно поднимет вопрос, касающийся хранения дат, на одной из международных конференций, однако не станет делать этого до начала следующего года. По его искреннему убеждению, важно, чтобы люди прочувствовали остроту данного вопроса и ощутили на себе его неприятные последствия - тогда в дальнейшем они будут вести себя куда осмотрительнее.
А теперь более подробно рассмотрим некоторые проблему, не связанные с наступлением 2000 года, но тем не менее имеющие немаловажное значение для успешного развития индустрии информационных технологий.
- Начало нового цикла в системе глобального позиционирования GPS (Global Positioning System). Время в GPS хранится в течение 20 лет, или 1024 недельных циклов. Отсчет ведется с 6 января 1980 года. Таким образом, сброс счетчика и начало нового 20-летнего цикла произойдет в полночь 21 августа 1999 года. К счастью, этот метод представления времени хорошо документирован, и большинство производителей уже сумели успешно справиться с данной задачей. Однако нельзя забывать и о человеческом факторе, ведь программисты, разрабатывавшие приложения на основе соглашений GPS, могли упустить из виду начало нового цикла.
- Проблема "девяток". Разработчики часто использовали строку "9999" для обозначения конца программы. Беда в том, что ряд приложений может интерпретировать эту строку как обычную дату: 9 сентября 1999 года. В некоторых приложениях Unix код завершается числом 999 999 999. В самой же операционной системе данное число обозначает 8 сентября 2001 года.
Хотя в большинстве операционных систем проблема девяток уже решена, при работе со старыми приложениями порой возникают осложнения. Поэтому нужно быть готовым к тому, что рано или поздно вас может ждать неприятная встреча с исходным кодом или с компьютером, для которого данная ситуация по-прежнему актуальна. А что делать, если сбой программного обеспечения произойдет на буровой установке, которая находится в 150 метрах ниже уровня Атлантического океана? Безусловно, в дальнейшем все операционные системы должны использовать стандартный символ конца файла, который не может быть интерпретирован как дата.
- 29 февраля 2000 года. Специалистам информационных служб хорошо известно, что если в системе не предусмотрен учет дополнительного дня високосного года, это может закончиться серьезными неприятностями. Вот к чему приводят близорукость разработчиков и небрежное отношение программистов к своему делу.
Следует помнить, что правила определения високосного года не укладываются в рамки обычного четырехлетнего цикла. Из тех лет, которые нацело делятся на сто, високосными считаются лишь годы, кратные 400. К сожалению, с нежелательным эффектом потерянного дня каждые четыре года может столкнуться практически каждый. К примеру, в 1996 году 60 тыс. жителей штата Аризона 29 февраля не смогли купить лотерейные билеты, потому что программное обеспечение, обслуживавшее распространение билетов, отказалось идентифицировать дополнительный день.
- Проблема-2038: Для хранения информации о времени в языках Cи и C++ используется 32-разрядное целое число, которое равно числу секунд, прошедших с 1 января 1970 года. Значение 32-разрядного целого числа не может превышать 2 147 483 647. Таким образом, 19 января 2038 года счетчик времени переполнится, а компьютер в лучшем случае будет считать, что вновь наступило 1 января 1970 года, а в худшем, прочитав отрицательное число, вернет пользователей в 1901 год.
Данная ситуация характерна для программ, работающих под управлением операционных систем Windows и Unix, а также для многих встроенных систем. Эксперты считают, что по своим губительным последствиям отказ программного обеспечения, написанного на Cи и C++, вполне может сравниться с ошибкой 2000 года. Конечно, есть надежда, что до 2038 года доживут очень немногие из используемых сегодня приложений.
"Всего несколько лет назад мы были уверены, что старым программам не удастся преодолеть рубеж 2000 года, - подчеркнул Джонс. - Сегодня же приходится расплачиваться за собственную беспечность. Поэтому лично я не отважился бы делать ставку исключительно на благоприятное стечение обстоятельств".