Прошло почти 65 лет с тех пор, как была выпущена первая версия FORTRAN (и впоследствии переименованная в Fortran), и все же Fortran по-прежнему занимает 30-е место в индексе TIOBE (https://www.tiobe.com/tiobe-index/), только На 2 места позади Rust и впереди других языков, таких как D и Haskell. Другие старые языки, такие как COBOL, полностью перешли в режим обслуживания, но FORTRAN далёк от этого. Новые приложения все еще разрабатываются, и комитет FORTAN все еще собирается и принимает новые предложения (https://github.com/j3-fortran/fortran_proposals). Что отличает FORTRAN и остается ли он актуальным сегодня?

Что такое Фортран

Fortran — единственный известный мне низкоуровневый язык, специально предназначенный для научных вычислений. На самом деле, название буквально является сокращением от «Перевод формул». В то время это было революционно, потому что позволяло ученым и программистам легко преобразовывать свои уравнения в код, а оптимизирующий компилятор обеспечивал отличную производительность. Фортран предоставляет тип массива, который может быть многомерным, вы можете матрично перемножить два массива, просто вызвав встроенную функцию, какой еще низкоуровневый язык имеет встроенные высокоуровневые конструкции для научных вычислений?

Фортран все еще используется, потому что он быстрее других низкоуровневых языков?

Я думаю, что ответ здесь нет. Когда Фортран был впервые разработан, вплоть до начала 21 века, Фортран был быстрым,скорее, чем другие языки, например C. компилятор значительно проще. В настоящее время так много усилий было вложено в оптимизацию GCC и LLVM, что любые различия незначительны. Если вы мне не верите, вы можете просмотреть тесты здесь https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html.

Почему?

Для тех, у кого нет большого опыта программирования, и даже для тех, у кого он есть, Fortran, вероятно, является самым быстрым способом перейти от уравнений на листе бумаги к собственному, достаточно производительному коду. Здесь под «достаточно производительным» я подразумеваю уровень выше того, что вы ожидаете от любого динамического языка сценариев. Существует также большой импульсный эффект. Во многих областях, в том числе в моей области науки об атмосфере, есть хорошо протестированные устаревшие приложения Fortran, которые все еще используются и разрабатываются. Новые аспиранты начинают с использования этих приложений, возможно, даже расширяя их, и привыкают к использованию Fortran.

Плохо

По моему мнению, научные вычисления сегодня движутся в направлении, которое сводит к минимуму хорошие аспекты Фортрана (обработка чисел) и усиливает плохие аспекты. У нас редко бывают четко определенные проблемы, которые представляют собой просто «перевод формулы». Быстрое прототипирование, гибкость и расширяемость в настоящее время являются ключевыми факторами. В современном Фортране есть некоторые возможности для улучшения дженериков, но они являются базовыми по сравнению с чем-то вроде C++. Простые функции, которые мы считаем само собой разумеющимися, такие как аргументы функций по умолчанию, заметно отсутствуют, что делает все, что не связано с манипуляциями с массивами, рутинной работой. Когда я смотрю на некоторые из больших баз кода для научных вычислений, над которыми я работал, вероятно, менее 5% кода на самом деле являются числовыми значениями, критически важными для производительности.

Доступность высококачественных числовых библиотек для других языков программирования также свела на нет многие преимущества Фортрана. Например, в C++ вы можете использовать Eigen(https://eigen.tuxfamily.org/), который предоставляет большую часть матричных функций, которые предлагает Fortran. Значение быстрого прототипирования также высоко ценится сейчас, и что-то вроде Python + numpy (хотя numpy использует Fortran внутри!) может быть на порядок проще в разработке за счет некоторой производительности.

В заключение, Fortran действительно хорош в том, для чего он был разработан, но эта ниша становится все менее и менее актуальной. По моему мнению, большинству начинающих программистов-ученых больше подойдет изучение популярного динамического языка с хорошей числовой поддержкой (например, Python + numpy) и возможность при необходимости перейти на C/C++.