Fortran примеры программ. Язык программирования Фортра́н (Fortran). Чем же так замечателен Фортран

Прочие модели 05.04.2019
  • gfortran
    • gfortran 4.5.0
  • Язык программирования

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

    Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана - большое количество написанных на нём программ и библиотек подпрограмм. Среди учёных, например, ходит такая присказка, что любая математическая задача уже имеет решение на Фортране, и, действительно, можно найти среди тысяч фортрановских пакетов и пакет для перемножения матриц, и пакет для решения сложных интегральных уравнений и многие, многие другие. Ряд таких пакетов создавались на протяжении десятилетий и популярны по сей день (главным образом в научной среде).

    Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования.

    Своего рода «визитной карточкой» старого Fortran является огромное количество меток, которые использовались как в операторах безусловного перехода GOTO , так и в операторах циклов, и в операторах описания форматного ввода/вывода FORMAT . Большое количества меток и операторов GOTO часто делало программы на Фортране трудными для понимания.

    Именно этот негативный опыт стал причиной, по которой в ряде современных языков программирования (например, Java) метки и связанные с ними операторы безусловного перехода вообще отсутствуют.

    Однако современный Fortran избавлен от избытка меток за счет введения таких операторов, как DO … END DO, DO WHILE, SELECT CASE. Также к положительным чертам современного Fortran стоит отнести большое количество встроенных операций с массивами и гибкую поддержку массивов с необычной индексацией.

    Взаимодействие с другими языками

    Многие системы программирования позволяют компоновать полученные в результате трансляции программы на Fortran объектные файлы с объектными файлами, полученными от компиляторов с других языков, что позволяет создавать более гибкие и многофункциональные приложения. Для языка Фортран также доступно большое количество библиотек, содержащих как подпрограммы решения классических вычислительных задач (LAPACK, IMSL, BLAS), задач организации распределенных вычислений (MPI, pvm), так и задач построения графических интерфейсов (Quickwin, FORTRAN/TK) или доступа к СУБД (Oracle).

    Наследие Fortran

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

    Переносимость

    Поначалу переносимость для Fortran была весьма насущной проблемой, потому что не существовало ни одного единого стандарта и даже справочной информации от IBM. И компьютерные фирмы соперничали между собой, обеспечивая несовместимость для разных компиляторов. Исправило дело появление стандартов. Стандарт 1966 года устанавливал синтаксис и семантику, но продавцы продолжали внедрять несовместимые расширения. Осмотрительные программисты понимали, что использование несовместимых расширений вызовет проблемы переносимости и зачастую использовали программы наподобие «The PFORT Verifier» для выявления несовместимых расширений.

    Несовместимые расширения были не единственной проблемой. Существовал ряд проблем с численными вычислениями. Позже была развита и внедрена практически универсальная идея двоичной арифметики с плавающей запятой.

    Доступ к исполняемой среде (например, к командной строке, переменным среды) был весьма затруднителен, пока на это не обратили на это внимание в стандарте 2003 года.

    Сейчас относительно просто реализовать полностью переносимую программу на Fortran.

    Элементы синтаксиса:

    Комментарий до конца строки ! или * в первом символе строки
    Регистрозависимость Нет
    Регулярное выражение идентификатора переменной [_a-zA-Z0-9]{0-n}
    Присваивание значения переменной =
    Объявление переменной type:: variable
    Объявление переменной с присваиванием значения type:: variable = value
    Группировка выражений ()
    Блок do ... end do
    Равенство = или.EQ.
    Неравенство /= или.NE.
    Сравнение == < > <= >= <> или.LT. .GT. .LE. .GE.
    Вызов функции CALL f(a,b...)
    Вызов функции без параметров CALL f
    Последовательность конец строки
    Если - то if condition then ... end if
    Если - то - иначе if condition then ... else ... endif
    Цикл с постусловием DO ... WHILE (condition)
    Цикл for - next для диапазона целых чисел с инкрементом на 1 do label i = 1, 10
    Цикл for - next для диапазона целых чисел с декрементом на 1 do label i = 10, 1, -1

    Примеры:

    Hello, World!:

    Пример для версий Intel Visual Fortran 11.1 , g95 0.93 , gfortran 4.5.0

    Этот пример написан в свободном формате, поддерживаемом Fortran 90 и последующими стандартами, а также диалектом .

    Fortran 90-style comment program HelloWorld print * , "Hello, World!" end program HelloWorld

    Факториал:

    Пример для версий Intel Visual Fortran 11.1 , g95 0.93 , gfortran 4.5.0

    Используется итеративное определение факториала и свободный формат программы. Спецификации формата I и A используются для вывода чисел в десятичном формате и строк, соответственно. При вычислении факториалов 13-16 возникает арифметическое переполнение, не вызывающее ошибку, поэтому выводятся неправильные значения:

    13! = 1932053504
    14! = 1278945280
    15! = 2004310016
    16! = 2004189184

    program Factorial integer :: f , n f = 1 n = 0 do print "(I2, A, I10)" , n , "! = " , f n = n + 1 f = f * n if (n == 17 ) then exit end if end do end program Factorial

    Числа Фибоначчи:

    Пример для версий Intel Visual Fortran 11.1 , g95 0.93 , gfortran 4.5.0

    Используется итеративное определение чисел Фибоначчи. Самое сложное в этом примере — вывод вычисленных значений в нужном формате, в одну строку и без лишних пробелов. Спецификация формата (I3, A, $) означает, что вначале выводится целое число в десятичном формате, шириной ровно три символа, затем выводится строка, и наконец, $ подавляет перевод строки, используемый командой print по умолчанию, так что все выводится в одну строку. Отметим, что в диалекте спецификатор формата $ не является стандартным; программа работает, но при компиляции выводит предупреждение об этом.

    program Fibonacci integer :: f1 , f2 , f3 , i i = 1 f1 = 0 f2 = 1 do f3 = f2 + f1 f1 = f2 f2 = f3 i = i + 1 if (f1 < 10 ) then print "(I1, A, $)" , f1 , ", " elseif (f1 < 100 ) then print "(I2, A, $)" , f1 , ", " else print "(I3, A, $)" , f1 , ", " end if if (i == 17 ) then exit end if end do print * , "..." end program Fibonacci

    Квадратное уравнение:

    Пример для версий g95 0.93 , gfortran 4.5.0

    В примере используется встроенный тип данных complex . // — оператор конкатенации строк. Число перед скобками в описании формата означает количество раз, которые повторяется формат в скобках (в данном случае дважды — для первого и второго корней).

    program Quadratic integer :: a , b , c real :: d , p1 , p2 complex :: cp2 read (* , * ), a if (a == 0 ) then write (* , * ) "Not a quadratic equation" stop end if read (* , * ) b read (* , * ) c d = b * b - 4 * a * c p1 = - b / 2.0 / a if (abs (d ) < 1.0e-9 ) then write (* , "(A, F8.3)" ) "x = " , p1 elseif (d > 0 ) then p2 = sqrt (d ) / 2.0 / a write (* , "(2(A, F8.3))" ) "x1 = " , p1 + p2 , char (13 ) // char (10 ) // "x2 = " , p1 - p2 else cp2 = sqrt (cmplx (d )) / 2.0 / a write (* , "(2(A, F8.3, F8.3), A)" ) "x1 = (" , p1 + cp2 , ")" // char (13 ) // char (10 ) // "x2 = (" , p1 - cp2 , ")" end if end

    Hello, World!:

    Пример для версий f2c 20090411 , g95 0.93 , gfortran 4.5.0

    FORTRAN 77); первые шесть символов каждой строки зарезервированы под служебную информацию — отметки о том, что строка является комментарием или продолжением предыдущей, метки и номера строк. Стандартный набор символов Fortran не содержит символов нижнего регистра, поэтому все программы пишутся в верхнем регистре. Исключением из этого правила являются символьные константы — они могут содержать любые символы, которые поддерживаются системой.

    Первая строка дает этому фрагменту кода имя HELLO и указывает на то, что он является основной программой. Имя программы подчиняется тем же правилам, что и любые имена идентификаторов, т.е. должно начинаться с буквы и содержать не более 6 символов.

    Команда WRITE реализует вывод на печать. В скобках передается список управляющих параметров, настраивающих вывод: UNIT выбирает файл вывода (по умолчанию — консоль), FMT — формат вывода. Звездочки означают параметры по умолчанию. Имена параметров передавать не обязательно, сокращенно эта же команда выглядела бы как WRITE (*, *) ... .

    В большинстве реализаций строковая константа может заключаться как в одинарные кавычки, так и в двойные.

    A simple Hello, World! program PROGRAM HELLO WRITE (UNIT =* , FMT =* ) "Hello, World!" END

    Факториал:

    Пример для версий f2c 20090411 , g95 0.93 , gfortran 4.5.0

    Этот пример написан в фиксированном формате (стиль FORTRAN 77) и использует итеративное вычисление факториала.

    Fortran позволяет пропускать объявления переменных; в таком случае он выводит их типы сам, но, в отличие от более поздних языков, не по контексту использования переменной, а по ее имени — если первая буква названия I..N, выбирается тип INTEGER , иначе — REAL . В данном случае обе переменные целые.

    Цикл DO в данном случае соответствует циклу FOR более поздних языков: счетчик цикла N последовательно пробегает все значения от 0 до 16. Тело цикла заканчивается на строке с меткой 1 , которая указана в заголовке цикла.

    Команда PRINT использует формат вывода по умолчанию, который варьируется в зависимости от используемого компилятора.

    PROGRAM) C . Из-за этого после посимвольного заполнения строки CC , содержащей результат, остаток строки приходится заполнять пробелами вручную.

    Проверка того, что очередной символ исходной строки является буквой, слишком длинна, чтобы поместиться в одну строку (все символы строки программы, начиная с 73-ей позиции, игнорируются), поэтому ее приходится разбивать на две строки и отмечать вторую как продолжение первой (любым символом в 6 позиции).

    Операторы сравнения в FORTRAN 77 записываются как.LE. , .GE. и т.д. из-за того, что символы > и < не входят в набор символов языка; они были добавлены только в Fortran 90.

    PROGRAM CAMELC CHARACTER TEXT * 30 , CC * 30 LOGICAL LSPACE READ (* , "(A)" ) TEXT NCC = 0 LSPACE = .TRUE. DO 1 , I = 1 , LEN (TEXT ) NC = ICHAR (TEXT (I : I )) IF (NC .GE. 65 .AND. NC .LE. 90 .OR. > NC .GE. 97 .AND. NC .LE. 122 ) THEN IF (LSPACE ) THEN IF (NC .GE. 97 .AND. NC .LE. 122 ) THEN NC = NC - 32 END IF ELSE IF (NC .GE. 65 .AND. NC .LE. 90 ) THEN NC = NC + 32 END IF END IF NCC = NCC + 1 CC (NCC : NCC ) = CHAR (NC ) LSPACE = .FALSE. ELSE LSPACE = .TRUE. END IF 1 CONTINUE DO 2 , I = NCC + 1 , LEN (CC ) 2 CC (I : I ) = " " WRITE (* , * ) CC END



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

    Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования.

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

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

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

    FORTRAN 66 (1972) На базе стандарта фирмы IBM FORTRAN IV FORTRAN 77 (1980) Введено множество улучшений: Fortran 90 (1991) Значительно переработан стандарт языка. Fortran 95 (1997) Коррекция предыдущего стандарта. Введён оператор и конструкция FORALL, позволяющие более гибко, чем оператор и конструкция WHERE, присваивать массивы и заменять громоздкие циклы. FORALL позволяет заменить любое присваивание сечений или оператор и конструкцию WHERE, в частности, обеспечивает доступ к диагонали матрицы. Данный оператор считается перспективным в параллельных вычислениях, способствуя более эффективному, чем циклы, осуществлению распараллеливания . Fortran 2003 (2004) Дальнейшее развитие поддержки ООП в языке. Взаимодействие с операционной системой. Добавлены также следующие возможности: Fortran 2008 (2010) Стандартом предполагается поддержка средствами языка параллельных вычислений (Co-Arrays Fortran) . Также предполагается увеличить максимальную размерность массивов до 15, добавить встроенные специальные математические функции и др.

    Компиляторы

    С момента первоначальной разработки языка, компиляторы Фортрана производит фирма IBM. В настоящее время фирмой IBM поставляется оптимизирующий компилятор VS Fortran для мэйнфреймов IBM System z , история развития различных версий которого восходит ещё к 1964 году , а также компилятор XL Fortran для платформ на базе архитектуры PowerPC - AIX , Linux и суперкомпьютера Blue Gene (выпускалась также версия для Mac OS X , когда компьютеры Macintosh использовали процессоры PowerPC). Оба этих компилятора содержат очень сложные оптимизаторы, являющиеся результатом непрерывной научной работы специалистов IBM на протяжении полувека. На базе компилятора IBM Fortran XL фирмой Absoft, бизнес-партнёром IBM, создан и поставляется компилятор Absoft Pro Fortran для систем на базе процессоров PowerPC (Linux, Mac OS X) и Intel (Linux, Mac OS X, Windows) .

    Фонд свободного программного обеспечения GNU выпускал открытый компилятор Фортрана-77 g77, доступный практически для любой платформы и полностью совместимый с GCC . Сейчас ему на смену пришел компилятор GFortran , в котором реализованы практически все конструкции стандарта Фортран-95 и многие конструкции стандартов Фортран-2003 и Фортран-2008. Он также полностью обратно совместим с Фортран-77. Также существует независимый проект g95 по созданию на основе GCC компилятора Фортран-95.

    Возможности и структура программы

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

    Перфокарта с разметкой колонок для Фортрана.

    Структура программ изначально была ориентирована на ввод с перфокарт и имела ряд удобных именно для этого случая свойств. Так, 1-я колонка служила для маркировки текста как комментария (символом C ), с 1-й по 5-ю располагалась область меток, а с 7-й по 72-ю располагался собственно текст оператора или комментария. Колонки с 73-й по 80-ю могли служить для нумерации карт (чтобы восстановить случайно рассыпавшуюся колоду) или для краткого комментария, транслятором они игнорировались. Если текст оператора не вписывался в отведённое пространство (с 7-й по 72-ю колонку), в 6-ой колонке следующей карты ставился признак продолжения, и затем оператор продолжался на ней. Расположить два или более оператора в одной строке (карте) было нельзя. Когда перфокарты ушли в историю, эти достоинства превратились в серьёзные неудобства.

    Именно поэтому в стандарт Фортрана, начиная с Fortran 90, в добавление к фиксированному формату исходного текста появился свободный формат, который не регламентирует позиции строки, а также позволяет записывать более одного оператора на строку. Введение свободного формата позволило создавать код, читаемость и ясность которого не уступает коду, созданному при помощи других современных языков программирования, таких как или Java .

    Своего рода «визитной карточкой» старого Фортрана является огромное количество меток, которые использовались как в операторах безусловного перехода GOTO , так и в операторах циклов, и в операторах описания форматного ввода/вывода FORMAT. Большое количество меток и операторов GOTO часто делало программы на Фортране трудными для понимания.

    Именно этот негативный опыт стал причиной, по которой в ряде современных языков программирования (например, Java) метки и связанные с ними операторы безусловного перехода сильно видоизменены.

    Однако современный Фортран избавлен от избытка меток за счёт введения таких операторов, как DO … END DO, DO WHILE, SELECT CASE. Более того, в современных стандартах языка оставлен лишь классический оператор GOTO, применяемый во многих языках и поныне. Вычисляемый оператор GOTO, а также конструкция ENTRY - множественного входа в процедуры, были исключены.

    Также к положительным чертам современного Фортрана стоит отнести большое количество встроенных операций с массивами и гибкую поддержку массивов с необычной индексацией. Пример:

    Real ,dimension (: ,: ) :: V ... allocate (V(- 2 : 2 ,0 : 10 ) ) ! Выделить память под массив, индексы которого могут ! меняться в пределах от -2 до 2 (первый индекс) ! и от 0 до 10 - второй ... V (2 ,2 : 3 ) = V(- 1 : 0 ,1 ) ! Повернуть кусочек массива write(* ,* ) V(1 ,: ) ! Напечатать все элементы массива V, первый индекс которых равен 1. deallocate (V)

    Hello, World!

    Фиксированный формат (символами «␣» выделены пробелы в позициях строки с 1 по 6):

    ␣␣␣␣␣␣PROGRAM hello ␣␣␣␣␣␣PRINT* , "Hello, World!" ␣␣␣␣␣␣END

    Свободный формат:

    Program hello print * , "Hello, World!" end

    Замечания.

    • Оператор PROGRAM не является обязательным. Строго говоря, единственный обязательный оператор Фортран-программы - оператор END .
    • Выбор прописных или строчных букв для написания операторов программы произволен. С точки зрения современных стандартов языка Фортран, множество прописных букв и множество строчных букв при написании операторов языка совпадают.

    Взаимодействие с другими языками

    Многие системы программирования позволяют компоновать полученные в результате трансляции фортрановской программы объектные файлы с объектными файлами, полученными от компиляторов с других языков, что позволяет создавать более гибкие и многофункциональные приложения. Для языка Фортран также доступно большое количество библиотек, содержащих как подпрограммы решения классических вычислительных задач (LAPACK , IMSL, BLAS), задач организации распределённых вычислений (MPI , pvm), так и задач построения графических интерфейсов (Quickwin , FORTRAN/TK) или доступа к СУБД (Oracle).

    Фортран в СССР

    Примечания

    1. См., например: Netlib Repository at UTK and ORNL
    2. А. М. Горелик . Эволюция языка программирования Фортран (1957-2007) и перспективы его развития//Вычислительные методы и программирование, 2008, Т. 9, с. 53-71
    3. Бартеньев О.В. Современный Фортран . - М .: Диалог МИФИ, 2005. - ISBN 5-86404-113-0
    4. А. М. Горелик. объектно-ориентированное программирвание на современном Фортране
    5. С. Д. Алгазин, В. В. Кондратьев. Программирование на Visual Fortran. - М .: «Диалог МИФИ », 2008. - 448 с. - ISBN 5-8243-0759-8
    6. Горелик А. М.Новости
    7. VS FORTRAN
    8. XL Fortran for Linux
    9. Absoft Pro Fortran Compiler Suites General Overview
    10. Sun Studio - Benchmarks
    11. Очерк Александра Расторгуева о появлении Фортрана в Дубне
    12. История компьютерной графики в России

    Литература

    • Fortran. Programmer"s Reference Manual. The Fortran Automatic Coding System for the IBM 704 EDPM . - IBM Corp., 1956. - 51 с.
    • ISO/IEC 1539-2:2000 Information technology - Programming languages - Fortran - Part 2: Varying length character strings
    • Роберт У. Себеста. 2.3. Компьютер IBM 704 и язык Фортран // Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. - 5-е изд. - М .: Вильямс, 2001. - С. 63-69. - 672 с. - 5000 экз. - ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.)

    Ссылки

    • gfortran - Компилятор Фортрана 95/2003/2008, часть Коллекции компиляторов GNU
    • в Прогопедии - энциклопедии языков программирования (рус.)

    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 не часто используется за пределами научных и инженерных вычислений, он остается языком для высокой производительности численных вычислений.

    Года.) Название Fortran является аббревиатурой от FOR mula TRAN slator, то есть, переводчик формул. Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана - большое количество написанных на нём программ и библиотек подпрограмм (см., например, Netlib Repository). Среди учёных, например, ходит такая присказка, что любая математическая задача уже имеет решение на Фортране, и, действительно, можно найти среди тысяч фортрановских пакетов и пакет для перемножения , и пакет для решения сложных интегральных уравнений и многие, многие другие. Ряд таких пакетов создавались на протяжении десятилетий и популярны (главным образом в научной среде) по сей день.

    Большинство таких библиотек является фактически достоянием человечества: они доступны в исходных кодах, хорошо документированы, отлажены и весьма эффективны. Поэтому изменять, а тем более переписывать их на других языках программирования накладно, несмотря на то, что регулярно производятся попытки автоматического конвертирования FORTRAN-кода на современные языки программирования.

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

    Стандарты

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

    • FORTRAN IV (он же - FORTRAN 66 ) (1966)
    • FORTRAN 77 (1978)
      Множество улучшений: текстовый тип данных и функции для его обработки, блочные операторы IF, ELSE IF, ELSE, END IF, оператор включения фрагмента программы INCLUDE и т. д.
    • Fortran 90 (1991)
      Значительно переработан стандарт языка. Введён свободный формат написания кода. Появились дополнтельные описания IMPLICIT NONE, TYPE, ALLOCATABLE, POINTER, TARGET, NAMELIST; управляющие конструкции DO … END DO, DO WHILE, CYCLE, SELECT CASE, WHERE; работа с динамической памятью (ALLOCATE, DEALLOCATE, NULLIFY); программные компоненты MODULE, PRIVATE, PUBLIC, CONTAINS, INTERFACE, USE, INTENT. Появились новые встроенные функции, в первую очередь, для работы с массивами.
      В языке появились элементы .
      Отдельно объявлен список устаревших черт языка, предназначенных для удаления в будущем.
    • Fortran 95 (1997)
      Коррекция предыдущего стандарта.
    • Fortran 2003 (2004)
      Дальнейшее развитие поддержки в языке. Взаимодействие с операционной системой.

    Компиляторы

    Возможности и структура программы

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

    Структура программ изначально была ориентирована на ввод с

    и имела ряд удобных именно для этого случая свойств. Так, 1-я колонка служила для маркировки текста как комментария (символом C ), со 1-й по 5-ю располагалась область меток, а с 7-й по 72-ю располагался собственно текст оператора или комментария. Колонки с 73-й по 80-ю могли служить для нумерации карт (чтобы восстановить случайно рассыпавшуюся колоду) или для краткого комментария, транслятором они игнорировались. Если текст оператора не вписывался в отведённое пространство (с 7-й по 72-ю колонку), в 6-ой колонке следующей карты ставился признак продолжения, и затем оператор продолжался на ней. Расположить два или более в одной строке (карте) было нельзя. Когда перфокарты ушли в историю, эти достоинства превратились в серьёзные неудобства.

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

    Своего рода «визитной карточкой» старого Фортрана является огромное количество меток, которые использовались как в операторах безусловного перехода , так и в операторах циклов, и в операторах описания форматного ввода/вывода FORMAT. Большое количества меток и операторов GOTO часто делало программы на Фортране трудными для понимания.

    Именно этот негативный опыт стал причиной, по которой в ряде современных языков программирования (например, ) метки и связанные с ними операторы безусловного перехода вообще отсутствуют.

    Однако современный Фортран избавлен от избытка меток за счет введения таких операторов, как DO … END DO, DO WHILE, SELECT CASE

    Также к положительным чертам современного Фортрана стоит отнести большое количество встроенных операций с массивами и гибкую поддержку массивов с необычной индексацией. Пример:

    Real,dimension(:,:) :: V ... allocate(V(-2:2,0:10)) ! Выделить память под массив, индексы которого могут! меняться в пределах от -2 до 2 (первый индекс) ! и от 0 до 10 - второй... V(2,2:3)=V(-1:0,1) ! Повернуть кусочек массива write(*,*)V(1,:) ! Напечатать все элементы массива V, первый индекс которых равен 1. deallocate(V)

    Пример программы

    Программа «Hello, World!»

    Фиксированный формат (символами «ˆ» выделены пробелы в позициях строки с 1 по 6):

    ^^^^^^PROGRAM hello ^^^^^^PRINT*, "Hello, World!" ^^^^^^END

    Свободный формат:

    Program hello print *, "Hello, World!" end

    Замечания.

    • Оператор PROGRAM не является обязательным. Строго говоря, единственный обязательный оператор Фортран-программы - оператор END .
    • Выбор прописных или строчных букв для написания операторов программы произволен. С точки зрения современных стандартов языка Фортран множество прописных букв и множество строчных букв при написании операторов языка совпадают.
    • Середина 50-х гг. характеризуется стремительным прогрессом в области программирования. Роль программирования в машинных кодах стала уменьшаться, стали появляться языки программировании нового типа, выступающие в роли посредника между машинами и программистами. Наступило время второго и третьего поколений языков программирования

      С середины 50-ых гг. XX в. начали создавать первые языки программирования высокого уровня (high-levellanguage). Эти языки были Машино независимыми (не привязаны к определенному типу ЭВМ).

      Но для каждого языка были разработаны собственные компиляторы - программа, выполняющая компиляцию.

      Компиляция - трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера)

      Язык программирования FORTRAN

      Первый язык высокого уровня был создан в период с 1954 по 1957 года группой программистов под руководством Джона Бэкуса в корпорации IBM и это стало следующим этапом развития языков программирования. Это был язык программирования FORTRAN. Он предназначался для научных и технических расчетов. Название Fortran является сокращением от FORmulaTRANslator (переводчик формул).

      История языка

      В конце 1953 Джон Бэкус предложил начать разработку эффективной альтернативы ассемблеру для программирования на ПК IBM 704. Уже к середине 1954 была закончена черновая спецификация языка Fortran. Первое руководство для Fortran появилось в октябре 1956 вместе с первым компилятором, поставленным в апреле 1957. Компилятор был оптимизирующим, потому что клиенты отказывались использовать язык программирования высокого уровня, который был не в состоянии генерировать код с производительностью ниже, чем у ассемблера.

      В то время сообщество относилось скептически к новому способу программирования и не верили в то, что Fortran позволит программировать быстрее и эффективнее. По словам самого Джона Бэкуса большая часть его работы была направлена на то чтобы «быть ленивым». Ему жутко не нравилось писать программы под IBM 701 на ассемблере.

      Язык был широко принят учеными для написания программ с интенсивными вычислениями. Включение комплексного типа данных сделало его особенно подходящим для технических приложений.

      К 1960 году существовали версии Fortran для компьютеров IBM 709, 650, 1620, 7090. Его большая популярность побуждала конкурирующих изготовителей компьютеров создавать компиляторы Fortran для своих компьютеров. Таким образом, уже к 1963 существовало более 40 компиляторов для разных платформ. Именно по этому Fortran считают первым широко используемым языком программирования.

      Фортран в СССР

      Фортран в СССР появился позже, чем на Западе, поскольку поначалу у нас более перспективным языком считался Алгол. Во внедрении Фортрана большую роль сыграло общение советских физиков со своими коллегами из CERN, где в 1960-х годах почти все расчёты велись с использованием программ на Фортране.

      Первый советский компилятор с Фортрана был создан в 1967 г. для машины «Минск-2», однако он не получил большой известности. Широкое внедрение Фортрана началось после создания в 1968 г. компилятора ФОРТРАН-ДУБНА для машины БЭСМ-6. Машины ЕС ЭВМ, появившиеся в 1972 г., уже изначально имели транслятор Фортрана («позаимствованный» с IBM/360 вместе с другим программным обеспечением)

      Современный Фортран. Достоинства языка

      Фортран широко использовался в основном для научных и инженерных вычислений. Он прекрасно подходит для решения численных задач, поскольку за 50 с лишним лет написано множество библиотек, поэтому языком пользуются сейчас и в ближайшем будущем ему не грозит забвение. Он используется и по сей день, однако, не столько по причине удачного дизайна, сколько в силу большого количества написанных на нём программ, изменять и, тем более, переписывать которые нет смысла.

      Вероятно, если вы хотите быстро что-то посчитать, то Фортран будет одним из лучших вариантов. Язык для этого именно и изобретался.

      Его структура способствует тому, что компилятор может очень хорошо оптимизировать вычисления.

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



    Рекомендуем почитать

    Наверх