Парадигма | многопарадигма : структурированный, императивный (процедурный, объектно-ориентированный ), общий, массив |
---|---|
Разработано | Джон Бэкус |
Разработчик | Джон Бэкус и IBM |
Впервые появилось | 1957; 63 года назад (1957 г.) |
Стабильный выпуск | Fortran 2018 (ISO / IEC 1539-1: 2018) / 28 ноября 2018 г.; 22 месяца назад (28.11.2018) |
Дисциплина печати | строгий, статический, манифест |
Расширения имени файла | .f , . Для , .f90 |
Веб-сайт | fortran-lang.org |
Основные реализации | |
Absoft, Cray, GFortran, G95, IBM XL Fortran, Intel, Hitachi, Lahey / Fujitsu, Группа числовых алгоритмов, Open Watcom, PathScale, PGI, Silverfrost, Oracle Solaris Studio, Visual Fortran, другие | |
По | |
Speedcoding | |
согласно | |
ALGOL 58, BASIC, C, Chapel, CMS-2, DOPE, Крепость, PL / I, PACT I, MUMPS, IDL, Ratfor |
Fortran (; ранее FORTRAN, полученный из перевода формул) является универсальным, скомпилированный императивный язык программирования, который особенно подходит для числовых вычислений и научных вычислений.
Первоначально основы от IBM в 1950-х годах для научных и инженерных приложений FORTRAN доминирует в научных вычислениях. Он использовался более десяти десятилетий в областях, требующих большого объема вычислений, таких как численное прогнозирование погоды, анализ методом конечных элементов, вычислительная гидродинамика, геофизика, вычислительная физика, кристаллография и вычислительная химия. Это популярный язык для высокопроизводительных вычислений, который используется для программ, которые оценивают и оценивают самые быстрые суперкомпьютеры в мире..
Fortran включает в себя ряд версий, каждую из которых эволюционировала для добавления расширений к языку, обычно сохраняя совместимость с предыдущими версиями. В версиях добавлена поддержка структурного программирования и символьных данных (FORTRAN 77), программирования массивов, модульного программирования и общего программирования (Fortran 90), высокопроизводительный Fortran (Fortran 95), объектно-ориентированное программирование (Fortran 2003), параллельное программирование (Fortran 2008) и встроенные возможности параллельных вычислений (Coarray Fortran 2008/2018).
Дизайн Фортрана стал источником связи для многих других языков программирования. Среди наиболее известных - BASIC, который основан на FORTRAN II с исправлениями синтаксиса, в частности, улучшенных логических структур и других изменений, упрощающих работу в интерактивной среде.
Имена более ранних версий языка через FORTRAN 77 обычно писались заглавными буквами (FORTRAN 77 был последней версией, с использованием которой строчных букв в ключевых словах было строго нестандартным). Заглавные буквы были опущены по отношению к более новой версии, начинающимся с Fortran 90. Официальный стандарт языка этот язык теперь называется «Fortran», а не «FORTRAN» с заглавными буквами.
В конце 1953 года Джон В. Бэкус представил предложение своему начальству по адресу IBM разработал более практичный альтернативу языку ассемблера для программирования своего IBM 704 мэйнфрейма. Историческая команда Бэкуса по FORTRAN состояла из программистов Ричарда Голдберга, Шелдона Ф. Беста, Харлана Херрика, Питера Шеридана, Роя Натта, Роберта Нельсона, Ирвинга Циллера, Гарольда Стерна, Лоис Хейбт и Дэвид Сейр. Его концепция включающая простой ввод в компьютер, идея, развитая Дж. Halcombe Laning и действовало в Laning and Zierler 1952 года. Некоторые из этих программистов были шахматистами и были выбраны для работы в IBM с мыслью о том, что они обладают логическим мышлением.
Проект спецификации Система перевода математических формул IBM был завершен к ноябрю 1954 года. Первое руководство по FORTRAN появилось в октябре 1956 года, первый компилятор FORTRAN был выпущен в апреле 1957 года. Это первый оптимизирующий компилятор, потому что заказчики не хотели использовать язык программирования высокого уровня, если его компилятор не мог генерировать код с производственной, приближающейся к производительности написанного вручную ассемблера.
, он уменьшил количество программных операторов, необходимых для работы машины, в 20 раз и быстро получил признание. Джон Бэкус сказал в 1979 году в интервью журналу Think, журналу для сотрудников IBM: «Большая часть моей работы связана с ленью. Мне не нравилось писать программы, и когда я работал над IBM 701, написав программы для вычислений траекторий ракет, я начал работу над системой программирования, чтобы упростить написание программ ».
Этот язык широко используется учеными для написания с интенсивным числовым использованием, что побуждало разработчиков компиляторов создавать компиляторы, которые могут генерировать более быстрый и эффективный код. Включение типа данных комплексного числа в язык сделало Fortran особенно подходящим для технических приложений, таких как электротехника.
К 1960 году версии FORTRAN были доступны для IBM 709, 650, 1620 и 7090 компьютеров. Примечательно, что растущая популярность FORTRAN побудила конкурирующих производителей компьютеров компиляторы FORTRAN для своих машин, так что к 1963 году существовало более 40 компиляторов FORTRAN. По этой причине FORTRAN считается широко используемым кроссплатформенным языком программирования.
Разработка на Фортране параллельной ранней эволюции технологий компиляторов, и многие достижения в теории и разработке компиляторов были специально мотивированы необходимой создания эффективного кода. для программ на Фортране.
Наиболее полный отчет об истории Fortran в виде единого документа Лоренцо в книге, указанной ниже.
Первоначальный выпуск FORTRAN для IBM 704 Содержал 32 оператора , включая:
РАЗМЕР
и ЭКВИВАЛЕНТНОСТЬ
.IF
, который передает управление в одно из трех мест в программе в зависимости от того, был ли результат арифметического отрицательного, нулем, или положительные операторыIF
для проверки исключений (ПЕРЕПОЛНЕНИЕ АККУМУЛЯТОРА
, ПЕРЕПОЛНЕНИЕ ЧАСТОТЫ
и ПРОВЕРКА РАЗДЕЛЕНИЯ
); и ЕСЛИ
операторы для управления сенсорными переключателями и сенсорными индикаторами ПЕРЕЙДИТЕ К
, вычислите ПЕРЕЙТИ К
, НАЗНАЧИТЕ
и присвоенные ПЕРЕЙДИТЕ К
DO
цикламFORMAT
, READ
, READ INPUT TAPE
, WRITE
, ЗАПИСЬ ВЫХОДНАЯ ЛЕНТА
, ПЕЧАТЬ
и ПУАНСОН
СЧИТАТЬ ЛЕНТУ
, СЧИТАТЬ БАРАБАН
, WRITE TAPE
и WRITE DRUM
END FILE
, REWIND
и BACKSPACE
PAUSE Операторы
, STOP
и CONTINUE
FREQUENCY
(для предоставления компилятору подсказок оптимизации ).Арифметика IF Оператор
напоминал (но не всегда мог быть реализован) трехстороннюю инструкцию сравнения (CAS - Сравнить аккумулятор с хранилищем), доступную на 704. Оператор предоставляет единственный способ сравнения чисел - путем проверки их сравнения с помощью сопутствующий риск переполнения. Позднее этот недостаток был преодолен с помощью «логических» возможностей, представленных в FORTRAN IV.
Оператор FREQUENCY
изначально использовался (и опционально) для определения вероятностей ветвления для трех вариантов ветвления арифмета оператора IF. Первый компилятор FORTRAN использовал это взвешивание для выполнения во время компиляции моделирования Монте-Карло сгенерированного кода, результаты которого использовались для оптимизации размещения базовых блоков в памяти - очень сложная оптимизация для своего времени.. Техника Монте-Карло описана в статье Бэкуса и др. Об этой оригинальной реализации, Автоматическая система кодирования FORTRAN:
Фундаментальной единицей программы является базовый блок ; базовый блок - это отрезок программы, который имеет одну точку входа и одну точку выхода. Цель раздела 4 - подготовить для раздела 5 таблицу предшественников (таблица PRED), в которой используются основные блоки каждого базового блока, каждый из базовых блоков, который может быть его непосредственным предшественником в потоке, вместе с абсолютной таблицей каждого такого базового звено блока. Эта таблица получается путем однократного запуска программы в режиме Монте-Карло, в котором результаты условных передач, получают из операторов типа IF и вычисленных GO TO, определенным генератором случайных чисел, соответствующим образом взвешенным в соответствии с предоставленными операторами FREQUENCY.
Много лет спустя оператор ЧАСТОТА
не повлиял на код и рассматривался как оператор комментариев, поскольку компиляторы больше не выполняли такого рода симуляцию во время компиляции. Аналогичная судьба постигла подсказки компилятора на нескольких других языках программирования, например. укажите регистр
в C.
Первый компилятор FORTRAN сообщает диагностическую информацию, останавливает программу при обнаружении ошибок и выводя код на свою консоль ошибки. Этот код может найти в таблице сообщений об ошибках в приложении, предоставив им краткое описание проблемы. Позже была включена подпрограмма обработки ошибок для обработки пользовательских ошибок, таких как деление на ноль, разработанная НАСА, информирующая пользователей о том, какая строка кода содержит ошибку.
До разработки диска файлы, текстовые редакторы и терминалы, программы чаще всего вводились с клавиатуры keypunch на перфокартах с 80 столбцами , одна строка на карту. Полученная колода карт будет загружена в картридер для компиляции. Коды перфокарт не содержали строчных букв или многих специальных символов, и были предложены специальные версии IBM 026 keypunch, которые правильно печатали измененные специальные символы, используемые в FORTRAN.
Отражая ввод данных перфокарт, программы на Фортране изначально были написаны в формате с фиксированными столбцами, где первые 72 столбца считывались в двенадцать 36-битных слов.
Буква «C» в столбце 1 привела к тому, что вся форма обрабатывалась как комментарий и игнорировалась компилятором. В последнем случае столбцы карты были разделены на четыре поля:
Столбцы 73–80, следовательно, можно было использовать для ввода идентификационной информации, например, для ввода порядкового номера или текст, который можно использовать для изменения порядка карточек, если стопка карточек выпала; хотя на практике это было зарезервировано для стабильных производственных программ. IBM 519 может Введение для набора набора программ и добавление порядковых номеров. Некоторые ранние компиляторы, например, IBM 650, имели дополнительные ограничения из-за ограничений на их считыватели карт. Пуансоны можно было запрограммировать на табуляцию до столбца 7 и пропуск после столбца 72. Поздние компиляторы ослабили большинство фиксированных форматов ограничения, требование было устранено в стандарте Fortran 90.
Внутри поля оператора пробельные символы (пробелы) вне текстового литерала игнорировались. Это позволяет опускать пробелы между токенами для краткости. Например, AVG OF X
был действительным был представителем, эквивалентным AVGOFX
, а 101010DO101I = 1,101
действительным утверждением, эквивалентным 10101 DO 101 I = 1, 101
, поскольку ноль в столбце 6 обрабатывается как пробел (!), А 101010DO101I = 1.101
вместо этого было 10101 DO101I = 1.101
, присвоение 1.101 имени с именем DO101I
. Обратите внимание на небольшую визуальную разницу между запятой и точкой.
Строки холлерита, изначально разрешенные только в операторах FORMAT и DATA, имели префикс из числа символов и буквы H (например, 26HTHIS IS ALPHANUMERIC DATA.
), что позволяло правильно пробелы внутри строк символов. Ошибки в учете были проблемой.
FORTRAN II от IBM появился в 1958 году. Основное усовершенствование состояло в поддержке процедурного программирования, позволяющих создавать подпрограммы и функции, создаваемые, выполняемые через ссылку. Оператор COMMON предоставил подпрограммам способ доступа к общему (или глобальным ) переменным. Были введены шесть новых операторов:
ПОДПРОГРАММА
, ФУНКЦИЯ
и КОНЕЦ
ЗВОНИТЕ
и ВОЗВРАТ
ОБЩИЙ
в течение следующих нескольких лет, FORTRAN II также добавил бы поддержку типов DOUBLE PRECISION
и COMPLEX
.
Ранние компиляторы FORTRAN не поддерживали рекурсию в подпрограммах. Ранние компьютерные архитектуры не поддерживают концепцию стека, и когда они действительно поддерживают вызовы подпрограмм напрямую, возврат часто сохраняется в одном фиксированном месте рядом с кодом подпрограммы (например, IBM 1130 ) или на конкретном компьютере. регистр (IBM 360 et seq), который разрешает рекурсию только в том случае, если стеке программным транспортом, адрес возврата хранится в стеке до выполнения вызова и восстанавливается после возврата вызова. Хотя это и не указано в FORTRAN 77, многие компиляторы F77 поддерживают рекурсию в качестве опции, а мэйнфреймы Burroughs , разработанные со встроенной рекурсией, делали это по умолчанию. Он стал стандартом в Fortran 90 благодаря новому ключевому слову RECURSIVE.
Эта программа для данных Херона считывает данные с ленты, основные три Пятизначные целые числа A, B и C в качестве входных. Нет доступных объявлений "типа": переменные, имена которых начинаются с I, J, K, L, M или N, являются "фиксированной точкой" (т.е. целыми числами), в противном случае - с плавающей точкой. В этом примере можно обрабатывать целые числа, имена начинаются с буквы «I». Имя должно начинаться с буквы и может продолжаться как буквами, так и цифрами, до шести символов в FORTRAN II. Если A, B и C не могут выполнить программу стороны треугольника в плоской геометрии, то выполнение программы будет выполнено кодом ошибки «STOP 1». В заключительной строке вывода, показывающая входные значения для A, B и C, должна быть показана вычисленная ПЛОЩАДЬ треугольника в виде числа с плавающей запятой, занимающей последнее пробелов вдоль строки вывода и 2 после десятичной точки.,.2 в F10.2 оператора ФОРМАТА с меткой 601.
C ОБЛАСТЬ ТРЕУГОЛЬНИКА СО СТАНДАРТНОЙ ФУНКЦИЕЙ КВАДРАТНОГО КОРНЯ C ВХОД - БЛОК СЧИТЫВАТЕЛЯ ЛЕГЕНДЫ 5, ЦЕЛОШИЙ ВОДЫ C ВВ - БЛОК ЛЕЙНОГО ПРИАЛЬКА ВЫРАБОЙ ВХОД C ВВХОД - БЛОК ЛЕЙНОГО ПРИАЛЬКА ВЫРАБОТЫХОДЫ C ВЫХОД - БЛОК ЛЕЙНОГО ПРИАЛЬКА ВЫРАБОЙХОД 6 ВЫХОД - БЛОК ЛЕЙНОГО ПРИАЛЬКА ВЫРАЖАХОД 6 КОД 1 В СПИСКЕ УПРАВЛЕНИЯ ЗАДАНИЯМИ ПРОЧИТАЙТЕ ЛЕНТУ ВВОДА 5, 501, IA, IB, IC 501 ФОРМАТ (3I5) C IA, IB и IC НЕ МОГУТ БЫТЬ ОТРИЦАТЕЛЬНЫМИ ИЛИ НУЛЯТЬМИ C ДАЛЕЕ, СУММА ДВУХ СТОРОНОВАЯ ТРЕЛЬТО ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ, ПОЭТОМУ МЫ ПРОВЕРИМ ЭТО, ТОЖЕ ЕСЛИ (IA) 777, 777, 701 701 ЕСЛИ (IB) 777, 777, 702 702 ЕСЛИ (IC) 777, 777, 703 703 ЕСЛИ (IA + IB-IC) 777, 777, 704 704 ЕСЛИ (IA + IC-IB) 777, 777, 705 705 ЕСЛИ (IB + IC-IA) 777, 777, 799 777 ОСТАНОВ 1 C ИСПОЛЬЗУЯ ФОРМУЛУ HERON, МЫ РАСЧЕТАЕМ C ПЛОЩАДЬ ТРЕУГОЛЬНИКА 799 S = FLOATF (IA + IB + IC) / 2.0 ОБЛАСТЬ = SQRTF (S * (S - FLOATF (IA)) * (S - FLOATF (IB)) * + (S - FLOATF (IC))) ЗАПИСАТЬ ВЫХОДНАЯ ЛЕНТА 6, 601, IA, IB, IC, AREA 601 FORMAT (4H A =, I5,5H B =, I5,5H C =, I5,8H AR EA =, F10.2, + 13H SQUARE UNITS) STOP END
IBM также разработала FORTRAN III в 1958 году, который допускал встроенный код среди других функций; однако эта версия никогда не выпускалась как продукт. Подобно 704 FORTRAN и FORTRAN II, FORTRAN III включал машинно-зависимые функции, которые делали написанный на нем код непереносимым с машины на машину. Ранние версии FORTRAN, предоставленные другими поставщиками, страдали тем же недостатком.
FORTRAN был предоставлен для компьютера IBM 1401 инновационным 63-фазным компилятором, который полностью выполнялся в его основной памяти всего 8000 (шестибитных) символов. Компилятор может запускаться с ленты или с колоды из 2200 карт; он не использовал ни ленточного, ни дискового хранилища. Он сохранял программу в памяти и загружал оверлеи, которые постепенно преобразовывали ее на месте в исполняемую форму, как описано Хейнсом. Эта статья была переиздана, отредактирована как в редакциях «Анатомии компилятора», так и в руководстве IBM «Спецификации и рабочие процедуры Fortran, IBM 1401». Исполняемая форма не была полностью машинным языком ; вместо этого интерпретировались арифметические операции с плавающей запятой, вспомогательные сценарии, ввод / вывод и ссылки на функции, предшествующие UCSD Pascal P-code на два десятилетия.
IBM позже предоставила компилятор FORTRAN IV для компьютеров серии 1400.
IBM начала разработку FORTRAN IV, начиная с 1961 года, в результате требований заказчиков.. FORTRAN IV удалил машинно-зависимые функции FORTRAN II (такие как READ INPUT TAPE
), добавив новые функции, такие как LOGICAL
тип данных, логический Логические выражения и логический оператор IF в качестве альтернативы арифметическому оператору IF. В конечном итоге FORTRAN IV был выпущен в 1962 году, сначала для компьютера IBM 7030 («Stretch»), затем последовали версии для IBM 7090, IBM 7094 и позже для IBM 1401 в 1966 году.
К 1965 году FORTRAN IV должен был соответствовать стандарту, разработанному Американской ассоциацией стандартов X3.4.3 FORTRAN Рабочая группа.
Между 1966 и 1968 годами IBM предложила несколько компиляторов FORTRAN IV для своей System / 360, каждый из которых назван буквами, указывающими минимальный объем памяти, необходимый компилятору для работы. Буквы (F, G, H) совпадают с кодами, используемыми с номерами моделей System / 360 для обозначения размера памяти, при этом увеличение каждой буквы в два раза больше:
Примерно в это время FORTRAN IV начал стали важным образовательным инструментом, и такие реализации, как WATFOR Университета Ватерлоо и WATFIV, были созданы для упрощения сложных процессов компиляции и компоновки более ранних компиляторов.
Возможно, наиболее значительным событием в ранней истории FORTRAN было решение Американской ассоциации стандартов (ныне Американский национальный институт стандартов (ANSI)) сформировать комитет, спонсируемый BEMA, Ассоциацией производителей оборудования для бизнеса, для разработки американского стандарта Fortran. В результате два стандарта, утвержденные в марте 1966 года, определили два языка: FORTRAN (на основе FORTRAN IV, который служил стандартом де-факто) и Basic FORTRAN (на основе FORTRAN II, но без его машинно-зависимых функций). ФОРТРАН, определенный первым стандартом, официально обозначенный как X3.9-1966, стал известен как ФОРТРАН 66 (хотя многие продолжали называть его ФОРТРАНОМ IV, языком, на котором в основном был основан стандарт). FORTRAN 66 фактически стал первой стандартной версией FORTRAN. FORTRAN 66 включал:
SUBROUTINE
, FUNCTION
и BLOCK DATA
программные блокиINTEGER
, REAL
, DOUBLE PRECISION
, COMPLEX
и LOGICAL
типы данных COMMON
, DIMENSION
и Операторы EQUIVALENCE
DATA
оператор для указания начальных значенийВНЕШНИЕ
(например, библиотечные) функцииGO TO
, вычислено GO TO
, присвоены выражения GO TO
и ASSIGN
IF
и арифметические (трехсторонние) операторы IF
DO
оператор циклаREAD
, WRITE
, BACKSPACE
, REWIND
и ENDFILE
для последовательного ввода-вывода.FORMAT
и назначенный форматCALL
, RETURN
, PAUSE
и STOP
операторыDATA
и FORMAT
, а также в качестве аргументов для p процедурыКОНЕЦ
строкаПосле выпуска стандарта FORTRAN 66 поставщики компиляторов представили несколько расширений для Standard Fortran, что побудило комитет ANSI X3J3 в 1969 году, чтобы начать работу по пересмотру стандарта 1966 года при спонсорской поддержке CBEMA, Ассоциации производителей компьютерного оборудования для бизнеса (ранее BEMA). Окончательные проекты этого пересмотренного стандарта были распространены в 1977 году, что привело к официальному утверждению нового стандарта FORTRAN в апреле 1978 года. Новый стандарт, названный FORTRAN 77 и официально обозначенный как X3.9-1978, добавил ряд важных функций, направленных на решение многих проблем. недостатки FORTRAN 66:
IF
и END IF
операторы с дополнительными предложениями ELSE
и ELSE IF
для обеспечения улучшенных языковая поддержка для структурированного программирования DO
расширений цикла, включая выражения параметров, отрицательные приращения и нулевые счетчики отключенийOPEN
, CLOSE
и INQUIRE
операторы для улучшенных возможностей ввода-выводаОператор IMPLICIT
, чтобы переопределить неявные соглашения о том, что необъявленные переменные являются INTEGER, если их имя начинается с I, J, K, L, M или N (и REAL в противном случае)CHARACTER
тип данных, заменяющий строки Холлерита значительно расширенными возможностями для ввода и вывода символов и обработки символов er-based dataPARAMETER
инструкция для указания константSAVE
инструкция для постоянных локальных переменныхSQRT
также принимает аргументы других типов, например COMPLEX
или REAL * 16
).LGE, LGT, LLE, LLT
) для лексического сравнения строк на основе упорядочивающей последовательности ASCII . (Эти функции ASCII были запрошены Министерством обороны США в ходе голосования с условным одобрением.)В этой редакции стандарта был удален или изменен ряд функций, которые могли сделать недействительными программы, ранее соответствующие стандартам. (Удаление было единственной допустимой альтернативой X3J3 в то время, поскольку концепция «устаревание » еще не была доступна для стандартов ANSI.) Хотя большинство из 24 элементов в списке конфликтов (см. Приложение A2 к X3.9-1978) устранены лазейки или патологические случаи, разрешенные предыдущим стандартом, но редко используемые, небольшое количество конкретных возможностей было намеренно удалено, например:
GREET = 12HHELLO THERE!
DIMENSION A (10, 5) Y = A (11,1)
Control Data Corporation на компьютерах была другая версия FORTRAN 77, называемая Minnesota FORTRAN (MNF), разработанная специально для использования студентами, с вариациями в выходных конструкциях и специальном использовании. операторов COMMON и DATA, уровней кода оптимизации для компиляции, подробных списков ошибок, подробных предупреждений и функций отладки. MNF был разработан сотрудниками (Liddiard Mundstock) из Университета Миннесоты. MNF был доступен в основном бесплатно.
Разработка пересмотренного стандарта, который придет на смену FORTRAN 77, будет неоднократно откладываться, поскольку процесс стандартизации изо всех сил пытается успевать за быстрыми изменениями в практике вычислений и программирования. Между тем, как «стандартный FORTRAN» в течение почти пятнадцати лет, FORTRAN 77 стал исторически наиболее важным диалектом.
Важным практическим расширением FORTRAN 77 стал выпуск MIL-STD-1753 в 1978 году. Эта спецификация была разработана США. Министерство обороны стандартизировало ряд функций, реализованных в большинстве компиляторов FORTRAN 77, но не включенных в стандарт ANSI FORTRAN 77. Эти функции в конечном итоге будут включены в стандарт Fortran 90.
Операторы DO WHILE
, EXIT
, CYCLE
и END DO
INCLUDE
операторIMPLICIT NONE
вариант оператора IMPLICIT
Стандарт IEEE 1003.9 POSIX, выпущенный в 1991 году, предоставил программистам FORTRAN 77 простые средства для выполнения системных вызовов POSIX. В документе было определено более 100 вызовов, обеспечивающих переносимый доступ к POSIX-совместимому управлению процессами, обработке сигналов, управлению файловой системой, управлению устройствами, указателям процедур и потоковому вводу-выводу.
Долгожданный преемник FORTRAN 77, неофициально известный как Fortran 90 (а до этого Fortran 8X), наконец, был выпущен как стандарт ISO / IEC 1539: 1991 в 1991 г. и стандарт ANSI в 1992 г. В дополнение к изменению официального написания с FORTRAN на Fortran, эта основная редакция добавила много новых функций, отражающих значительные изменения в практике программирования, которые произошли со времени принятия стандарта 1978 г.:
X (1: N) = R (1: N) * COS (A (1: N))
ГДЕ
оператор для выборочного присваивания массиваRECURSIVE
процедурыALLOCATABLE
и ALLOCATE
и ОТКЛЮЧИТЬ
операторыатрибут POINTER
, назначение указателя и оператор NULLIFY
для облегчения создания и управления динамическими структурами данных оператор END DO
для завершения цикла и операторы EXIT
и CYCLE
для завершения обычных итераций цикла DO
упорядоченным способомSELECT
... CASE
конструкция для многостороннего выбораВ отличие от предыдущей версии, Fortran 90 не удалил никаких функций. Любая соответствующая стандарту программа FORTRAN 77 также соответствует стандарту Fortran 90, и любой стандарт должен быть пригоден для определения ее поведения.
A small set of features were identified as "obsolescent" and expected to be removed in a future standard. All of the functionalities of these early version features are performed by new Fortran 95 features. Some are kept to simplify porting of old programs but may eventually be deleted.
Obsolescent feature | Example | Status/fate in Fortran 95 |
---|---|---|
Arithmetic IF-statement | IF (X) 10, 20, 30 | Deprecated |
Non-integer DO parameters or control variables | DO 9 X= 1.7, 1.6, -0.1 | Deleted |
Shared DO-loop termination or. termination with a statement. other than END DO or CONTINUE | DO 9 J= 1, 10 DO 9 K= 1, 10 9 L= J + K | Deprecated |
Branching to END IF. from outside a block | 66 GO TO 77 ;... IF (E) THEN ;... 77 END IF | Deleted |
Alternate return | CALL SUBR( X, Y, *100, *200) | Deprecated |
PAUSE statement | PAUSE 600 | Deleted |
ASSIGN statement. and assigned GO TO statement | 100... ASSIGN 100 TO H... GO TO H... | Deleted |
Assigned statement numbers and FORMAT specifiers | ASSIGN 606 TO F... WRITE ( 6, F)... | Deleted |
H edit descriptors | 606 FORMAT ( 9H1GOODBYE.) | Deleted |
Computed GO TO statement | GO TO (10, 20, 30, 40), index | (obsolete) |
Statement functions | FOIL( X, Y)= X**2 + 2*X*Y + Y**2 | (obsolete) |
DATA statements. among executable statements | X= 27.3 DATA A, B, C / 5.0, 12.0, 13.0 /... | (obsolete) |
CHARACTER* form of CHARACTER declaration | CHARACTER*8 STRING ! Use CHARACTER(8) | (obsolete) |
Assumed character length functions | CHARACTER*(*) STRING | (obsolete) |
Fixed form source code | Column 1 contains C or * or ! for comments.. Columns 1 through 5 for statement numbers. Any character in column 6 for continuation.. Columns 73 and up ignored | (obsolete) |
program helloworld print *, "Hello, World!" end program helloworld
Fortran 95, published officially as ISO/IEC 1539-1:1997, was a minor revision, mostly to resolve some outstanding issues from the Fortran 90 standard. Nevertheless, Fortran 95 also added a number of ext В частности, из спецификации High Performance Fortran :
FORALL
и вложенных WHERE
конструкций для помощи векторизацииPURE
и ЭЛЕМЕНТАЛЬНЫЕ
процедурыNULL ()
ALLOCATABLE
автоматически освобождаются, когда они выходят из области видимости.Ряд встроенных функций был расширен (например, Аргумент dim
был добавлен к внутренней функции maxloc
).
Некоторые функции, отмеченные в Fortran 90 как «устаревшие», были удалены из Fortran 95: операторы
DO
с использованием REAL
и DOUBLE PRECISION
индексных переменныхEND IF
извне его блокаоператор PAUSE
ASSIGN
и назначенный оператор GO TO
и назначенные спецификаторы форматаH
Дескриптор редактирования Холлерита.Важным дополнением к Fortran 95 был технический отчет ISO TR-15581: Расширенные возможности типов данных, неофициально известный как Allocatable TR. Эта спецификация определяла расширенное использование массивов ALLOCATABLE
до появления полностью совместимых с Fortran 2003 компиляторов Fortran. Такое использование включает массивы ALLOCATABLE
в качестве компонентов производного типа, в списках фиктивных аргументов процедур и в качестве возвращаемых значений функций. (ALLOCATABLE
массивы предпочтительнее массивов на основе POINTER
, потому что массивы ALLOCATABLE
гарантированно освобождаются Fortran 95 автоматически, когда они выходят за пределы области видимости, что исключает возможность утечки памяти. Кроме того, элементы выделяемых массивов являются смежными, и алиасинг не является проблемой для оптимизации ссылок на массивы, все компиляторы должны генерировать более быстрый код, чем в случае указателей.)
Другим важным дополнением к Fortran 95 был технический отчет ISO TR-15580: Обработка исключений с плавающей запятой, неофициально известный как IEEE TR. Эта спецификация поддержки определяет арифметики с плавающей запятой IEEE и обработки исключений с плавающей запятой .
В дополнение к обязательному « Базовый язык »(определен в ISO / IEC 1539-1: 1997), язык Fortran 95 также включает два дополнительных модуля:
, которые вместе составляют международный стандарт, состоящий из нескольких частей (ISO / IEC 1539).
Согласно разработчикам стандартов, «необязательные части используют автономные функции, которые были запрошены значительными описательными пользователями и / или разработчиками, но которые не считаются общими для их использования». Требуются во всех компиляторах Fortran, соответствующие стандарту ". Тем не менее, если соответствующие стандарту Fortran такие возможности, они« предоставлены в соответствии с описанием этих возможностей в части стандарта ».
Fortran 2003, официально опубликованный как ISO / IEC 1539-1: 2004, является крупной версией, вводящей множество новых функций. Исчерпывающий обзор возможностей Fortran 2003 доступен на официальном веб-сайте Рабочая группа Fortran (ISO / IEC JTC1 / SC22 / WG5).
Из этой статьи основные улучшения для этой версии включают:
VOLATILE
атрибут, явная спецификация типа в конструкторах массивов и оператора выделения, улучшения указателей, расширенные выражения инициализации и расширенные внутренние процедурыFLUSH
, регуляризация ключевых слов и доступ к сообщениям об ошибкахВажным дополнением к Fortran 2003 стал технический отчет ISO TR-19767: Расширенные возможности модуля в Fortran. В этом отчете представлены подмодули, которые делают модули Fortran более похожими на модули Modula-2. Они похожи на частные дочерние подъединицы Ада. Это позволяет спецификациям и функциям модуля отображать в отдельных программных продуктах, что улучшает упаковку больших библиотек.
ISO / IEC 1539-1: 2010, неофициально известный как Fortran 2008, был одобрен в сентябре 2010 года. Как и в случае с Fortran 95, это незначительное обновление, включающее уточнения и исправления. в Fortran 2003, а также введение некоторых новых возможностей. Новые возможности включают:
Окончательный проект Международный стандарт (FDIS) доступен как документ N1830.
Дополнение к Fortran 2008 является Техническая спецификация (TS) Международной организации по стандартизации (ISO) 29113 для дальнейшего взаимодействия с Fortran с C, который представлен на утверждение в ISO в мае 2012 года. Спецификация поддержки доступа к дескриптору из C позволяет игнорировать тип и ранг аргументов.
Последняя версия языка (Fortran 2018) ранее называлась Fortran 2015. Это значительная версия, выпущенная 28 ноября 2018 года.
Fortran 2018 включает в себя две ранее указанные технические характеристики:
Дополнительные изменения и новые функции включают поддержку ISO / IEC / IEEE 60559: 2011 (версия стандарта плавающей запятой IEEE до последней младшей редакции IEEE 754-2019), шестнадцатеричный ввод / вывод, улучшения IMPLICIT NONE и изменения.
Хотя в журнальной статье 1968 года авторов BASIC ФОРТРАН уже описывался как «старомодный», сейчас Фортран уже несколько десятилетий. и существует огромное количество программного обеспечения Fortran, которое ежедневно используется в научных и инженерных сообществах. Джей Пасачофф писал в 1984 году, что «студентам, изучающим физику и астрономию, просто необходимо изучить ФОРТРАН. В ФОРТРАНЕ так много всего, что кажется маловероятным, что ученые перейдут на Паскаль, Модулу-2 или что-то еще ». В 1993 году Фортран назвал «родным языком научных вычислений», добавив, что его замена другим возможным языком «может остаться безнадежная надежда».
Это основной язык для некоторых из наиболее интенсивных суперкомпьютерных задач как астрономия, моделирование климата, вычислительная химия, вычислительная экономика, вычислительная гидродинамика, вычислительная физика, анализ данных, гидрологическое моделирование, числовая линейная алгебра и числовые библиотеки (LAPACK, IMSL и NAG ), оптимизация, спутниковое моделирование, структурное проектирование и прогноз погоды. Многие тесты с плавающей запятой для измерения производительности новых компьютерных процессов, такие как компоненты с плавающей запятой в тестах SPEC (например, CFP2 006, CFP2017 ) написаны на Фортране.
Помимо этого, более современных кодов в области вычислительной техники используют большие программные библиотеки, такие как METIS для разбиения графа, PETSc или Trilinos для линейных алгебры, DUNE или FEniCS для поддержки сетей и конечных элементов и других общих библиотек. С начала 2000-х годов многие из широко используемых библиотек поддержки также были реализованы на C, а с недавних пор - в C ++. С другой стороны, языки высокого уровня, такие как MATLAB, Python и R, стали популярными в определенных областях вычислительной науки. Следовательно, растущая часть научных программ также написана на таких языках сценариев более высокого уровня. По этой причине средства для взаимодействия с C были добавлены в Fortran 2003 и расширены технической спецификацией ISO / IEC 29113, которая была включена в Fortran 2018, чтобы обеспечить более гибкое взаимодействие с другими языками программирования.
Программное обеспечение для зондов НАСА Voyager 1 и Voyager 2 было изначально написано на FORTRAN 5, а перенесено на FORTRAN 77. По состоянию на 25 сентября 2013 года некоторые из программного обеспечения все еще написано на Фортране, и некоторые из них были перенесены на C.
Точные характеристики и синтаксис Fortran 95 обсуждаются в Языковые особенности Fortran 95.
Переносимость была проблемой на первых порах, потому что не было согласованного стандарта - справочного руководства IBM - и компьютерные компании наперебой пытались отличить свои предложения от других, предоставляя несовместимые функции. Стандарты улучшили переносимость. Стандарт 1966 г. предоставил справочный синтаксис и семантику, но поставщики продолжали несовместимые расширения. Использование таких программ, как PFORT Verifier, только после выхода 1977 года Национальное бюро стандартов (ныне NIST ) опубликовал FIPS PUB 69, что процессоры, приобретенные правительством США, необходимы для диагностики расширений стандарта. Вместо того, чтобы предлагать два процессора, практически каждый компилятор, возможно, есть возможность диагностировать расширение.
Несовместимые расширения были не единственной проблемой переносимости. Для численных расчетов важных особенностей особенности арифметики. Это было рассмотрено Fox et al. в контексте стандарта 1966 г. библиотекой ПОРТ. Внутри него появились широкие возможности, включенные в стандарт 1990 года внутренних исследовательских функций. Широко распространенное (теперь почти универсальное) стандарт IEEE 754 для двоичной арифметики с плавающей запятой по существу устранило эту проблему.
Доступ к вычислительной среде (например, к системной строке программы, переменным средам, текстовому объяснению условий) оставался проблемой до тех пор, пока она не была решена стандартом 2003 года.
Большие коллекции библиотечного программного обеспечения, которые можно описать как слабо связанные с научными расчетами, например графические библиотеки, написаны на языке C, и поэтому доступ к ним представляет проблему переносимости. Это было решено путем включения функциональной совместимости C в стандарт 2003 года.
Теперь возможно (и относительно легко) написать полностью переносимую программу на Фортране, даже не прибегая к препроцессору.
Fortran 5 продавалась Data General Corp в конце 1970-х - начале 1980-х годов для Nova, Eclipse и MV линейки компьютеров. У него был оптимизирующий компилятор, который подходил для мини-компьютеров того времени. Этот язык больше всего похож на FORTRAN 66.
FORTRAN V был распространен Control Data Corporation в 1968 году для серии CDC 6600. Язык был основан на ФОРТРАНЕ IV.
Univac также предлагал компилятор для серии 1100, известный как FORTRAN V. Дополнительным продуктом Univac Fortran V была Athena FORTRAN.
Fortran 6 или Visual Fortran 2001 были лицензированы для Compaq компанией Microsoft. Они лицензировали Compaq Visual Fortran и предоставили интерфейс среды Visual Studio 5 для Compaq v6 до v6.1.
Поставщики высокопроизводительных научных компьютеров (например, Burroughs, Control Data Corporation (CDC), Cray, Honeywell, IBM, Texas Instruments и UNIVAC ) добавили расширения в Fortran, чтобы использовать преимущества специальных аппаратных функций, таких как кэш инструкций, конвейеры CPU и беспокой массивы. Например, один из компиляторов FORTRAN от IBM (H Extended IUP) имел уровень оптимизации, который переупорядочивал машинный код инструкции для одновременной занятости внутренних нескольких арифметических модулей. Другой пример - CFD, специальный вариант FORTRAN, предназначенный специально для суперкомпьютера ILLIAC IV, работающего в Исследовательском центре Эймса NASA. IBM Research Labs также разработала расширенный язык на основе FORTRAN под названием VECTRAN для обработки векторов и матриц.
Объектно-ориентированный Фортран был объектно-ориентированным расширением Фортрана, в котором элементы могут быть сгруппированы в объекты, экземпляры которых можно создавать и выполнять параллельно. Он был доступен для Sun, Iris, iPSC и nCUBE, но больше не поддерживается.
Такие машинно-расширенные версии включены в основные стандарты. Основное оставшееся расширение - это OpenMP, которое является кроссплатформенным расширением для программирования с общей памятью. Одно новое расширение Coarray Fortran, предназначенное для поддержки параллельного программирования.
FOR TRANSIT было названо сокращенной версии языка IBM 704 FORTRAN, которая была реализована для IBM 650 с использованием программы-переводчика, разработанной в Карнеги в конце 1950-х гг. Следующий комментарий появляется в Справочной системе IBM (FOR TRANSIT Automatic Coding System C28-4038, Copyright 1957, 1959 by IBM):
Система FORTRAN была добавлена для более сложной машины, чем 650, и, следовательно, для некоторых из 32 Операторы, содержится в Справочном приложении FORTRAN, неприемлемы для системы FOR TRANSIT. Кроме того, были добавлены ограничения для языка FORTRAN. Однако ни одно из этих ограничений не делает исходную программу, написанную для TRANSIT, несовместимую с системой FORTRAN для 704.
Допустимые операторы были:
a = b
GO к n
ПЕРЕЙТИ К (n 1, n 2,..., n m), i
IF (a) n 1, n 2, n 3
PAUSE
STOP
DO ni = m1, m2
CONTINUE
END
READ n, list
ПУАНСОН n, список
РАЗМЕР V, V, V,...
ЭКВИВАЛЕНТНОСТЬ (a, b, c), (d, c),...
Можно использовать до десяти подпрограмм в одной программе.
Операторы FOR TRANSIT были ограничены только столбцами с 7 по 56. Для ввода и вывода на IBM 650 использовались перфокарты. Три прохода потребовались для перевода исходного кода языка «ИТ», затем для компиляции операторов языка ассемблера SOAP и, наконец, для создания объектной программы, которая могла бы быть загруженной в машину для запуска программы (с использованием перфокарт для ввода данных и вывода результатов на перфокарты).
Существовали две версии для 650-х с барабаном памяти на 2000 слов: FOR TRANSIT I (S) и FOR TRANSIT II, последняя для машин, оснащенных индексными регистрами и автоматическим десятичным числом с плавающей запятой (бипятичными ) арифметика. В Приложении к руководству были приведены электрические схемы для IBM 533 кардридер / перфоратор панель управления.
До FORTRAN 77 количество препроцессоры обычно для предоставления услуг более дружественного языка, с тем преимуществом, который использовался производственный код мог быть скомпилирован на любой машине со стандартным компилятором FORTRAN. Эти препроцессоры обычно включает структурированное программирование, имена чисел длиной более шести символов, условную компиляцию и даже возможности макросов. Включены популярные препроцессоры, iftran, MORTRAN, Ratfor и Ratfiv. Ratfor и Ratfiv, например, реализовали язык, подобный C, вывод обработанный код в стандартном условном условном FORTRAN 66. Несмотря на достижения на языке Fortran, препроцессоры католической веры для компиляции и подки макросов.
Одна из самых ранних версий FORTRAN, представленная в 60-х годах, широко использовалась в колледжах и университетах. Университет Ватерлоо, WATFOR был разработан, поддержан и распространен в основном на основе FORTRAN IV. Студент, использующий WATFOR, мог отправить свое пакетное задание FORTRAN, и, если бы не было синтаксических ошибок, программа сразу перешла бы к выполнению. Это упрощение позволило студентам сконцентрироваться на синтаксисе и семантике своей программы или логическом потоке выполнения, а не на отправке Язык управления заданиями (JCL), последовательном процессе (процессах) компиляции / компоновки-редактирования / выполнения, или другие сложности среды мэйнфрейма / миникомпьютера. Обратной стороной этой упрощенной среды было то, что WATFOR не был хорошим выбором для программистов, нуждающихся в расширенных возможностях их хост-процессора (ов), например, WATFOR обычно имел очень ограниченный доступ к устройствам ввода-вывода. На смену WATFOR пришла WATFIV и его более поздние версии.
программа; s = 0 i = 1, n; s = s + 1; стоп я; s = 's' Stop
(программирование строк)
был разработан в Радиационной лаборатории Лоуренса для обеспечения поддержки векторной арифметики и динамического хранения, а также других расширений для поддержки системного программирования. В дистрибутив включен.
Стандарт Fortran-95 включает в себя дополнительную часть 3, которая определяет дополнительную возможность условной компиляции. Эту возможность часто называют «CoCo».
Многие компиляторы Fortran интегрировали подмножества препроцессора C в свои системы.
SIMSCRIPT - это препроцессор Fortran для конкретного приложения для моделирования и моделирования больших дискретных систем.
Язык программирования F был разработан как чистое подмножество Fortran 95, которое пытается удалить избыточные, неструктурированные и устаревшие функции Fortran, такие как EQUIVALENCE
заявление. F сохраняет функции массива, добавленные в Fortran 90, и удаляет операторы управления, которые были устаревшими из-за структурных программных конструкций, добавленных как в FORTRAN 77, так и в Fortran 90. F описан его создателями как «скомпилированный, структурированный язык программирования массивов, особенно хорошо подходящий в образование и научные вычисления ".
Лахи и Fujitsu объединились для создания Fortran для Microsoft .NET Framework. Silverfrost FTN95 также может создавать код.NET.
Следующая программа иллюстрирует динамическое выделение памяти и операции на основе массивов, две функции, представленные в Fortran 90. Особого внимания заслуживает отсутствие циклов DO
и операторов IF
/THEN
при манипулировании массивом; математические операции применяются ко всему массиву в целом. Также очевидно использование описательных имен переменных и общего форматирования кода, которые соответствуют современному стилю програ ммирования. В этом примере вычисляется среднее значение по данным, введенным в интерактивном режиме.
средняя программа! Прочтите несколько цифр и возьмите среднее! Как написано, если нет точек данных, возвращается ноль! Хотя это может быть нежелательным поведением, он сохраняет этот пример просто неявным, не реальным, Dimension (:), allocatable :: points integer :: number_of_points = 0 real :: average_points = 0., Positive_average = 0., Negative_average = 0. write (*, *) «Введите количество точек для усреднения:» read (*, *) количество_точек выделить (points (number_of_points)) write (*, *) «Введите количество точек для усреднения:» read (*, *) points ! Возьмите среднее значение, суммируя очки и разделив на число_точек, если (число_поинтов>0) average_points = sum (points) / number_of_points! Теперь формируйте среднее значение по положительным и отрицательным точкам, только если (count (points>0.)>0) then positive_average = sum (points, points>0.) / Count (points>0.) End if if (count (points < 0.)>0), затем negative_average = sum (баллы, баллы < 0.) / count(points < 0.) end if deallocate (points) ! Print result to terminal write (*,'(a,g12.4)') 'Average = ', average_points write (*,'(a,g12.4)') 'Average of positive points = ', positive_average write (*,'(a,g12.4)') 'Average of negative points = ', negative_average end program average
Во время того же заседания комитета по стандартам FORTRAN, на котором было выбрано название «FORTRAN 77», сатирическое техническое предложение было включено в официальный дистрибутив. заголовок «Буква O Считается вредным ». Это предложение было направлено на устранение путаницы, которая иногда возникает между буквой «O» и нулем, путем исключения буквы из допустимых имен переменных. Однако предложенный метод заключалась в том, чтобы полностью исключить букву из набора символов (тем самым сохранив 48 как количество лексических символов, которое двоеточие увеличило до 49). Это было сочтено полезным, поскольку это будет способствовать структурированному программированию, делая невозможным использование пресло вутого ПЕРЕЙДИТЕ К
оператору, как раньше. ( Также будут устранены проблемные операторы FORMAT
.) Было отмечено, что это «может сделать недействительными некоторые существующие программы», но что большинство из них «в любом случае, вероятно, не соответствуют требованиям».
Когда X3J3 обсуждая, должно ли минимальное количество отключений для цикла DO быть равным нулю или единице в Fortran 77, Лорен Мейснер предложил минимальное количество отключений, равное двум, - рассуждая (иронично), что если бы оно было меньше двух, то не было бы никаких причин. за петлю!
Когда добавлялись массивы предполагаемой длины, возник спор относительно подходящего символа для разделения верхней и нижней границ. В комментарии, посвященном этим аргументам, доктор Уолт Брейнерд написал статью под названием «Астрономия против гастроэнтерологии», потому что некоторые сторонники предлагали использовать звездочку или звездочку («*»), в то время как другие предпочитали толстую кишку («:»).
В FORTRAN 77 (и в большинстве более ранних версий) имена переменных, начинающиеся с букв I – N, имели целочисленный тип по умолчанию, в то время как переменные, начинающиеся с любых других букв, по умолчанию принимались реальными, хотя программисты могли переопределить значения по умолчанию с явным декларация. Это привело к шутке: «В Фортране БОГ РЕАЛЬНЫЙ (если не объявлено INTEGER)».
В Викиучебниках есть книга по теме: Фортран |
Викицитатник содержит цитаты относится к: Fortran |