Что такое Fortran и почему он жив
Fortran не «древний и мёртвый» — это живой стандарт, на котором до сих пор считают самые тяжёлые научные задачи планеты.
Fortran (от FORmula TRANslation) — компилируемый язык программирования, созданный в 1957 году для численных расчётов и непрерывно развивающийся: актуальные стандарты — Fortran 2008 и Fortran 2018.
Когда начинающий программист слышит слово «Fortran», в голове всплывает образ перфокарт, мейнфреймов размером с комнату и инженеров в белых халатах. Этот образ наполовину верен исторически и полностью неверен по сути. Fortran не остановился в 1970-х: он прошёл через большие реформы 1990, 2003, 2008 и 2018 годов и сегодня остаётся языком, на котором написана значительная часть кода, считающего погоду на завтра, поведение плазмы в термоядерном реакторе и обтекание крыла самолёта. Этот урок отвечает на главный вопрос новичка: почему язык, которому почти семьдесят лет, до сих пор не просто жив, а доминирует в своей нише.
Зачем вообще учить Fortran в XXI веке
Логика «язык старый — значит, устаревший» работает для бытовых вещей, но не для инструментов. Молотку тоже тысячи лет, и он по-прежнему лучший способ забить гвоздь. Fortran создавался ради одной задачи — переводить математические формулы в эффективный машинный код для численных расчётов — и за десятилетия он отточил именно эту способность до предела. У языка есть несколько причин, по которым его не вытесняют ни C++, ни Python, ни Julia.
Во-первых, массивы встроены в язык как первоклассные объекты. Там, где в C нужно вручную писать циклы и следить за указателями, в Fortran вы пишете C = A + B для целых матриц, а компилятор сам разворачивает это в векторизованный, выровненный по кэшу код. Во-вторых, правила алиасинга: стандарт гарантирует, что аргументы процедуры по умолчанию не пересекаются в памяти, и оптимизатор смело переставляет инструкции. Именно поэтому численный код на Fortran часто оказывается быстрее эквивалента на C без ручной возни. В-третьих, за семьдесят лет накопились миллионы строк проверенных библиотек: BLAS, LAPACK, ScaLAPACK, огромные климатические и инженерные модели. Переписывать это с нуля никто не будет.
Краткая история: от FORTRAN до Fortran 2018
История языка — это история постепенного превращения примитивного транслятора формул в современный язык с модулями, ООП и параллелизмом. Знать вехи полезно: по ним вы будете понимать, какие конструкции «древние», а какие — рекомендуемые сегодня.
| Версия | Год | Что принесла |
| FORTRAN | 1957 | Первый коммерческий компилятор высокого уровня, переменные, циклы DO |
| FORTRAN IV / 66 | 1966 | Первый стандарт ANSI, типы данных, логические выражения |
| FORTRAN 77 | 1978 | Блок IF/THEN/ELSE, символьный тип CHARACTER — эпоха «старого» Fortran |
| Fortran 90 | 1991 | Свободный формат, массивные операции, модули, динамическая память, производные типы |
| Fortran 95 | 1997 | FORALL, WHERE, чистые (pure) и элементные (elemental) процедуры |
| Fortran 2003 | 2004 | Объектно-ориентированное программирование, совместимость с C |
| Fortran 2008 | 2010 | Coarrays (параллелизм в языке), DO CONCURRENT, submodules |
| Fortran 2018 | 2018 | Развитие coarrays, улучшенная совместимость с C, события |
Обратите внимание на перелом 1991 года. До Fortran 90 имя языка писали капсом — FORTRAN, и код имел фиксированный формат: колонки 1–5 для меток, колонка 6 для продолжения, код только с 7-й по 72-ю. Это наследие перфокарт. Начиная с Fortran 90 появился свободный формат (имя стали писать как Fortran), и именно его мы используем весь курс. Когда вы видите в чужом коде строки, начинающиеся с буквы C в первой колонке как комментарий, — это код в стиле FORTRAN 77, и трогать его надо осторожно.
Где Fortran правит: реальные ниши
Язык не пытается быть универсальным. Вы не напишете на нём веб-сайт или мобильное приложение — и не должны. Зато есть области, где он практически безальтернативен.
Высокопроизводительные вычисления (HPC)
Суперкомпьютеры из списка TOP500 гоняют в основном код на Fortran и C/C++. Прогноз погоды (модели WRF, ECMWF IFS), климатология (модели общей циркуляции атмосферы и океана), вычислительная гидродинамика — почти всё это написано на Fortran. Причина проста: на масштабе тысяч узлов каждый процент производительности превращается в миллионы рублей электричества, и проверенный векторизуемый Fortran-код экономит эти деньги.
Наука и инженерия
Квантовая химия (Gaussian, GAMESS), физика плазмы, расчёт прочности конструкций методом конечных элементов, астрофизические симуляции — Fortran здесь язык по умолчанию. Учёный, который защитил диссертацию, моделируя сверхновые, почти наверняка читал и правил код на Fortran.
Легаси, которое нельзя выбросить
Огромные кодовые базы создавались десятилетиями и валидированы экспериментами. Переписать модель ядерного реактора «на современный язык» — значит заново пройти годы верификации. Дешевле и безопаснее поддерживать и аккуратно модернизировать существующий Fortran. Поэтому навык чтения и улучшения такого кода ценится на рынке труда науки и обороны.
Почему именно Fortran стал первым
Чтобы понять характер языка, полезно вспомнить, против чего он восставал. В середине 1950-х программы писали на ассемблере — вручную перечисляли машинные инструкции. Это было медленно, дорого и доступно лишь узкой касте. Команда Джона Бэкуса в IBM поставила дерзкую по тем временам цель: позволить инженеру записывать вычисления в виде, близком к математической формуле, а машине — самой переводить это в эффективный код. Скептики не верили, что автоматически сгенерированный код сможет соперничать с рукописным ассемблером по скорости — и именно поэтому первый компилятор FORTRAN был одержим оптимизацией. Эта одержимость производительностью с самого рождения вшита в ДНК языка и объясняет многие его решения: от модели алиасинга до встроенных массивных операций. Fortran не «обвязка вокруг железа», а инструмент, спроектированный так, чтобы высокоуровневая запись формулы превращалась в почти оптимальный машинный код. Когда вы понимаете эту исходную мотивацию, перестаёт удивлять, почему язык так строг к типам, так любит статически известные размеры и так не любит всё, что мешает оптимизатору.
Важно и то, что Fortran оказался удачно «в нужное время в нужном месте». Он стал лингва-франка вычислительной науки до того, как появились альтернативы, и накопил критическую массу кода и специалистов. В науке смена инструмента стоит дорого: нужно не просто переписать программу, но и заново доказать, что она даёт те же результаты, сверить с экспериментом, переобучить людей. Поэтому языки в этой области живут десятилетиями, и инерция работает в пользу Fortran так же, как когда-то работала против ассемблера.
Компиляторы и как собрать первую программу
Fortran — компилируемый язык: исходник превращается в исполняемый файл заранее, а не интерпретируется на лету. Двух главных бесплатных компилятора достаточно для всего курса.
- gfortran — часть GNU Compiler Collection (GCC), кросс-платформенный, ставится на Linux одной командой, есть для macOS и Windows. Наш основной выбор.
- ifx — современный компилятор Intel на основе LLVM (преемник классического ifort), бесплатен, отлично оптимизирует под процессоры Intel.
Классическая первая программа выглядит так. Исходные файлы Fortran обычно имеют расширение .f90 (свободный формат), даже если код соответствует более новому стандарту.
program hello
implicit none
print *, "Привет, Fortran!"
end program hello
Сборка и запуск из терминала состоят из двух шагов: компиляция в исполняемый файл и его запуск.
gfortran hello.f90 -o hello
./hello
Вывод:
Привет, Fortran!
Разберём каждую строку программы. program hello открывает главную программную единицу с произвольным именем. Строка implicit none — важнейшая привычка современного Fortran: она отключает «неявную типизацию» (о ней ниже) и заставляет объявлять каждую переменную. print *, ... печатает в стандартный вывод; звёздочка означает «формат по умолчанию, разберись сам». end program hello закрывает единицу. Для серьёзной сборки добавляют флаги: -O2 включает оптимизацию, -Wall — все предупреждения, -fcheck=all в учебной сборке ловит выход за границы массива.
Как работает под капотом
Понимание модели исполнения помогает писать быстрый код. Компилятор Fortran проходит несколько фаз: разбор исходника, построение внутреннего представления, агрессивная оптимизация и генерация машинного кода под конкретную архитектуру. Ключевое отличие от C — модель алиасинга. В Fortran считается, что разные аргументы процедуры и разные переменные не делят одну ячейку памяти, если вы явно не указали обратного. Это развязывает руки оптимизатору: он может держать значения в регистрах, переупорядочивать чтения и записи, разворачивать и векторизовать циклы. В C, где два указателя легко могут указывать на одно место, компилятор обязан быть осторожнее — отсюда исторический разрыв в скорости численного кода в пользу Fortran.
Второй важный момент — хранение массивов по столбцам (column-major). Многомерный массив раскладывается в линейной памяти так, что первым меняется самый левый индекс. Это влияет на то, в каком порядке обходить вложенные циклы для попадания в кэш; мы детально разберём это в разделе про массивы. Пока запомните: Fortran и C хранят матрицы в «противоположном» порядке, и это первое, обо что спотыкаются при связывании кода на двух языках.
Частые ошибки и мифы
Несколько заблуждений мешают новичкам подойти к языку трезво.
- «Fortran мёртв». Нет. Стандарт 2018 года активно используется, готовится следующий, компиляторы развиваются. Жив тот язык, на котором пишут новый код, — а в HPC на Fortran пишут.
- «Fortran — это GOTO и спагетти». Это про FORTRAN 77. Современный Fortran структурный, с модулями и ООП;
go toв новом коде практически не встречается. - «Регистр имеет значение». Нет: Fortran не различает регистр в именах.
Mass,massиMASS— одна переменная. Это часто удивляет тех, кто пришёл из C. - Забыть
implicit none. Без него опечатка в имени переменной не вызовет ошибку компиляции — Fortran молча создаст новую переменную. Это исторический источник коварных багов. Ставьтеimplicit noneвсегда.
Итоги
- Fortran — живой развивающийся язык (актуальны стандарты 2008 и 2018), а не музейный экспонат.
- Его ниша — численные расчёты: HPC, наука, инженерия и валидированное легаси.
- Сила языка — встроенные массивы и благоприятная модель алиасинга, дающая высокую скорость.
- Современный код пишут в свободном формате (.f90), а перелом случился в Fortran 90 (1991).
- Главные бесплатные компиляторы — gfortran и Intel ifx; сборка состоит из компиляции и запуска.
- Всегда пишите
implicit noneи помните, что имена нечувствительны к регистру.