Фортран
Фортран (Fortran) - первый язык программирования высокого уровня, имеющий транслятор. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM (язык Планкалкюль, претендующий на пальму первенства, был изобретён ещё в 1945 году, но не был реализован вплоть до 2000 года). Название Fortran является сокращением от FORmula TRANslator (переводчик формул). Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана — большое количество написанных на нём программ и библиотек подпрограмм. Среди учёных, например, ходит такая присказка, что любая математическая задача уже имеет решение на Фортране, и, действительно, можно найти среди тысяч фортрановских пакетов и пакет для перемножения матриц, и пакет для решения сложных интегральных уравнений, и многие, многие другие. Ряд таких пакетов создавался на протяжении десятилетий и популярен в научной среде по сей день, например — IMSL.
Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования.
Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо
документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках
программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования
FORTRAN-кода на современные языки программирования.
Современный Фортран (Fortran 95 и Fortran 2003) приобрёл черты, необходимые для эффективного программирования
для новых вычислительных архитектур, позволяет применять современные технологии программирования, в частности, ООП.
Эволюция стандартов языка
Фортран — жёстко стандартизированный язык, именно поэтому он легко переносится на различные платформы. Новые
стандарты языка в значительной мере сохраняют преемственность с более старыми, что позволяет использовать коды
ранее написанных программ и их модифицировать.
FORTRAN 66 (1972)
На базе стандарта фирмы IBM FORTRAN IV
FORTRAN 77 (1980)
Введено множество улучшений:
- Введены операторы открытия и закрытия файла (OPEN, CLOSE) и вывода на стандартное устройство — PRINT.
- Добавлены строковый тип данных и функции для его обработки.
- Введён блочный оператор IF и конструкция IF THEN — ELSE IF THEN — END IF, а также оператор включения фрагмента программы INCLUDE.
- Введена возможность работы с файлами прямого доступа.
- Увеличена максимальная размерность массива с 3 до 7. Сняты ограничения на индексы массива.
- Усовершенствованы и расширены возможности работы с процедурами.
- Введено понятие внутреннего файла (каковыми являются массивы, числовые и строковые переменные). Внутренние файлы позволяют, в частности, осуществлять преобразование число-строка и строка-число стандартным операторами чтения и записи READ и WRITE.
Fortran 90 (1991)
Значительно переработан стандарт языка.
- Введён свободный формат написания кода. Появились дополнительные описания IMPLICIT NONE, TYPE, ALLOCATABLE, POINTER, TARGET, NAMELIST.
- Введены управляющие операторы и конструкции. Добавлены DO … END DO (вместо завершения цикла меткой), DO WHILE, оператор передачи управления на начало цикла CYCLE, конструкция выбора SELECT CASE (для замены громоздких конструкций IF и операторов GOTO), а также заключительный оператор программной единицы, модульной или внутренней процедуры END.
- Введён инструментарий указателей и функции для работы с оперативной памятью (по аналогии с языком С).
- Введены операторы работы с динамической памятью (ALLOCATE, DEALLOCATE, NULLIFY).
- Добавлены программные компоненты MODULE, PRIVATE, PUBLIC, CONTAINS, INTERFACE, USE, INTENT.
- Введено маскирование присваивания массивов (присваивание при выполнении наложенного на элементы массива логического условия без использования операторов условия), а также работа с сечениями массивов. Введён оператор и конструкция WHERE для частичной замены циклов (правая часть оператора присваивания не изменяется). Маскирование присваивания распространяется практически на все операторы, конструкции и функции, оперирующие с массивами.
- Стандартные операции присваивания, сложения, вычитания, а также деления и умножения на число распространены на массивы и их секции, определяемые сечениями. В этом случае осуществляется поэлементное присваивание.
- Появились новые встроенные функции, в первую очередь для работы с массивами. Функции для вычислений в массивах: ALL(лог. произведение) и MASK(логическое сложение), COUNT(число истинных элементов), PRODUCТ(произведение элементов массива), SUM(сложение элементов массива), DOT_PRODUCT (скалярное произведение), MATMUL (умножение матриц). Добавились справочные функции, а также функции переформирования и свёртки массивов.
- В языке появились элементы ООП. Введены производные типы данных. Отдельно объявлен список устаревших черт языка, предназначенных для удаления в будущем.
- Добавлены дополнительные функции для работы со строковыми данными, в частности, функции TRIM (удаление завершающих пробелов) и REPEAT(кратное копирование строки) и функции выравнивания по левой и правой границам.
Fortran 95 (1997)
Коррекция предыдущего стандарта. Введён оператор и конструкция FORALL, позволяющие более гибко, чем оператор и
конструкция WHERE, присваивать массивы и заменять громоздкие циклы. FORALL позволяет заменить любое присваивание
сечений или оператор и конструкцию WHERE, в частности, обеспечивает доступ к диагонали матрицы. Данный оператор
считается перспективным в параллельных вычислениях, способствуя более эффективному, чем циклы, осуществлению
распараллеливания.
Fortran 2003 (2004)
Дальнейшее развитие поддержки ООП в языке. Взаимодействие с операционной
системой. Добавлены также следующие возможности:
- Асинхронный ввод-вывод данных.
- Средства взаимодействия с языком C.
- Усовершенствование динамического размещения данных.
Fortran 2008 (2010)
Стандартом предполагается поддержка средствами языка параллельных вычислений (Co-Arrays Fortran). Также
предполагается увеличить максимальную размерность массивов до 15, добавить встроенные специальные математические
функции и др.
Возможности и структура программы
Фортран имеет достаточно большой набор встроенных математических функций, поддерживает работу с целыми, вещественными и комплексными числами высокой точности. Выразительные средства языка изначально были весьма бедны, поскольку Фортран был одним из первых языков высокого уровня. В дальнейшем в Фортран были добавлены многие лексические конструкции, характерные для структурного, функционального и даже объектно-ориентированного программирования.
Перфокарта с разметкой колонок для Фортрана.
Структура программ изначально была ориентирована на ввод с перфокарт и имела ряд удобных именно для этого случая свойств. Так, 1-я
колонка служила для маркировки текста как комментария (символом C), с 1-й по 5-ю располагалась
область меток, а с 7-й по 72-ю располагался собственно текст оператора или комментария. Колонки с 73-й по 80-ю
могли служить для нумерации карт (чтобы восстановить случайно рассыпавшуюся колоду) или для краткого
комментария, транслятором они игнорировались. Если текст оператора не вписывался в отведённое пространство (с
7-й по 72-ю колонку), в 6-й колонке следующей карты ставился признак продолжения, и затем оператор продолжался
на ней. Расположить два или более оператора в одной строке (карте) было нельзя. Когда перфокарты ушли в историю,
эти достоинства превратились в серьёзные неудобства.
Именно поэтому в стандарт Фортрана, начиная с Fortran 90, в добавление к фиксированному формату исходного текста
появился свободный формат, который не регламентирует позиции строки, а также позволяет записывать более одного
оператора на строку. Введение свободного формата позволило создавать код, читаемость и ясность которого не уступает коду, созданному при помощи
других современных языков программирования, таких как C или Java.
Своего рода «визитной карточкой» старого Фортрана является огромное количество меток, которые использовались как
в операторах безусловного перехода GOTO, так и
в операторах циклов, и в операторах описания форматного ввода/вывода FORMAT. Большое количество меток и
операторов GOTO часто делало программы на Фортране трудными для понимания.
Именно этот негативный опыт стал причиной, по которой в ряде современных языков программирования (например, Java) метки и связанные с ними операторы
безусловного перехода сильно видоизменены.
Однако современный Фортран избавлен от избытка меток за счёт введения таких операторов, как DO … END DO, DO
WHILE, SELECT CASE. Более того, в современных стандартах языка оставлен лишь классический оператор GOTO,
применяемый во многих языках и поныне. Вычисляемый оператор GOTO, а также конструкция ENTRY —
множественного входа в процедуры, были исключены.
Также к положительным чертам современного Фортрана стоит отнести большое количество встроенных операций с
массивами и гибкую поддержку массивов с необычной индексацией.
Hello, World!
Свободный формат:
program hello
print *, "Hello, World!"
end
Замечания:
- Оператор PROGRAM не является обязательным. Строго говоря, единственный обязательный оператор Фортран-программы — оператор END.
- Выбор прописных или строчных букв для написания операторов программы произволен. С точки зрения современных стандартов языка Фортран, множество прописных букв и множество строчных букв при написании операторов языка совпадают.
Взаимодействие с другими языками
Многие системы программирования позволяют компоновать полученные в результате трансляции фортрановской программы объектные файлы с объектными файлами, полученными от компиляторов с других языков, что позволяет создавать более гибкие и многофункциональные приложения. Для языка Фортран также доступно большое количество библиотек, содержащих как подпрограммы решения классических вычислительных задач (LAPACK, IMSL, BLAS), задач организации распределённых вычислений (MPI, pvm), так и задач построения графических интерфейсов (Quickwin, FORTRAN/TK) или доступа к СУБД (Oracle).
Фортран в СССР
Фортран в СССР появился
позже, чем на Западе, поскольку поначалу в СССР более перспективным языком считался Алгол. Во внедрении
Фортрана большую роль сыграло общение советских физиков (в частности Леонтович А. Л.) со своими коллегами из CERN, где в 1960-х годах почти все расчёты
велись с использованием программ на Фортране.
Первый советский компилятор с Фортрана был создан в 1967 году для машины Минск-2, однако он не получил большой известности. Широкое внедрение
Фортрана началось после создания в 1968 году компилятора ФОРТРАН-ДУБНА для машины БЭСМ-6. Фортран —
основной язык для АСВТ и СМ ЭВМ, часто
использовался вместе с препроцессором РАТФОР. Машины ЕС ЭВМ,
появившиеся в 1972 году,
уже изначально имели транслятор Фортрана («позаимствованный» с IBM/360 вместе с другим программным
обеспечением).
В 1970x в ИПМ была разработана графическая библиотека ГРАФОР («ГРАфическое
расширение ФОРтрана»).