История о программистах Многие, наверное, слышали байку про то, как в
программе управления ракетой (не космической - военной!) программисты
ошиблись в одном знаке, и в результате ракета улетела не туда.
А я слышал еще и подробности. Излагаю так, как запомнил, ибо слышал я
это лет 25 назад в техникуме, когда изучал Фортран-4.
Итак, программа писалась на Фортране, но совсем древнем, годов 50-60-х.
Маленькое отступление для большинства, кто Фортрана не знает. Цикл Do
записывается так: Do 3 i=1,5 Здесь i - это счетчик цикла, 3 - это
цифровая метка, на которой тело цикла заканчивается.
Три маленьких особенности Фортрана: 1) В именах переменных допускаются
пробелы 2) Переменные в начале программы объявлять не обязательно, но
можно объявить и не использовать 3) Метки можно ставить, но не
использовать.
Так вот, программисты ошиблись, поставив точку вместо запятой.
Получилось: Do 3 i=1.5 В результате была задана переменная с именем "Do
3 i", абсолютно законным именем, которой было присвоено значение 1.5.
Далее эта переменная нигде не использовалась, и метка 3 тоже.
В результате, как вы понимаете, тело цикла отработало 1 раз вместо 5, на
неиспользованную переменную и метку компилятор не обратил внимания, и
получился неправильный угол подъема ракеты перед запуском.
Причем ракета улетела не просто "не туда", она полетела в находящийся
неподалеку город, и пришлось срочно посылать другую ракету, чтобы сбить
ее в воздухе.
Так ошибка в одну точку стоила американским военным целых двух ракет, то
есть нескольких миллионов долларов.
Так вот, я изучал в техникуме Фортран-4, в котором этот баг был
исправлен очень простыми двумя способами: 1) Конец тела цикла
обозначался не только меткой, но и словом Continue. Если на метке,
обозначенной в заголовке цикла, этого слова не было, компилятор выдавал
ошибку.
2) В именах переменных запретили пробелы.
Я точно не знаю, может быть, это один из вариантов байки, и на самом
деле все было чуть-чуть иначе. Поэтому прошу особо не пинать, но
комментарии приветствуются.