Язык программирования fortran (фортран). Язык программирования Фортра́н (Fortran)

Fortran (также FORTRAN) это язык программирования , разработанный в начале 1950-х годов и используемый до сих пор. Название является сокращением от "FORmula TRANslator". Ранние версии языка были известны как FORTRAN, но буквы перестали быть заглавными начиная с версии Fortran 90. Официальные стандарты языка теперь именуют язык как "FORTRAN".

>Fortran в основном используется для научных расчетов и численного анализа. Хотя первоначально это был процедурный язык, но в последние версии Fortran включили некоторые функции для поддержки объектно-ориентированного программирования для начинающих.

Первый компилятор FORTRAN был разработан для IBM 704 в 1954-57 в команде IBM под руководством Джона Бэкуса (John W. Backus). Это было оптимизирующий компилятор, потому что авторы рассудили, что никто не будет использовать язык, даже при изучении программирования для чайников, если его производительность не будет сравнима с ассемблером.

Язык получил широкое распространение в среде ученых и использовался для написания программ с интенсивными численными операциями, которые вынуждали создателей компиляторов Фортрана усердно переписывать код компиляторов, чтобы те генерировали более быстрый код. Сегодня существует сножество поставщиков высокопроизводительных компиляторов для Fortran. Многие достижения в области теории и конструирования компиляторов были мотивированы необходимостью генерировать хороший код для Fortran программ как полагается для основ программирования.

Известно несколько версий языка, в том числе известные FORTRAN IV (также известный как FORTRAN 66), Fortran 77 и Fortran 90. Последний формальный стандарт для языка, опубликованный в 1997 году, известен как Fortran 95. Версии языка от IBM никогда не были так популярны, как, разработанные другими компаниями, и это особенно касается FORTRAN IV - WATFOR, версия FORTRAN IV, разработанная в Университете Ватерлоо в Канаде, была наиболее востребованной, поскольку выводила лучше остальных выводила сообщения об ошибках компиляции. Точно также, программное обеспечение для автоматической генерации блок-схем из FORTRAN программ было разработано за пределами IBM

Первоначально, язык опирался на точность форматирования исходного кода и интенсивное использования числовые состояния и оператор GOTO. Эти причуды были удалены из новых версий языка. Последующие версии также представили "современные" концепции программирования, такие как комментарии в исходном коде и вывод текста, операторы IF-THEN-ELSE (в FORTRAN 77), рекурсия (в Fortran 90), и параллельные вычисления, в то же время пытаясь сохранить в Fortran "постный" профиль и высокую производительность. Среди самых популярных основанных на Fortran языках, можно выделить SAS, предназначенного для получения статистических отчетов, и SIMSCRIPT, для моделирования процессов массового обслуживания.

Продавцы высокопроизводительных научных компьютеров (Burroughs, CDC, Cray, IBM, Texas Instruments) добавили расширения для Fortran, чтобы включить использование специальных аппаратных особенностей, таких как: кэш инструкций, процессор pipe-соединений, векторных массивов и т. д. Например, один из Fortran компиляторов IBM (H Extended IUP) содержал уровень оптимизации, которая заставляла инструкции машинного кода держать несколько внутренних блоков арифметической занятыми все время. Другим примером является CFD, особый "вариант" Фортран, разработанный специально для суперкомпьютера ILLIAC IV, работающий в исследовательском центре NASA Ames. Эти расширения, либо исчезли с течением времени или же эти элементы были включенны в основной стандарт; основным расширением является OpenMP, которое является кросс-платформенной расширением для доступа к общей памяти. Еще одно из новых расширений, CoArray Fortran, призван способствовать развитию параллельного программирования и .

Первая попытка разработки на Erlang новичка может сильно расстроить потому, что синтаксис этого языка считается тайнописью многими программистами, которые начинали изучение с современных языков. Трудно писать лексический анализатор, когда всего один ошибочный символ может привести к ошибке времени выполнения, а не ошибки компиляции, если указанные конструкции не используются. В некоторых самых ранних версиях, не было объектов (ООП), которые рассматриваются в качестве полезных атрибутов программирования в современных условиях, или, например, отсутствовало динамическое распределение памяти. В то же время, синтаксис языка Фортран был применим к научным работам и вычислениям, связанным операциями над числами, а многие из его недостатков были учтены в более поздних версиях. Например, Fortran 95 имеет очень короткие команды для выполнения математических операций с матрицами и массивами, которые не только значительно улучшает читаемость программы, но также дает полезную информацию для компилятора чтобы она могла векторизовать операции. По этим причинам, Fortran не часто используется за пределами научных и инженерных вычислений, он остается языком для высокой производительности численных вычислений.

Алфавит - в программировании – система неразложимых, уверенно отличимых друг от друга символов (букв, цифр, знаков препинания и др. символов), используемых для построения языков программирования.

Синтаксис - сторона языка программирования, которая описывает структуру программ как наборов символов. Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения различным синтаксическим конструкциям.

Сема́нтика - в программировании - система правил определения поведения отдельных языковых конструкций. Семантика определяет смысловое значение предложений алгоритмического языка.

Языки программирования низкого уровня – Автокод, Ассемблер,

Языки программирования высокого уровня -Фортран, Алгол, Кобол, Паскаль, Бейсик, Си++, Пролог

Языки программирования сверхвысокого уровня – APL, Алгол-68

Вычислительные Языки программирования - Фортран, Паскаль, Алгол, Бейсик, Си

Языки символьной обработки – Лисп, Пролог, Снобол и др.

Языки первого поколения:

Машинные коды были языком программирования первого поколения

Языки второго поколения:

Ассемблер

Языки третьего поколения:

эти языки часто обозначаются как языки «высокого» уровня.

Языки четвертого поколения:

Бейсик, Кобол, Си и Паскаль

Языки программирования пятого поколения:

Пролог, ЛИСП, Си++, Visual Basic, Delphi.

Язык программирования Фортра́н (Fortran)

Первый язык программирования высокого уровня, имеющий транслятор. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM. Название Fortran является акронимом от FORmula TRANslator (переводчик формул). Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана - большое количество написанных на нём программ и библиотек подпрограмм. Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования.

Современный Фортран (Fortran 95 и Fortran 2003) приобрёл черты, необходимые для эффективного программирования для новых вычислительных архитектур, позволяет применять современные технологии программирования, в частности, ООП.

Эволюция стандартов языка

Фортран - жёстко стандартизированный язык, именно поэтому он легко переносится на различные платформы. Новые стандарты языка в значительной мере сохраняют преемственность с более старыми, что позволяет использовать коды ранее написанных программ и их модифицировать.

FORTRAN 77 (1980)

Введено множество улучшений:

Введены операторы открытия и закрытия файла (OPEN, CLOSE) и вывода на стандартное устройство - PRINT.

Добавлены строковый тип данных и функции для его обработки.

Введён блочный оператор IF и конструкция IF THEN - ELSE IF THEN - END IF, а также оператор включения фрагмента программы INCLUDE.

Введена возможность работы с файлами прямого доступа.

Увеличена максимальная размерность массива с 3 до 7. Сняты ограничения на индексы массива.

Усовершенствованы и расширены возможности работы с процедурами.

Введено понятие внутреннего файла (каковыми являются массивы, числовые и строковые переменные). Внутренние файлы позволяют, в частности, осуществлять преобразование число-строка и строка-число стандартным операторами чтения и записи READ и WRITЕ.

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

Усовершенствование динамического размещения данных

Стандартом предполагается поддержка средствами языка параллельных вычислений (Co-Arrays Fortran). Также предполагается увеличить максимальную размерность массивов до 15, добавить встроенные специальные математические функции и др.

  • Перевод
Не знаю, как будет выглядеть язык программирования в 2000-м году, но я знаю, что называться он будет FORTRAN.
- Чарльз Энтони Ричард Хоар, ок. 1982

В индустрии Fortran сегодня используется редко – в одном из списков популярных языков он оказался на 28-м месте . Но Fortran всё ещё главный язык для крупномасштабных симуляций физических систем – то есть для таких вещей, как астрофизическое моделирование звёзд и галактик (напр. Flash), крупномасштабной молекулярной динамики, коды подсчёта электронных структур (SIESTA), климатические модели, и т.п. В области высокопроизводительных вычислений, подмножеством которых являются крупномасштабные числовые симуляции, сегодня используются лишь два языка – C/C++ и «современный Fortran» (Fortran 90/95/03/08). Популярные библиотеки Open MPI для распараллеливания кода были разработаны для двух этих языков. В общем, если вам нужен быстрый код, работающий на нескольких процессорах, у вас есть только два варианта. В современном Fortran есть такая особенность, как "coarray ", позволяющая прямо в языке работать с параллельным программированием. Coarray появились в расширении Fortran 95, а затем были включены в Fortran 2008.

Активное использование Fortran физиками часто приводит в замешательство специалистов по информатике и других не связанных с этой областью людей, которым кажется, что Fortran – исторический анахронизм.

Я хотел бы объяснить, почему Fortran всё ещё остаётся полезным. Я не призываю изучающих физику студентов учить Fortran – поскольку большинство из них будут заниматься исследованиями, им лучше заняться изучением C/C++ (или остановиться на Matlab/Octave/Python). Я хотел бы пояснить, почему Fortran всё ещё используется, и доказать, что это не только из-за того, что физики «отстают от моды» (хотя иногда это так и есть – в прошлом году я видел студента-физика, работавшего с кодом Fortran 77, при этом ни он, ни его руководитель ничего не слышали про Fortran 90). Специалисты по информатике должны рассматривать преобладание Fortran в числовых вычислениях как вызов.

Перед тем, как углубиться в тему, я хочу обсудить историю, поскольку, когда люди слышат слово «Fortran», они сразу представляют себе перфокарты и код с пронумерованными строками. Первая спецификация Fortran была написана в 1954 году. Ранний Fortran (тогда его название писалось заглавными буквами, FORTRAN), был, по современным меркам, адским языком, но это был невероятный шаг вперёд от предыдущего программирования на ассемблере. На FORTRAN часто программировали при помощи перфокарт, как об этом без удовольствия вспоминает профессор Мириам Форман из университета Стони Брук. У Fortran было много версий, самые известные из которых – стандарты 66, 77, 90, 95, 03 и 08.

Часто говорят, что Fortran до сих пор используют из-за его скорости. Но самый ли он быстрый? На сайте benchmarksgame.alioth.debian.org есть сравнение C и Fortran в нескольких тестах среди многих языков. В большинстве случаев Fortran и C/C++ оказываются самыми быстрыми. Любимый программистами Python часто отстаёт в скорости в 100 раз, но это в порядке вещей для интерпретируемого кода. Python не подходит для сложных числовых вычислений, но хорошо подходит для другого. Что интересно, C/C++ выигрывает у Fortran во всех тестах, кроме двух, хотя в целом по результатам они мало отличаются. Тесты, где Fortran выигрывает, наиболее «физические» – это симуляция системы из n тел и расчёт спектра. Результаты зависят от количества ядер процессора, например, Fortran немного отстаёт от C/C++ на четырёхъядерном. Тесты, в которых Fortran сильно отстаёт от C/C++, большую часть времени занимаются чтением и записью данных, и в этом отношении медлительность Fortran известна.

Так что, C/C++ настолько же быстрый, насколько Fortran, а иногда и немного быстрее. Нас интересует, «почему профессора физики продолжают советовать своим студентам использовать Fortran вместо C/C++?»

У Fortran есть унаследованный код

Благодаря долгой истории Fortran, неудивительно, что на нём написаны горы кода по физике. Физики стараются минимизировать время на программирование, поэтому, если они найдут более ранний код, они будут его использовать. Даже если старый код неудобочитаемый, плохо документированный и не самый эффективный, чаще использовать старый проверенный, чем писать новый. Задача физиков – не писать код, они пытаются понять природу реальности. У профессоров унаследованный код всегда под рукой (часто этот код они сами и писали десятилетия назад), и они передают его своим студентам. Это сохраняет их время и удаляет неопределённости из процесса устранения ошибок.

Студентам-физикам изучать Fortran легче, чем C/C++

Я думаю, что изучать Fortran легче, чем C/C++. Fortran 90 и C очень похожи, но на Fortran писать проще. C – язык сравнительно примитивный, поэтому физики, избирающие себе C/C++, занимаются объектно-ориентированным программированием. ООП может быть полезным, особенно в крупных программных проектах, но изучать его гораздо дольше. Нужно изучать такие абстракции, как классы и наследование. Парадигма ООП очень отличается от процедурной, используемой в Fortran. Fortran основан на простейшей процедурной парадигме, более приближенной к тому, что происходит у компьютера «под капотом». Когда вы оптимизируете/векторизуете код для увеличения скорости, с процедурной парадигмой легче работать. Физики обычно понимают, как работают компьютеры, и мыслят в терминах физических процессов, например, передачи данных с диска в RAM, а из RAM в кэш процессора. Они отличаются от математиков, предпочитающих размышлять в терминах абстрактных функций и логики. Также это мышление отличается от объектно-ориентированного. Оптимизация ООП-кода более сложна с моей точки зрения, чем процедурного. Объекты – очень громоздкие структуры по сравнению со структурами данных, предпочитаемыми физиками: массивами.

Лёгкость первая: работа Fortran с массивами

Массивы, или, как их зовут физики, матрицы, находятся в сердце всех физических вычислений. В Fortran 90+ можно найти много возможностей для работы с ними, схожих с APL и Matlab/Octave. Массивы можно копировать, умножать на скаляр, перемножать между собой очень интуитивным образом:

A = B A = 3.24*B C = A*B B = exp(A) norm = sqrt(sum(A**2))
Здесь, A, B, C – массивы некоторой размерности (допустим, 10x10x10). C = A*B даёт нам поэлементное перемножение матриц, если A и B одного размера. Для матричного умножения используется C = matmul(A,B). Почти все внутренние функции Fortran (Sin(), Exp(), Abs(), Floor(), и т.д.) принимают массивы в качестве аргументов, что приводит к простому и чистому коду. Похожего кода в C/C++ просто нет. В базовой реализации C/C++ простое копирование массива требует прогона for циклов по всем элементам или вызова библиотечной функции. Если скормить массив не той библиотечной функции в С, произойдёт ошибка. Необходимость использования библиотек вместо внутренних функций означает, что итоговый код не будет чистым и переносимым, или лёгким в изучении.

В Fortran доступ к элементам массива работает через простой синтаксис A, когда в C/C++ нужно писать A[x][y][z]. Элементы массивов начинаются с 1, что соответствует представлениям физиков о матрицах, а в массивах C/C++ нумерация начинается с нуля. Вот ещё несколько функций для работы с массивами в Fortran.

A = (/ i , i = 1,100 /) B = A(1:100:10) C(10:) = B
Сначала создаётся вектор A через подразумеваемый цикл do, также известный, как конструктор массивов. Затем создаётся вектор B, состоящий из каждого 10-го элемента А, при помощи шага в 10. И, наконец, массив B копируется в массив С, начиная с 10-го элемента. Fortran поддерживает объявления массивов с нулевыми или отрицательными индексами:

Double precision, dimension(-1:10) :: myArray
Отрицательный индекс сначала выглядит глупо, но я слышал об их полезности – например, представьте, что это дополнительная область для размещения каких-либо пояснений. Fortran также поддерживает векторные индексы . Например, можно передать элементы 1,5 и 7 из массива A размерностью N x 1 в массив B размерностью 3 x 1:

Subscripts = (/ 1, 5, 7 /) B = A(subscripts)
Fortran поддерживает маски массивов во всех внутренних функциях. К примеру, если нам нужно посчитать логарифм всех элементов матрицы, больших нуля, мы используем:

Log_of_A = log(A, mask= A .gt. 0)
Или мы можем в одну строку обнулить все отрицательные элементы массива:

Where(my_array .lt. 0.0) my_array = 0.0
В Fortran легко динамически размещать и освобождать массивы. К примеру, для размещения двумерного массива:

Real, dimension(:,:), allocatable:: name_of_array allocate(name_of_array(xdim, ydim))
В C/C++ для этого требуется следующая запись :

Int **array; array = malloc(nrows * sizeof(double *)); for(i = 0; i < nrows; i++){ array[i] = malloc(ncolumns * sizeof(double)); }
Для освобождения массива в Fortran

Deallocate(name_of_array)
В C/C++ для этого

For(i = 0; i < nrows; i++){ free(array[i]); } free(array);

Лёгкость вторая: не нужно беспокоиться об указателях и выделении памяти

В языках вроде C/C++ все переменные передаются по значению, за исключением массивов, передающихся по ссылке. Но во многих случаях передача массива по значению имеет больше смысла. Например, пусть данные состоят из позиций 100 молекул в разные периоды времени. Нам необходимо анализировать движение одной молекулы. Мы берём срез массива (подмассив) соответствующий координатам атомов в этой молекуле и передаём его в функцию. В ней мы будем заниматься сложным анализом переданного подмассива. Если бы мы передавали его по ссылке, переданные данные не располагались бы в памяти подряд. Из-за особенностей доступа к памяти работа с таким массивом была бы медленной. Если же мы передадим его по значению, мы создадим в памяти новый массив, расположенный подряд. К радости физиков, компилятор берёт на себя всю грязную работу по оптимизации памяти.

В Fortran переменные обычно передаются по ссылке, а не по значению. Под капотом компилятор Fortran автоматически оптимизирует их передачу для повышения эффективности. С точки зрения профессора в области оптимизации использования памяти компилятору стоит доверять больше, чем студенту! В результате физики редко используют указатели, хотя в Fortran-90+ они есть .

Ещё несколько примеров отличий Fortran и C

В Fortran есть несколько возможностей для управления компилятором при поиске ошибок и оптимизации. Ошибки в коде можно отловить на этапе компиляции, а не при выполнении. К примеру, любую переменную можно объявить как параметр, то есть константу.

Double precision, parameter:: hbar = 6.63e-34
Если параметр в коде меняется, компилятор возвращает ошибку. В С это называется const

Double const hbar = 6.63e-34
Проблема в том, что const real отличается от простого real. Если функция, принимающая real, получит const real, она вернёт ошибку. Легко представить, как это может привести к проблемам функциональной совместимости в коде.

В Fortran также есть спецификация intent, сообщающая компилятору, является ли передаваемый в функцию аргумент входным, выходным, или одновременно входным и выходным параметром. Это помогает компилятору оптимизировать код и увеличивает его читаемость и надёжность.

В Fortran есть и другие особенности, используемые с разной частотой. К примеру, в Fortran 95 есть возможность объявлять функции с модификатором pure [чистый]. У такой функции нет побочных эффектов – она меняет только свои аргументы, и не меняет глобальные переменные. Особым случаем такой функции служит функция elemental, которая принимает и возвращает скаляры. Она используется для обработки элементов массива. Информация о том, что функция pure или elemental, позволяет компилятору проводить дополнительную оптимизацию, особенно при распараллеливании кода.

Чего ждать в будущем?

В научных подсчётах Fortran остаётся основным языком, и в ближайшее время исчезать не собирается. На опросе среди использующих этот язык посетителей конференции «2014 Supercomputing Convention» 100% из них сказали, что собираются использовать его в ближайшие 5 лет. Из опроса также следует, что 90% использовали смесь из Fortran и C. Предвидя увеличение смешивания этих языков, создатели спецификации Fortran 2015 включают в неё больше возможностей для функциональной совместимости кода. Код Fortran всё чаще вызывается из кода на Python. Специалисты по информатике, критикующие использование Fortran, не понимают, что этот язык остаётся уникально приспособленным для того, в честь чего он был назван - FOrmula TRANslation, перевода формул, то есть, преобразования физических формул в код. Многие из них не догадываются, что язык развивается и постоянно включает всё новые возможности.

Называть современный Fortran 90+ старым, это всё равно, что называть старым C++, из-за того, что C разработали в 1973. С другой стороны, даже в самом новом стандарте Fortran 2008 существует обратная совместимость с Fortran 77 и большей частью Fortran 66. Поэтому разработка языка сопряжена с определёнными трудностями. Недавно исследователи из MIT решили преодолеть эти трудности, разработав с нуля язык для HPC по имени Julia , впервые вышедший в 2012 году. Займет ли Julia место Fortran, ещё предстоит увидеть. В любом случае, подозреваю, что это будет происходить очень долго.

Теги:

  • fortran
  • научное программирование
Добавить метки

Впервые я услышал о Фортране в раннем детстве от отца. Он рассказывал, что в 70-х годах ему приходилось часами выстаивать очереди к едва ли не единственной ЭВМ в ВУЗе, дабы используя перфокарту запустить примитивный код. Признаюсь честно, с тех пор и до недавнего времени (несмотря на полученное техническое образование) я пребывал в полной уверенности, что Фортран остался где-то далеко там, в мире, где носителями информации выступают странные картонки с дырками, а компьютеры стоят так дорого, что воспринимаются, как настоящий аттракцион.

Каково же было моё удивление, когда я узнал, что Фортран не просто ещё где-то используется, он развивается, востребован и по-прежнему актуален. Если вы также до этого момента полагали, что Фортран давно носит статус мертвеца, то вот вам несколько интересных фактов, почему он ещё ходит.

Пережил минимум 10 обновлений

В действительности, тот Фортран о котором вы слышите от преподавателей в школе или университете был создан в период с 1954 по 1957 года. Он вошёл в историю, как первый полностью реализованный язык высокого уровня, совершил маленький прорыв в IT-мире, но по сути был не слишком удобен и функционален. “Допиливать” его в IBM принялись практически сразу, уже в 1958 году появился FORTRAN II и параллельно FORTRAN III. Но более-менее приличный вид он приобрёл лишь в 70-х, когда появились достаточно портативные машины, когда был разработан полноценный стандарт IBM FORTRAN IV, и появился FORTRAN 66 с циклами, метками, условными операторами, командами ввода/вывода и прочими по современным меркам примитивными возможностями.

Последняя версия появилась в 2010 году, её название Fortran 2008 (как видите, в ходе истории, название перестало писаться исключительно заглавными буквами), отличительной чертой которой являются всевозможные параллельные вычисления, положительно сказывающиеся, как на скорости обработки данных, так и на размерности обрабатываемых массивов. Кроме того, на 2018 год запланирован выход Fortran 2015. Из анонса следует, что в нём будет улучшена интеграция с С, а также устранены текущие недоработки.

Входит в 30 самых популярных языков программирования

На сегодняшний день 0,743% запросов в поисковых системах относительно языков программирования посвящену именно Фортрану. Чтобы вы поняли, насколько это круто, просто представьте, что такие языки, как Lisp, Scala, Clojure, LabVIEW, Haskell, Rust и VHDL, находятся в рейтинге ниже.

Может работать на Android (и не только)

Компиляторы для Фортана за его долгую историю разрабатывались такими компаниями, как IBM, Microsoft, Compaq, HP, Oracle, благодаря чему сегодня язык совместим с Windows, Mac OS и Linux. Более того, удобное приложение с компилятором теперь можно взять с собой, благодаря приложению CCTools для Android. Можно запустить компилятор и на вашем iPhone, но в этом случае немного поколдовать.

Конкурирует с MATLAB

Пока в этом тексте не было сказано главного, а именно области применения Фортрана. Так вот это язык, востребованный в науке и инженерии, полностью или частично применяемый для прогноза погоды, океанографии, молекулярной динамики, сейсмологического анализа. В общем, это самый настоящий “Data Science”-язык родом из времени, когда в массовую продажу впервые поступил калькулятор.

При этом стоит признать, что частично своей популярностью Фортран обязан наследию. За долгие годы практически без конкуренции язык оброс огромной базой клиентов, библиотек и надстроек. Кроме того, каждая следующая версия Фортрана неизбежно поддерживает предыдущие. Поэтому сложилась ситуация, когда отсутствуют какие-либо существенные факторы, для того, чтобы учёные и инженеры вынуждены были отказаться от этого союза.

По сути, главным конкурентом Фортрана на сегодняшний день является MATLAB, который более универсален, более функционален и удобен. Однако MATLAB при этом имеет строгие ограничения по используемому ПО, достаточно дорого стоит и в большинстве случаев просто излишен.

Имеет относительно безоблачное будущее

Безусловно, мы не можем предсказать, что будет через 10-20 лет, и как за это время изменится IT-мир. Однако, если посмотреть на возможных новых конкурентов для Фортрана (таких, как Go), их главный недостаток - универсализация. То есть создатели Fortran очень быстро наметили целевую аудиторию в виде учёных, их мнение и пожелания имеют приоритетное значение. Поэтому трудно представить, что завтра они откажутся от своего “спецзаказа” ради какой-то модной тенденции. Именно на основании этого можно утверждать, что ещё одно поколение Фортран отходит смело.

А потом они просто выпустят новую версию.

* "Магия ПК" 2000 №6(28), С. 49–50.

В 1955 году увидел свет первый алгоритмический язык высокого уровня FORTRAN (FORmula TRANslator – транслятор формул). Он использовался в основном для решения научно-технических и инженерных задач, а разработали его сотрудники фирмы IBM под руководством Джона Бэкуса . Чуть позже, в 1957 году, Джон Бэкус и его сотрудники установили в IBM (Beстингхауз) первый компилятор языка Фортран. Программисты, ранее работавшие исключительно на Ассемблере, скептически относились к возможностям высокопроизводительного языка высокого уровня, поэтому основным критерием при разработке стандартов на Фортран и создания компиляторов с этого языка была эффективность исполняемого кода. Кстати, термин "компилятор" тогда еще широко не использовался, хотя уже был введен Грейс Хоппер – единственной в США женщиной-адмиралом, которую называли также "первой леди программирования и бабушкой Кобола".
Большинство операторов Фортрана транслировались непосредственно в одну–две машинные команды, простые синтаксические конструкции и активное использование меток и goto позволяло получить очень быстрый код, и в результате программы на Фортране подчас работали быстрее ассемблерных. Сама внутренняя структура оттранслированной программы была также очень простой – весь код, все подпрограммы и все данные вместе с общим блоком размещались исключительно в статической памяти, из-за чего, правда, невозможно было использовать рекурсию.
Поскольку Фортран был первым языком высокого уровня, отвечающим нуждам большинства пользователей того времени, да еще и простым в изучении, распространился он очень быстро.
Из-за широкого распространения этого языка и появления множества Фортран-программ (преимущественно вычислительного характера) насущным стал вопрос его стандартизации. Сначала это был стандарт Fortran IV 1964 года, затем, по мере появления новых идей, в 1978 году был принят новый стандарт Fortran 77 (f77) с большим числом более современных и гибких синтаксических расширений. Сегодня наиболее распространенным вариантом Фортрана являются Fortran 90 (f90) и Fortran 95 . Группа энтузиастов заканчивает работу над суперверсией языка F2k, которая будет опубликована в этом году.
Хотя в новые версии языка вносились подчас как ненужные дополнения (например, расширения, связанные с динамической аллокацией памяти), так и полезные, типа модульной организации программы, работы с частями массивов и др., сегодня этот язык нельзя назвать перспективным для изучения, так как синтаксис его значительно устарел.
Однако тем, кому довольно часто приходится решать различные вычислительные задачи, совсем не обязательно каждый раз брать в руки учебник по математике и "начинать с нуля". В 90% подобных случаев то, что вы ищете, уже давно реализовано и отлажено на Фортране. Поэтому, скорее всего, жизнь Фортрану обеспечена надолго.
Есть и еще одна, сравнительно молодая ниша для Фортрана – параллельные вычисления, где строгая семантика языка позволяет получать высокопроизводительные программы. Обычно используется стандарт f90, немного расширенный набором операторов для указания пригодных к распараллеливанию частей программы. Параллельный Фортран имеет свой стандарт HPF (High Performance Fortran). Тем не менее фанаты Фортрана, девизом которых стала легендарная фраза "Зачем мне изучать другие языки, когда я могу всё написать на Фортране", ощущали его очевидную непригодность для крупномасштабных проектов, связанную с привязанностью к синтаксису 50-х годов, и пытались ввести в него модные идеи ООП, но объектный Фортран в качестве стандарта так и не появился.
Среди бесплатно распространяемых версий Фортрана наиболее известен f2c, реализованный для всех UNIX-систем и преобразующий текст Фортран-программы в Си-код. Для DOS имеется версия bcf77, распространяемая бесплатно. Из коммерческих версий в первую очередь надо отметить Microsoft Fortran, позволяющий создавать dll-библиотеки, и Watcom Fortran, генерирующий высокоэффективный код. Для задач, требующих высокой точности вычислений, предназначен компилятор фирмы MicroWay. А вообще различные по качеству компиляторы Фортрана имеются на абсолютно всех компьютерных платформах.
Однако основная заслуга Фортрана в другом. Когда появилась необходимость в разработке очень крупных проектов, недостатки Фортрана, связанные в первую очередь с "тяжелой" отладкой, стали излишне обременительны. Поэтому Фортран послужил сильнейшим стимулом для развития теории отладки и тестирования программ. Появились сотни синтаксических верификаторов Фортран-текстов, вылавливающих скрытые логические ошибки. В дальнейшем из этого направления выросли такие теоретические области программирования, как эквивалентные оптимизирующие преобразования программ, высокоуровневая компиляция, автоматическое тестирование и т.д. Так что про Фортран забывать никак нельзя. Использовать его в качестве инструментария в задачах системной интеграции, наверное, не имеет смысла, но то, что было наработано лучшими программистами за 30–40 лет, вполне может ускорить процесс разработки. По крайней мере, программных "кирпичиков" для Фортрана ныне существует несравненно больше, чем для других языков программирования. ■

* * *
Джон Бэкус родился 3 декабря 1924 в Филадельфии, штат Пенсильвания, в богатой семье, детские годы провел в Вилмингтоне. Закончив школу в 1942 году, он поступил в университет штата Вирджиния на химический факультет (по настоянию отца-химика), но спустя некоторое время перестал заниматься и в 1943 году был призван на военную службу.
Бэкус начинал служить в бригаде противовоздушной обороны в форте Stewart, штат Джорджия, но впоследствии был направлен в колледж для изучения медицины.
Некоторое время он с увлечением работал в городской больнице, но в 1946 году охладел к этой работе, оставил армию и переехал в Нью-Йорк, хотя не знал за что браться и как жить дальше.
Через некоторое время Бэкус поступил в школу подготовки радиотехников. "У меня был очень хороший преподаватель, и он попросил, чтобы я вычислил характеристики некоторых схем. Это было страшно утомительно, но крайне интересно".
Вскоре Бэкус поступил в Колумбийский университет (Нью-Йорк), чтобы изучать математику, где и получил высшее образование (1949 г.). Незадолго перед тем, как закончить обучение, он посетил компьютерный центр IBM на Мэдисон Авеню. И здесь удача во второй раз улыбнулась ему – в 1950 году Бэкус стал программистом компании IBM.
О доминировании IBM в компьютерной индустрии впервые заговорили в 1952 году. Всё началось с модели 701, известной также под именем Defence Calculator (оборонный вычислитель). Сразу после выпуска модели 701 специалисты подразделения прикладных исследований приступили к ее совершенствованию (1955–1956 годы).

Наиболее серьезные изменения предложил внести Джон Бэкус, впоследствии принимавший активное участие в создании компьютера 704. В частности, благодаря ему появилась технология так называемого "ускоренного кодирования" (speed-coding), позволившая заметно упростить написание программ для 701. "Возможность ускоренного формирования кода для машины 701, которая представляла собой одноадресный компьютер с фиксированной запятой без индексных регистров, превратила ее в систему с плавающей запятой, произвольной адресацией и индексными регистрами, – вспоминал Бэкус. – Таким образом, пользователям больше не нужно было мучиться с двоичным кодом".
Уже тогда появились первые компоненты технологии быстрого написания программ, которая используется сегодня. Фактически данная система стала предшественницей аналогичных комплексов, которые были выпущены в 50–60 годах и впоследствии вытеснены языками высокого уровня.
А в 1955 году Бэкус "изобрел" Фортран, первый машинный язык высокого уровня. Впоследствии, вспоминая этот период, Бэкус скажет: "Мы не знали, к чему стремиться, и не знали, как это сделать". Первоначально все работы планировалось завершить в начале 1954 года, однако разработка языка завершилась практически через два года.
Первая версия компилятора состояла из 25000 строк машинного кода, записанного на магнитной ленте. Каждая IBM 704 обеспечивалась копией программы с руководством по программированию на 51 странице.
В 1959 году Бэкус разработал грамматические правила для описания синтаксиса языков высокого уровня (нормальная форма Бэкуса-Наура, сокращенно БНФ).
В 1976 году Джон Бэкус был награжден Национальной медалью за вклад в науку, а с 1991 года перестал заниматься компьютерной тематикой.

Владимир Буслаев

OCR: fir-vst, 2016



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: