Язык программирования Fortran 90¶
Fortran 90 — это стандарт языка программирования Fortran, принятый в 1991 году Международной организацией по стандартизации (ISO) и в 1992 году — Американским национальным институтом стандартов (ANSI). Он стал первым крупным пересмотром языка с момента принятия стандарта Fortran 77 в 1978 году, кардинально расширив синтаксис и возможности языка, сохранив при этом обратную совместимость с предыдущими версиями. Fortran 90 предназначался для научных и инженерных вычислений и ввёл в обиход программистов такие конструкции, как модули, производные типы данных, динамическое распределение памяти и операции над массивами.
¶Предпосылки создания
К середине 1980-х годов Fortran 77, оставаясь доминирующим языком в высокопроизводительных вычислениях, начал демонстрировать серьёзные недостатки. Отсутствие средств структурного программирования (кроме базовых блоков IF), невозможность создавать пользовательские типы данных и динамически распределять память затрудняли разработку сложных вычислительных комплексов. Конкурирующие языки, такие как Pascal и C, предлагали более совершенные механизмы абстракции, однако уступали Fortran в эффективности численных расчётов и имели меньший набор встроенных математических функций.
Работа над новым стандартом началась в 1980-х годах под эгидой комитета X3J3 (США) и технического комитета ISO/IEC JTC1/SC22/WG5. В процессе обсуждения рассматривался проект, известный как Fortran 8x, который вобрал в себя предложения от ведущих вычислительных центров и производителей суперкомпьютеров, включая Cray Research и IBM. Итоговый документ, опубликованный в 1991 году, получил обозначение ISO/IEC 1539:1991.
¶Ключевые нововведения
Fortran 90 ввёл в язык значительное количество новых синтаксических конструкций и концепций, которые приблизили его к современным языкам программирования высокого уровня.
¶Свободная форма записи
В отличие от жёсткого формата Fortran 77, где требовалось соблюдать позиции колонок (первые 6 символов отводились под метки и символ продолжения), Fortran 90 разрешил свободную форму записи исходного кода. Длина строки была увеличена до 132 символов, а признаком продолжения строки стал символ & в конце предыдущей. Комментарии стали обозначаться восклицательным знаком !, что позволило размещать их в любом месте строки.
¶Массивы
Одним из главных новшеств стали операции над целыми массивами. Теперь стало возможным выполнять арифметические действия над массивами целиком, без явных циклов: A = B + C складывает все элементы массивов. Появились конструкторы массивов, срезы (A(1:10:2)), а также мощные встроенные функции для работы с массивами, такие как SUM, PRODUCT, MAXVAL, MINVAL, MATMUL и TRANSPOSE. Это позволило не только сократить объём кода, но и дало компиляторам возможность автоматически векторизовать вычисления для суперкомпьютеров.
¶Модули
Механизм модулей (MODULE) стал главным инструментом инкапсуляции и повторного использования кода. Модуль позволяет группировать определения типов, констант, переменных и процедур, а затем подключать их в другие программные единицы с помощью оператора USE. Модули обеспечивают явный контроль видимости данных (через атрибуты PUBLIC и PRIVATE) и позволяют эффективно разделять программу на логические части.
¶Производные типы данных
Fortran 90 впервые позволил программистам определять собственные типы данных, объединяя переменные различных встроенных типов. Например, можно было создать тип Person с полями name (символьная строка) и age (целое число). Это позволило моделировать сложные структуры предметной области непосредственно в коде.
¶Динамическое распределение памяти
Введены атрибуты ALLOCATABLE и POINTER для массивов и переменных. Появилась возможность выделять память во время выполнения программы с помощью оператора ALLOCATE и освобождать её оператором DEALLOCATE. Это сняло жёсткое ограничение на фиксированные размеры массивов и позволило создавать адаптивные алгоритмы.
¶Управляющие конструкции
Язык был дополнен современными конструкциями: цикл DO ... END DO с возможностью именования, оператор выбора SELECT CASE, конструкция WHERE для условного выполнения операций над массивами и блоки IF ... ELSEIF ... ELSE ... END IF.
¶Процедуры
Уточнены правила передачи аргументов в процедуры. Введены атрибуты INTENT (IN, OUT, INOUT), описывающие направление передачи данных. Появилась возможность перегрузки процедур (generic interfaces), а также опциональные (необязательные) аргументы. Функции могли возвращать массивы и производные типы.
¶Рекурсия
Fortran 90 официально разрешил рекурсивные вызовы процедур и функций, что потребовало явного указания атрибута RECURSIVE. Это упростило реализацию алгоритмов, естественно записываемых через рекурсию (например, быстрая сортировка или обход деревьев).
¶Пример кода
Следующий пример демонстрирует базовый синтаксис Fortran 90: модуль, производный тип, динамический массив и операции над срезами.
```fortran MODULE vector_ops IMPLICIT NONE TYPE :: vector REAL :: x, y, z END TYPE vector CONTAINS FUNCTION length(v) RESULT(res) TYPE(vector), INTENT(IN) :: v REAL :: res res = SQRT(v%x2 + v%y2 + v%z**2) END FUNCTION length END MODULE vector_ops
PROGRAM main USE vector_ops IMPLICIT NONE TYPE(vector) :: a REAL, ALLOCATABLE :: data(:) INTEGER :: i
a = vector(1.0, 2.0, 2.0) PRINT *, 'Длина вектора:', length(a)
ALLOCATE(data(100)) data = [(REAL(i), i = 1, 100)] PRINT *, 'Сумма элементов:', SUM(data) DEALLOCATE(data) END PROGRAM main ```
¶Влияние и дальнейшее развитие
Fortran 90 стал основой для всех последующих стандартов языка. Стандарт Fortran 95 (ISO/IEC 1539-1:1997) был преимущественно уточняющим и исправляющим, добавив лишь несколько незначительных возможностей, таких как конструкция FORALL. Fortran 2003 добавил поддержку объектно-ориентированного программирования, взаимодействие с языком C и улучшенную работу с IEEE-арифметикой. Fortran 2008 и Fortran 2018 продолжили развитие параллельных вычислений (Coarrays) и добавили новые встроенные функции.
Несмотря на почтенный возраст, Fortran 90 и его наследники остаются востребованными в научном сообществе. Код, написанный на Fortran 90, лежит в основе множества библиотек численного анализа, таких как LAPACK, и продолжает использоваться в климатическом моделировании, вычислительной гидродинамике, квантовой химии и других областях, требующих максимальной производительности вычислений.
¶Критика
Основной претензией к Fortran 90 была его громоздкость и сложность для изучения по сравнению с предшественником. Многие программисты, привыкшие к старому формату, с трудом переходили на новые конструкции. Кроме того, обратная совместимость с Fortran 77 привела к сосуществованию двух стилей написания кода в одном проекте, что усложняло чтение и поддержку программ. Некоторые исследователи отмечали, что введение модулей и производных типов было выполнено менее элегантно, чем в языке Ada или Modula-2, однако для своего времени это был значительный шаг вперёд.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →
