
Fortran позволил инженеру или учёному записать расчёт в форме, похожей на обычную математическую формулу, а компилятор сам превращал эту запись в длинную последовательность машинных инструкций. Команда Джона Бэкуса начала проект в IBM в 1954 году, а первая коммерческая система вышла для IBM 704 в 1957 году. Главным достижением был не только синтаксис, но и переводчик, который выдавал настолько эффективный код, что специалисты согласились доверить ему работу, прежде выполнявшуюся вручную.
Почему программирование стоило так дорого
Компьютер середины 1950-х был редкой и дорогой машиной, но подготовка программы тоже требовала огромного труда. Специалист раскладывал формулу на элементарные операции, распределял память, управлял циклами и вручную добивался скорости. Ошибка в одной инструкции могла испортить часы вычисления.
Музей истории компьютеров отмечает парадокс: стоимость написания программ начала превосходить стоимость самих машин. Если каждый новый расчёт требует команды узких специалистов, компьютер остаётся закрытым инструментом.
Что предложил Джон Бэкус
Идея заключалась в «переводе формул», откуда происходит название Formula Translation. Пользователь записывает выражения, циклы и условия на уровне задачи. Компилятор анализирует их и строит программу для процессора. Учёному не нужно самому заменять каждое умножение серией низкоуровневых действий.
Подобные идеи существовали и раньше, включая теоретический Plankalkül и работы Грейс Хоппер над компиляторами. Fortran выделился тем, что объединил язык, работающий переводчик, мощную машину и аудиторию с множеством реальных задач.
Почему компилятору не доверяли
Ранние программисты добивались производительности вручную и знали, насколько ограничены память и скорость. Они опасались, что автоматический перевод создаст медленный и раздутый код. Красивый язык не имел бы смысла, если расчёт занимал в несколько раз больше машинного времени.
Поэтому команда уделила оптимизации чрезвычайное внимание. Компилятор анализировал циклы, распределял регистры и старался уменьшать лишние операции. Разработка переводчика заняла больше усилий, чем создание основных конструкций языка, но именно это убедило пользователей.
Как выглядела программа учёного
В ней были числовые переменные, формулы, условные переходы и циклы, повторяющие расчёт для ряда значений. Массивы позволяли работать с таблицами и матрицами. Подпрограммы собирали повторяющееся действие в отдельный блок. Исходный текст переносили на перфокарты и отдавали для пакетного запуска.
Работа всё ещё была далека от мгновенной. Пропущенный знак обнаруживался после очереди к машине, а карты могли перемешаться. Но одна строка высокого уровня заменяла множество инструкций, и содержание расчёта становилось виднее.
Что именно делал компилятор
Сначала он разбирал запись и проверял её форму. Затем строил внутреннее представление вычислений, выбирал машинные операции, распределял временные значения и создавал объектный код. Отдельные модули связывались с библиотеками математических функций.
В конце процессор всё равно исполнял такие же низкоуровневые команды, какие мог написать автор на ассемблере. Разница состояла в источнике: последовательность автоматически выводилась из более компактного описания намерения.
Почему язык распространился среди учёных
Инженер мог сосредоточиться на модели, а не на каждой ячейке памяти. Программы расчёта траекторий, погоды, прочности, энергетики и физических процессов стало легче создавать и переносить. Библиотеки накапливали проверенные методы, которыми пользовались новые проекты.
Появление нескольких компиляторов сделало язык общим профессиональным средством. IBM характеризует Fortran как один из самых влиятельных программных продуктов и связывает его с открытием вычислений для учёных и инженеров, не специализировавшихся на машинном коде.
Был ли код действительно переносимым
Идея высокого уровня позволяла перенести исходный текст на другую систему, если для неё существовал совместимый компилятор. На практике различались расширения, размеры чисел, библиотеки и ввод-вывод. Программу иногда приходилось изменять, но это было несравнимо легче полного переписывания машинных инструкций.
Стандартизация постепенно уменьшала расхождения. Она фиксировала общую основу, на которую могли опираться разработчики компиляторов и пользователи. Именно такой переносимости позже добивался COBOL для деловых данных.
Почему старые версии трудно читать сегодня
Формат перфокарты влиял на расположение текста по колонкам. Ранний Fortran широко использовал метки и переходы, из-за чего поток управления мог запутываться. Названия переменных были короткими, а строгие ограничения вынуждали экономить символы.
Язык менялся вместе с инженерной практикой. В него добавляли более ясные конструкции, модули, работу с современными типами данных и параллельными вычислениями. Поэтому современный Fortran нельзя оценивать только по листингу 1957 года.
Почему Fortran не исчез
Огромный объём научного кода проверен десятилетиями, а современные компиляторы хорошо оптимизируют численные циклы. Переписать надёжную модель на модный язык дорого и рискованно. Кроме того, Fortran продолжает развиваться и работать на суперкомпьютерах.
Долговечность показывает, что язык живёт не только красотой синтаксиса. Его поддерживают задачи, библиотеки, специалисты, стандарты и уверенность в результате. Позднее C проделал похожий переход для системного программирования, а современные инструменты подняли абстракцию ещё выше. Но Fortran первым массово доказал скептикам, что автоматический перевод может быть не просто удобным, а практически эффективным.
Как наследие языка проявляется за пределами синтаксиса
Проект Fortran изменил ожидание от компилятора. Переводчик должен был не просто выдавать исполнимый результат, а сохранять производительность, ради которой покупали дорогую машину. Отсюда выросла отдельная область оптимизации: анализ циклов, повторное использование значений, распределение регистров и преобразование выражений.
Современный программист редко видит все эти решения, но пользуется ими ежедневно. Один и тот же исходный текст компилятор приспосабливает к нескольким поколениям процессоров. Он может предупреждать об ошибках, строить отладочную информацию и связывать модули. Доверие к этому сложному инструменту начиналось с необходимости убедить специалистов, что программа высокого уровня не растратит вычислительное время.



