stringtranslate.com

Фортран

Fortran ( / ˈ f ɔːr t r æ n / ; ранее FORTRAN ) — компилируемый императивный язык программирования третьего поколения , который особенно подходит для числовых вычислений и научных расчетов .

Fortran изначально был разработан IBM . [3] Впервые он был правильно скомпилирован в 1958 году. [4] Компьютерные программы Fortran были написаны для поддержки научных и инженерных приложений, таких как численное прогнозирование погоды , конечно-элементный анализ , вычислительная гидродинамика , физика плазмы , геофизика , вычислительная физика , кристаллография и вычислительная химия . Это популярный язык для высокопроизводительных вычислений [5] и используется для программ, которые тестируют и ранжируют самые быстрые суперкомпьютеры в мире . [6] [7]

Установка суперкомпьютера IBM Blue Gene/P в 2007 году в вычислительном центре Argonne Leadership Angela Yang, расположенном в Аргоннской национальной лаборатории в Лемонте , штат Иллинойс , США.

Fortran развивался через многочисленные версии и диалекты. В 1966 году Американский национальный институт стандартов (ANSI) разработал стандарт для Fortran, чтобы ограничить распространение компиляторов, использующих немного отличающийся синтаксис. [8] Последующие версии добавили поддержку символьного типа данных (Fortran 77), структурного программирования , программирования массивов , модульного программирования , универсального программирования (Fortran 90), параллельных вычислений ( Fortran 95 ), объектно-ориентированного программирования (Fortran 2003) и параллельного программирования (Fortran 2008).

Генеалогическое дерево FORTRAN и COBOL

С апреля 2024 года Fortran входит в десятку лучших языков в индексе TIOBE — показателе популярности языков программирования. [9]

Нейминг

Первое руководство по FORTRAN описывает его как Formula Translating System (Систему преобразования формул ) и печатает название заглавными буквами : Fortran . [10] : стр.  2 [11] Другие источники предполагают, что название расшифровывается как Formula Translator ( Транслятор формул ) [12] или Formula Translation (Трансляция формул ) [13]

Ранние компьютеры IBM не поддерживали строчные буквы, и названия версий языка вплоть до FORTRAN 77 обычно писались полностью заглавными буквами . [14] FORTRAN 77 была последней версией, в которой набор символов Fortran включал только заглавные буквы. [15]

Официальные стандарты языка Fortran именуют язык «Fortran» с заглавными буквами, начиная с Fortran 90. [ необходима ссылка ]

Происхождение

Джон Бэкус (1924–2007) предложил проект FORTRAN в декабре 1953 года и получил премию А. М. Тьюринга в 1977 году.

В конце 1953 года Джон В. Бэкус представил своему руководству в IBM предложение разработать более практичную альтернативу языку ассемблера для программирования их мэйнфреймового компьютера IBM 704. [11] : 69  Историческая команда Бэкуса по FORTRAN состояла из программистов Ричарда Голдберга, Шелдона Ф. Беста, Харлана Херрика, Питера Шеридана, Роя Натта , Роберта Нельсона, Ирвинга Циллера, Гарольда Стерна, Лоис Хайбт и Дэвида Сейра . [16] Ее концепции включали более простой ввод уравнений в компьютер, идею, разработанную Дж. Холкомбом Лэнингом и продемонстрированную в системе Лэнинга и Цирлера 1952 года. [17]

Система автоматического кодирования Fortran для IBM 704 (15 октября 1956 г.), первое справочное руководство программиста по Fortran [10]

Проект спецификации для IBM Mathematical Formula Translating System был завершен к ноябрю 1954 года. [11] : 71  Первое руководство по FORTRAN появилось в октябре 1956 года, [10] [11] : 72  а первый компилятор FORTRAN был выпущен в апреле 1957 года. [11] : 75  Fortran создавал достаточно эффективный код для программистов на языке ассемблера , чтобы принять замену на языке программирования высокого уровня . [18]

Джон Бэкус сказал в интервью 1979 года журналу Think для сотрудников IBM: «Большая часть моей работы — это результат лени. Мне не нравилось писать программы, и поэтому, когда я работал над IBM 701 , писал программы для вычисления траекторий ракет, я начал работать над системой программирования, чтобы упростить написание программ». [19]

Язык был широко принят учеными для написания численно-интенсивных программ, что побудило авторов компиляторов создавать компиляторы, которые могли бы генерировать более быстрый и эффективный код. Включение в язык типа данных комплексного числа сделало Fortran особенно подходящим для технических приложений, таких как электротехника. [20]

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

FORTRAN был предоставлен для компьютера IBM 1401 инновационным 63-фазным компилятором, который работал полностью в его основной памяти, состоящей всего из 8000 (шестибитных) символов. Компилятор мог запускаться с ленты или с колоды из 2200 карт; он не использовал дополнительную ленту или дисковое хранилище. Он хранил программу в памяти и загружал оверлеи , которые постепенно преобразовывали ее на месте в исполняемую форму, как описано Хейнсом. [21] Эта статья была перепечатана, отредактирована в обоих изданиях Anatomy of a Compiler [22] и в руководстве IBM "Fortran Specifications and Operating Procedures, IBM 1401". [23] Исполняемая форма не была полностью машинным языком ; скорее, арифметика с плавающей точкой, субскриптинг, ввод/вывод и ссылки на функции были интерпретированы, опередив UCSD Pascal P-код на два десятилетия. GOTRAN , упрощенная, интерпретируемая версия FORTRAN I (только с 12 операторами, а не с 32) для операции «загрузить и запустить» была доступна (по крайней мере, для раннего компьютера IBM 1620 ). [24] Современный Fortran и почти все более поздние версии полностью скомпилированы, как это сделано для других высокопроизводительных языков.

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

ФОРТРАН

Первоначальный выпуск FORTRAN для IBM 704 [10] содержал 32 оператора , в том числе:

Арифметическое IFвыражение напоминало (но не было легко реализовано) инструкцию трехстороннего сравнения (CAS — Compare Accumulator with Storage), имевшуюся на 704. Выражение предоставляло единственный способ сравнения чисел — путем проверки их разницы, с сопутствующим риском переполнения. Этот недостаток был позже преодолен «логическими» возможностями, введенными в FORTRAN IV.

Первоначально (и необязательно) этот FREQUENCYоператор использовался для задания вероятностей ветвления для трех случаев ветвления арифметического IFоператора. Его также можно было использовать для указания того, сколько итераций DOможет выполнить цикл. Первый компилятор FORTRAN использовал это взвешивание для выполнения во время компиляции моделирования Монте-Карло сгенерированного кода, результаты которого использовались для оптимизации размещения базовых блоков в памяти — очень сложная оптимизация для своего времени. Метод Монте-Карло описан в статье Бэкуса и др. об этой оригинальной реализации, The FORTRAN Automatic Coding System :

Основная единица программы — базовый блок ; базовый блок — это фрагмент программы, имеющий одну точку входа и одну точку выхода. Целью раздела 4 является подготовка для раздела 5 таблицы предшественников (таблица PRED), которая перечисляет базовые блоки и перечисляет для каждого базового блока каждый из базовых блоков, который может быть его непосредственным предшественником в потоке, вместе с абсолютной частотой каждой такой связи базового блока. Эта таблица получается путем однократного запуска программы в режиме Монте-Карло, в котором результат условных переходов, возникающих из операторов типа IF и вычисленных GO TO, определяется генератором случайных чисел, соответствующим образом взвешенным в соответствии с любыми предоставленными операторами FREQUENCY. [16]

Первый компилятор FORTRAN сообщал диагностическую информацию, останавливая программу при обнаружении ошибки и выводя код ошибки на консоль. Этот код мог быть найден программистом в таблице сообщений об ошибках в руководстве оператора, предоставляя ему краткое описание проблемы. [10] : стр. 19–20  [25] Позже была включена подпрограмма обработки ошибок для обработки пользовательских ошибок, таких как деление на ноль, разработанная NASA, [26] , информирующая пользователей о том, какая строка кода содержала ошибку.

Фиксированная раскладка и перфокарты

Код FORTRAN на перфокарте , показывающий специализированное использование столбцов 1–5, 6 и 73–80
Воспроизведение формы кодирования FORTRAN, напечатанной на бумаге и предназначенной для использования программистами при подготовке программ для перфорации на картах операторами перфораторов . В настоящее время устарело.

До развития дисковых файлов, текстовых редакторов и терминалов программы чаще всего вводились с клавиатуры перфоратора на 80-колоночные перфокарты , по одной строке на карту. Полученная колода карт подавалась в считыватель карт для компиляции. Коды перфокарт не включали строчные буквы или множество специальных символов, и предлагались специальные версии перфоратора IBM 026 , которые правильно печатали переназначенные специальные символы, используемые в FORTRAN.

Исходя из практики ввода данных с помощью перфокарт, программы на языке Fortran изначально писались в формате с фиксированным количеством столбцов, при этом первые 72 столбца считывались в двенадцать 36-битных слов.

Буква "C" в столбце 1 приводила к тому, что вся карточка рассматривалась как комментарий и игнорировалась составителем. В противном случае столбцы карточки делились на четыре поля:

Столбцы с 73 по 80 могли, таким образом, использоваться для идентификационной информации, такой как перфорация порядкового номера или текста, который мог использоваться для повторного упорядочивания карт, если стопка карт была потеряна; хотя на практике это было зарезервировано для стабильных, производственных программ. IBM 519 мог использоваться для копирования колоды программ и добавления порядковых номеров. Некоторые ранние компиляторы, например, IBM 650, имели дополнительные ограничения из-за ограничений их считывателей карт. [28] Клавиатурные перфораторы могли быть запрограммированы на табуляцию до столбца 7 и пропуск после столбца 72. Более поздние компиляторы смягчили большинство ограничений фиксированного формата, и это требование было устранено в стандарте Fortran 90.

В поле оператора пробельные символы (пробелы) игнорировались вне текстового литерала. Это позволяло опускать пробелы между токенами для краткости или включать пробелы в идентификаторы для ясности. Например, AVG OF Xбыл допустимым идентификатором, эквивалентным AVGOFX, и был допустимым оператором, эквивалентным , поскольку ноль в столбце 6 обрабатывается так, как если бы он был пробелом (!), тогда как вместо этого был , присвоение 1.101 переменной с именем . Обратите внимание на небольшое визуальное различие между запятой и точкой.101010DO101I=1,10110101 DO 101 I = 1, 101101010DO101I=1.10110101 DO101I = 1.101DO101I

Строки Холлерита , изначально разрешенные только в операторах FORMAT и DATA, имели префикс в виде количества символов и буквы H (например, 26HTHIS IS ALPHANUMERIC DATA.), что позволяло сохранять пробелы в строке символов. Ошибки в подсчетах были проблемой.

Эволюция

ФОРТРАН II

FORTRAN II от IBM появился в 1958 году. Главным усовершенствованием стала поддержка процедурного программирования путем разрешения написанных пользователем подпрограмм и функций, которые возвращали значения с параметрами, переданными по ссылке . Оператор COMMON предоставлял подпрограммам способ доступа к общим (или глобальным ) переменным. Было введено шесть новых операторов: [29]

В течение следующих нескольких лет в FORTRAN II была добавлена ​​поддержка типов данных DOUBLE PRECISIONи COMPLEX.

Ранние компиляторы FORTRAN не поддерживали рекурсию в подпрограммах. Ранние компьютерные архитектуры не поддерживали концепцию стека, и когда они напрямую поддерживали вызовы подпрограмм, место возврата часто сохранялось в одном фиксированном месте рядом с кодом подпрограммы (например, IBM 1130 ) или в определенном машинном регистре ( IBM 360 и далее ), что допускает рекурсию только в том случае, если стек поддерживается программным обеспечением, а адрес возврата сохраняется в стеке до выполнения вызова и восстанавливается после возврата вызова. Хотя это и не указано в FORTRAN 77, многие компиляторы F77 поддерживали рекурсию как опцию, а мэйнфреймы Burroughs , разработанные со встроенной рекурсией, делали это по умолчанию. Это стало стандартом в Fortran 90 через новое ключевое слово RECURSIVE. [30]

Простая программа на FORTRAN II

Эта программа для формулы Герона считывает данные с катушки ленты, содержащей три 5-значных целых числа A, B и C в качестве входных данных. Нет доступных объявлений "типа": переменные, имена которых начинаются с I, J, K, L, M или N, являются "фиксированными" (т. е. целыми), в противном случае - с плавающей точкой. Поскольку в этом примере должны обрабатываться целые числа, имена переменных начинаются с буквы "I". Имя переменной должно начинаться с буквы и может продолжаться как буквами, так и цифрами, до предела в шесть символов в FORTRAN II. Если A, B и C не могут представлять стороны треугольника в плоской геометрии, то выполнение программы завершится с кодом ошибки "STOP 1". В противном случае будет напечатана строка вывода, отображающая входные значения для A, B и C, за которыми следует вычисленная ПЛОЩАДЬ треугольника в виде числа с плавающей точкой, занимающего десять позиций вдоль строки вывода и отображающего 2 цифры после десятичной точки, .2 в F10.2 оператора FORMAT с меткой 601.

C ПЛОЩАДЬ ТРЕУГОЛЬНИКА СО СТАНДАРТНОЙ ФУНКЦИЕЙ КВАДРАТНОГО КОРНЯ C ВХОД - УСТРОЙСТВО ЧТЕНИЯ ЛЕНТ 5, ЦЕЛЫЙ ВХОД C ВЫХОД - УСТРОЙСТВО СТРОЧНОГО ПРИНТЕРА 6, ДЕЙСТВИТЕЛЬНЫЙ ВЫХОД C ВХОД ОШИБКИ ОТОБРАЖЕНИЯ ОШИБКИ ВЫХОДА КОД 1 В СПИСКЕ УПРАВЛЕНИЯ ЗАДАНИЯМИ ЧТЕНИЕ ВХОДА ЛЕНТЫ 5 , 501 , IA , IB , IC  501 ФОРМАТ ( 3 I5 ) C IA, IB и IC НЕ МОГУТ БЫТЬ ОТРИЦАТЕЛЬНЫМИ ИЛИ НУЛЕМ C КРОМЕ ТОГО, СУММА ДВУХ СТОРОН ТРЕУГОЛЬНИКА 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 ИСПОЛЬЗУЯ ФОРМУЛУ ГЕРОНА ВЫЧИСЛЯЕМ ПЛОЩАДЬ ТРЕУГОЛЬНИКА  799 S = FLOATF ( IA + IB + IC ) / 2.0 ПЛОЩАДЬ = SQRTF ( S * ( S - FLOATF ( IA )) * ( S - FLOATF ( IB )) * + ( S - FLOATF ( IC ))) ЗАПИСЬ ВЫХОДНОЙ ЛЕНТЫ 6 , 601 , IA , IB , IC , ОБЛАСТЬ  601 ФОРМАТ ( 4 H A = , I5 , 5 H B                                                                                    = , I5 , 5 H C = , I5 , 8 H ПЛОЩАДЬ = , F10 . 2 , + 13 H КВАДРАТНЫЕ ЕДИНИЦЫ ) СТОП КОНЕЦ             

ФОРТРАН III

IBM также разработала FORTRAN III в 1958 году, который позволял использовать встроенный ассемблерный код среди других функций; однако эта версия так и не была выпущена как продукт. Как и 704 FORTRAN и FORTRAN II, FORTRAN III включал машинно-зависимые функции, которые делали написанный на нем код непереносимым с машины на машину. [11] : 76  Ранние версии FORTRAN, предоставленные другими поставщиками, страдали от того же недостатка.

ФОРТРАН IV

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 году. [31]

К 1965 году FORTRAN IV должен был соответствовать стандарту, разрабатываемому рабочей группой Американской ассоциации стандартов X3.4.3 FORTRAN. [32]

В период с 1966 по 1968 год IBM предложила несколько компиляторов FORTRAN IV для своей System/360 , каждый из которых был назван буквами, указывающими минимальный объем памяти, необходимый компилятору для работы. [33] Буквы (F, G, H) соответствовали кодам, используемым в номерах моделей System/360 для указания объема памяти, причем каждое увеличение буквы было в два раза больше: [34] : стр. 5 

Корпорация Digital Equipment Corporation поддерживала DECSYSTEM-10 Fortran IV (F40) для PDP-10 с 1967 по 1975 год. [35] Компиляторы также были доступны для серии UNIVAC 1100 и систем серий Control Data 6000 и 7000. [36]

Примерно в это же время FORTRAN IV начал становиться важным образовательным инструментом, и были созданы такие реализации, как WATFOR и WATFIV Университета Ватерлоо, чтобы упростить сложные процессы компиляции и компоновки более ранних компиляторов.

В среде программирования FORTRAN IV той эпохи, за исключением той, что использовалась в системах Control Data Corporation (CDC), на строку помещалась только одна инструкция. Версия CDC допускала несколько инструкций на строку, если они были разделены символом $ (доллар). Лист FORTRAN был разделен на четыре поля, как описано выше.

Два компилятора того времени, IBM "G" и UNIVAC, позволяли писать комментарии на той же строке, что и инструкции, разделяя их специальным символом: "главным пробелом": V (перфорации 7 и 8) для UNIVAC и перфорации 12/11/0/7/8/9 (шестнадцатеричный FF) для IBM. Эти комментарии не должны были вставляться в середину карт продолжения. [35] [36]

ФОРТРАН 66

Возможно, самым значительным событием в ранней истории FORTRAN стало решение Американской ассоциации стандартов (ныне Американский национальный институт стандартов (ANSI)) сформировать комитет, спонсируемый Ассоциацией производителей коммерческого оборудования (BEMA), для разработки американского стандарта FORTRAN . Полученные два стандарта, утвержденные в марте 1966 года, определили два языка: FORTRAN (основанный на FORTRAN IV, который служил фактическим стандартом) и Basic FORTRAN (основанный на FORTRAN II, но лишенный его машинно-зависимых функций). FORTRAN, определенный первым стандартом, официально обозначенным как X3.9-1966, стал известен как FORTRAN 66 (хотя многие продолжали называть его FORTRAN IV, языком, на котором в значительной степени базировался стандарт). FORTRAN 66 фактически стал первой версией FORTRAN, принятой в качестве отраслевого стандарта. FORTRAN 66 включал:

Вышеуказанная версия Fortran II программы Heron требует нескольких модификаций для компиляции в качестве программы Fortran 66. Модификации включают использование более машинно-независимых версий операторов READи WRITEудаление ненужных FLOATFфункций преобразования типов. Хотя это и не обязательно, арифметические IFоператоры можно переписать для использования логических IFоператоров и выражений в более структурированной форме.

C ПЛОЩАДЬ ТРЕУГОЛЬНИКА СО СТАНДАРТНОЙ ФУНКЦИЕЙ КВАДРАТНОГО КОРНЯ C ВХОД - УСТРОЙСТВО ЧТЕНИЯ ЛЕНТ 5, ЦЕЛЫЙ ВХОД C ВЫХОД - СТРОЕЧНЫЙ ПРИНТЕР УСТРОЙСТВО 6, ДЕЙСТВИТЕЛЬНЫЙ ВЫХОД C ВХОД ОШИБКА ОТОБРАЖЕНИЯ ОШИБКА ВЫХОДА КОД 1 В СПИСКЕ УПРАВЛЕНИЯ ЗАДАНИЯМИ ЧТЕНИЕ ( 5 , 501 ) IA , IB , IC  501 ФОРМАТ ( 3 I5 ) C C IA, IB и IC НЕ МОГУТ БЫТЬ ОТРИЦАТЕЛЬНЫМИ ИЛИ НУЛЕМ C КРОМЕ ТОГО, СУММА ДВУХ СТОРОН ТРЕУГОЛЬНИКА C ДОЛЖНА БЫТЬ БОЛЬШЕ ТРЕТЬЕЙ СТОРОНЫ , ПОЭТОМУ МЫ ПРОВЕРЯЕМ ЭТО ТАКЖЕ ЕСЛИ ( IA . GT . 0 . И . IB . GT . 0 . И . IC . GT . 0 ) ПЕРЕЙТИ К 10 ЗАПИСЬ ( 6 , 602 )  602 ФОРМАТ ( 42 H IA , IB , И IC ДОЛЖНЫ БЫТЬ БОЛЬШЕ НУЛЯ . ) СТОП 1  10 ПРОДОЛЖИТЬ C ЕСЛИ ( IA + IB - IC . GT . 0 + . И . IA + IC - IB . GT . 0 + . И . IB + IC - IA . GT . 0 ) ПЕРЕЙТИ К 20 ЗАПИСЬ ( 6 , 603 )  603 ФОРМАТ ( 50 H СУММА ДВУХ СТОРОН ДОЛЖНА БЫТЬ БОЛЬШЕ ТРЕТЬЕЙ СТОРОНЫ .) СТОП 1 20  ПРОДОЛЖИТЬ C C ИСПОЛЬЗУЯ ФОРМУЛУ ГЕРОНА, ВЫЧИСЛЯЕМ ПЛОЩАДЬ ТРЕУГОЛЬНИКА S = ( IA + IB + IC ) / 2.0 ПЛОЩАДЬ = КОРЕНЬ ( S * ( S - IA ) *                                                                                                        ( S - IB ) * ( S - IC )) ЗАПИСЬ ( 6 , 601 ) IA , IB , IC , ОБЛАСТЬ  601 ФОРМАТ ( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H ОБЛАСТЬ = , F10 . 2 , + 13 H КВАДРАТНЫЕ ЕДИНИЦЫ ) СТОП КОНЕЦ                                

ФОРТРАН 77

Программа на языке FORTRAN-77 с выводом компилятора, написанная на CDC 175 в Рейнско-Вестфальском техническом университете Ахена , Германия, в 1987 году.
4.3 BSD для Digital Equipment Corporation (DEC) VAX , отображающий руководство для компилятора FORTRAN 77 (f77)

После выпуска стандарта FORTRAN 66 поставщики компиляторов представили несколько расширений к стандартному Fortran , что побудило комитет ANSI X3J3 в 1969 году начать работу по пересмотру стандарта 1966 года под спонсорством CBEMA , Ассоциации производителей компьютерного делового оборудования (ранее BEMA). Окончательные проекты этого пересмотренного стандарта были распространены в 1977 году, что привело к формальному утверждению нового стандарта FORTRAN в апреле 1978 года. Новый стандарт, названный FORTRAN 77 и официально обозначенный X3.9-1978, добавил ряд существенных особенностей для устранения многих недостатков FORTRAN 66:

В этой редакции стандарта ряд функций были удалены или изменены таким образом, что могли сделать недействительными ранее соответствующие стандарту программы. (Удаление было единственной допустимой альтернативой X3J3 в то время, поскольку концепция « устаревания » еще не была доступна для стандартов ANSI.) Хотя большинство из 24 пунктов в списке конфликтов (см. Приложение A2 к X3.9-1978) касались лазеек или патологических случаев, разрешенных предыдущим стандартом, но редко используемых, небольшое количество конкретных возможностей было намеренно удалено, например:

Версия Fortran 77 программы Heron не требует никаких изменений в версии Fortran 66. Однако этот пример демонстрирует дополнительную очистку операторов ввода-вывода, включая использование ввода-вывода, управляемого списком, и замену дескрипторов редактирования Холлерита в FORMATоператорах на строки в кавычках. Он также использует структурированные операторы IFи END IFвместо GOTO/ CONTINUE.

  ПРОГРАММА HERON C ПЛОЩАДЬ ТРЕУГОЛЬНИКА СО СТАНДАРТНОЙ ФУНКЦИЕЙ КВАДРАТНОГО КОРНЯ C ВХОД - СТАНДАРТНАЯ ЕДИНИЦА ВВОДА ПО УМОЛЧАНИЮ, ЦЕЛОЕ ЧИСЛО ВХОД C ВЫХОД - СТАНДАРТНАЯ ЕДИНИЦА ВЫВОДА ПО УМОЛЧАНИЮ, ДЕЙСТВИТЕЛЬНОЕ ЧИСЛО ВЫХОД C ОТОБРАЖЕНИЕ ОШИБКИ ВХОДА КОД ВЫВОДА ОШИБКИ 1 В СПИСКЕ УПРАВЛЕНИЯ ЗАДАНИЯМИ ЧИТАТЬ ( * , * ) IA , IB , IC C C IA, IB и IC НЕ МОГУТ БЫТЬ ОТРИЦАТЕЛЬНЫМИ ИЛИ НУЛЕМ C КРОМЕ ТОГО, СУММА ДВУХ СТОРОН ТРЕУГОЛЬНИКА C ДОЛЖНА БЫТЬ БОЛЬШЕ ТРЕТЬЕЙ СТОРОНЫ, ПОЭТОМУ МЫ ПРОВЕРЯЕМ ЭТО ТАКЖЕ ЕСЛИ ( IA . LE . 0 . ИЛИ . IB . LE . 0 . ИЛИ . IC . LE . 0 ) ТОГДА НАПИШИТЕ ( * , * ) 'IA, IB и IC должны быть больше нуля.' СТОП 1 КОНЕЦ IF C IF ( IA + IB - IC . LE . 0 + . ИЛИ . IA + IC - IB . LE . 0 + . ИЛИ . IB + IC - IA . LE . 0 ) ТОГДА НАПИШИТЕ ( * , * ) 'Сумма двух сторон должна быть больше третьей стороны.' СТОП 1 КОНЕЦ ЕСЛИ C C ИСПОЛЬЗУЯ ФОРМУЛУ ГЕРОНА ВЫЧИСЛЯЕМ C ПЛОЩАДЬ ТРЕУГОЛЬНИКА S = ( IA + IB + IC ) / 2.0 ПЛОЩАДЬ = КОРЕНЬ ( S * ( S - IA ) * ( S - IB ) * ( S - IC )) ЗАПИСАТЬ ( * , 601 ) IA , IB , IC , ПЛОЩАДЬ  601 ФОРМАТ ( 'A= ' , I5 , ' B= ' , I5 ,                                                                                                     ' C= ' , I5 , ' AREA= ' , F10 . 2 , + ' квадратные единицы' ) СТОП КОНЕЦ         

Переход на стандарт ANSI Fortran

Разработка пересмотренного стандарта для замены FORTRAN 77 будет неоднократно откладываться, поскольку процесс стандартизации будет бороться за то, чтобы успевать за быстрыми изменениями в практике вычислений и программирования. В то же время, будучи "Стандартным FORTRAN" в течение почти пятнадцати лет, FORTRAN 77 станет исторически самым важным диалектом.

Важным практическим расширением FORTRAN 77 стал выпуск MIL-STD-1753 в 1978 году. [37] Эта спецификация, разработанная Министерством обороны США , стандартизировала ряд функций, реализованных большинством компиляторов FORTRAN 77, но не включенных в стандарт ANSI FORTRAN 77. Эти функции в конечном итоге были включены в стандарт Fortran 90.

Стандарт IEEE 1003.9 POSIX , выпущенный в 1991 году, предоставил программистам FORTRAN 77 простые средства для выполнения системных вызовов POSIX. [38] В документе было определено более 100 вызовов, что позволило получить доступ к совместимому с POSIX управлению процессами, обработке сигналов, управлению файловой системой, управлению устройствами, указанию процедур и потоковому вводу-выводу в переносимой форме.

Фортран 90

Долгожданный преемник FORTRAN 77, неофициально известный как Fortran 90 (а до этого Fortran 8X ), был наконец выпущен как стандарт ISO/IEC 1539:1991 в 1991 году и стандарт ANSI в 1992 году. Помимо изменения официального написания с FORTRAN на Fortran, эта крупная редакция добавила много новых функций, отражающих значительные изменения в практике программирования, произошедшие со времени стандарта 1978 года:

Устаревание и удаления

В отличие от предыдущей версии, Fortran 90 не удалил ни одной функции. [39] Любая программа на FORTRAN 77, соответствующая стандарту, также соответствовала стандарту Fortran 90, и любой из этих стандартов должен был быть пригоден для определения ее поведения.

Небольшой набор функций был определен как «устаревший» и, как ожидалось, будет удален в будущем стандарте. Все функции этих функций ранней версии могут быть реализованы более новыми функциями Fortran. Некоторые из них сохранены для упрощения переноса старых программ, но многие были удалены в Fortran 95.

Пример «Привет, мир!»

программа helloworld print * , "Привет, мир!" конец программы helloworld   

Фортран 95

Fortran 95 , официально опубликованный как ISO/IEC 1539-1:1997, был незначительной переработкой, в основном для решения некоторых нерешенных проблем стандарта Fortran 90. Тем не менее, Fortran 95 также добавил ряд расширений, в частности из спецификации High Performance Fortran :

Ряд встроенных функций был расширен (например, dimк встроенной функции был добавлен аргумент maxloc).

Несколько функций, отмеченных в Fortran 90 как «устаревшие», были удалены из Fortran 95:

Важным дополнением к Fortran 95 стал технический отчет ISO TR-15581: Enhanced Data Type Facilities , неформально известный как Allocatable TR. Эта спецификация определила расширенное использование ALLOCATABLEмассивов до появления полностью совместимых с Fortran 2003 компиляторов Fortran. Такое использование включает ALLOCATABLEмассивы как компоненты производного типа, в списках фиктивных аргументов процедур и в качестве возвращаемых значений функций. ( ALLOCATABLEмассивы предпочтительнее POINTERмассивов на основе , поскольку ALLOCATABLEFortran 95 гарантирует, что массивы будут автоматически освобождены, когда они выходят из области видимости, что исключает возможность утечки памяти . Кроме того, элементы выделяемых массивов являются смежными, и псевдонимы не являются проблемой для оптимизации ссылок на массивы, что позволяет компиляторам генерировать более быстрый код, чем в случае указателей. [40] )

Другим важным дополнением к Fortran 95 был технический отчет ISO TR-15580: Обработка исключений с плавающей точкой , неофициально известный как IEEE TR. Эта спецификация определяла поддержку арифметики с плавающей точкой IEEE и обработку исключений с плавающей точкой .

Условная компиляция и строки переменной длины

Помимо обязательного «Базового языка» (определенного в ISO/IEC 1539-1: 1997), язык Fortran 95 также включал два дополнительных модуля:

которые вместе составляют многочастный международный стандарт (ISO/IEC 1539).

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

Современный Фортран

Язык, определенный стандартами двадцать первого века, в частности из-за включения в него поддержки объектно-ориентированного программирования и впоследствии Coarray Fortran , часто называют «современным Fortran», и этот термин все чаще используется в литературе. [41]

Фортран 2003

Fortran 2003, официально опубликованный как ISO/IEC 1539-1:2004, был крупной переработкой, вносящей множество новых функций. [42] Полный обзор новых функций Fortran 2003 доступен на официальном веб-сайте Fortran Working Group ( ISO/IEC JTC1/SC22 /WG5). [43]

Из этой статьи следует, что основные усовершенствования данной редакции включают в себя:

Важным дополнением к Fortran 2003 стал технический отчет ISO TR-19767: Enhanced module facilities in Fortran. В этом отчете были представлены подмодули, которые делают модули Fortran более похожими на модули Modula-2 . Они похожи на частные дочерние подмодули Ada . Это позволяет выразить спецификацию и реализацию модуля в отдельных программных единицах, что улучшает упаковку больших библиотек, позволяет сохранять коммерческие секреты при публикации окончательных интерфейсов и предотвращает каскадную компиляцию.

Фортран 2008

ISO/IEC 1539-1:2010, неофициально известный как Fortran 2008, был утвержден в сентябре 2010 года. [44] [45] Как и Fortran 95, это небольшое обновление, включающее разъяснения и исправления Fortran 2003, а также вводящее некоторые новые возможности. Новые возможности включают:

Окончательный проект международного стандарта (FDIS) доступен как документ N1830. [46]

Дополнением к Fortran 2008 является Техническая спецификация (TS) 29113 Международной организации по стандартизации (ISO) по дальнейшему взаимодействию Fortran с C [47] [48] , которая была представлена ​​в ISO в мае 2012 года для утверждения. Спецификация добавляет поддержку доступа к дескриптору массива из C и позволяет игнорировать тип и ранг аргументов.

Фортран 2018

Версия языка Fortran 2018 ранее называлась Fortran 2015. [49] Это была значительная версия, выпущенная 28 ноября 2018 года. [50]

Fortran 2018 включает в себя две ранее опубликованные технические спецификации:

Дополнительные изменения и новые функции включают поддержку ISO/IEC/IEEE 60559:2011 (версия стандарта IEEE для чисел с плавающей точкой до последней незначительной редакции IEEE 754–2019), шестнадцатеричный ввод/вывод, улучшения IMPLICIT NONE и другие изменения. [53] [54] [55] [56]

Fortran 2018 удалил арифметический оператор IF. Он также удалил неблочные конструкции DO — циклы, которые не заканчиваются оператором END DO или CONTINUE. Они были устаревшей частью языка со времен Fortran 90.

Новые устаревшие элементы: операторы COMMON и EQUIVALENCE, программный блок BLOCK DATA, обозначенные циклы DO, специальные имена для встроенных функций, а также оператор и конструкция FORALL.

Фортран 2023

Fortran 2023 (ISO/IEC 1539-1:2023) был опубликован в ноябре 2023 года и может быть приобретен в ISO. [57] Fortran 2023 — это небольшое расширение Fortran 2018, которое фокусируется на исправлении ошибок и упущений в Fortran 2018. Он также добавляет некоторые небольшие функции, включая возможность перечисляемого типа .

Особенности языка

Полное описание возможностей языка Fortran, привнесенных Fortran 95, приведено в соответствующей статье Возможности языка Fortran 95. Версии языка, определенные более поздними стандартами, часто именуются в совокупности «Современный Fortran» и описываются в литературе.

Наука и техника

Общерелятивистское магнитогидродинамическое моделирование аккреции черных дыр на языке Фортран с использованием кода BHAC с декартовой адаптивной сеткой
Поток вокруг цилиндра, рассчитанный на языке Fortran с использованием OpenCL (Бристольский университет, Великобритания)
Скорость и температура поверхности моря в океанах, рассчитанные с помощью кода NEMO Fortran (Nucleus for European Modeling of the Ocean, https://www.nemo-ocean.eu) в Барселонском суперкомпьютерном центре (2020 г.)

Хотя в журнальной статье 1968 года авторы BASIC уже описали FORTRAN как «старомодный», [58] программы писались на Fortran в течение многих десятилетий, и существует огромное количество программного обеспечения Fortran, которое ежедневно используется в научных и инженерных сообществах. [59] Джей Пасачофф писал в 1984 году, что «студенты-физики и астрономы просто обязаны изучать FORTRAN. В FORTRAN так много всего, что кажется маловероятным, что ученые перейдут на Pascal , Modula-2 или что-то еще». [60] В 1993 году Сесил Э. Лейт назвал FORTRAN «родным языком научных вычислений», добавив, что его замена любым другим возможным языком «может остаться безнадежной надеждой». [61]

Это основной язык для некоторых наиболее интенсивных суперкомпьютерных задач, таких как астрономия , моделирование климата , вычислительная химия , вычислительная экономика , вычислительная гидродинамика , вычислительная физика , анализ данных, [62] гидрологическое моделирование , численная линейная алгебра и числовые библиотеки ( LAPACK , IMSL и NAG ), оптимизация , спутниковое моделирование, структурная инженерия и прогнозирование погоды . [63] Многие из тестов с плавающей точкой для оценки производительности новых компьютерных процессоров, такие как компоненты тестов с плавающей точкой SPEC (например, CFP2006, CFP2017) написаны на Фортране. Математические алгоритмы хорошо документированы в Numerical Recipes .

Помимо этого, более современные коды в вычислительной науке обычно используют большие библиотеки программ, такие как METIS для разбиения графов, PETSc или Trilinos для возможностей линейной алгебры, deal.II или FEniCS для поддержки сеток и конечных элементов и другие общие библиотеки. С начала 2000-х годов многие из широко используемых библиотек поддержки также были реализованы на языке C , а в последнее время — на языке C++ . С другой стороны, высокоуровневые языки, такие как Wolfram Language , MATLAB , Python и R, стали популярными в определенных областях вычислительной науки. Следовательно, все большая часть научных программ также пишется на таких высокоуровневых языках сценариев. По этой причине возможности взаимодействия с C были добавлены в Fortran 2003 и улучшены технической спецификацией ISO/IEC 29113, которая была включена в Fortran 2018 для обеспечения более гибкого взаимодействия с другими языками программирования.

Портативность

Переносимость была проблемой в первые дни, потому что не было согласованного стандарта — даже справочного руководства IBM — и компьютерные компании соперничали, чтобы отличить свои предложения от других, предоставляя несовместимые функции. Стандарты улучшили переносимость. Стандарт 1966 года предоставил справочный синтаксис и семантику, но поставщики продолжали предоставлять несовместимые расширения. Хотя осторожные программисты начинали понимать, что использование несовместимых расширений вызывало дорогостоящие проблемы переносимости, и поэтому использовали такие программы, как The PFORT Verifier, [64] [65] только после стандарта 1977 года, когда Национальное бюро стандартов (теперь NIST ) опубликовало FIPS PUB 69 , процессоры, закупаемые правительством США, должны были диагностировать расширения стандарта. Вместо того, чтобы предлагать два процессора, по сути, каждый компилятор в конечном итоге имел по крайней мере возможность диагностировать расширения. [66] [67]

Несовместимые расширения были не единственной проблемой переносимости. Для числовых вычислений важно учитывать характеристики арифметики. Это было рассмотрено Фоксом и др. в контексте стандарта 1966 года с помощью библиотеки PORT . [65] Идеи, изложенные там, стали широко использоваться и в конечном итоге были включены в стандарт 1990 года посредством внутренних функций запроса. Широкое (теперь почти универсальное) принятие стандарта IEEE 754 для двоичной арифметики с плавающей точкой по существу устранило эту проблему.

Доступ к вычислительной среде (например, командной строке программы, переменным среды, текстовому объяснению состояний ошибок) оставался проблемой до тех пор, пока она не была решена стандартом 2003 года.

Большие коллекции библиотечного программного обеспечения, которые можно было бы описать как слабо связанные с инженерными и научными расчетами, такие как графические библиотеки, были написаны на языке C, и поэтому доступ к ним представлял проблему переносимости. Это было решено путем включения взаимодействия с C в стандарт 2003 года.

Теперь стало возможным (и относительно легко) написать полностью переносимую программу на Фортране, даже не прибегая к помощи препроцессора .

Устаревшие варианты

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

Первый компилятор Fortran установил высокий стандарт эффективности для скомпилированного кода. Эта цель затрудняла создание компилятора, поэтому это обычно делали производители компьютеров для поддержки продаж оборудования. Это оставило важную нишу: компиляторы, которые были быстрыми и обеспечивали хорошую диагностику для программиста (часто студента). Примерами являются Watfor, Watfiv, PUFFT и в меньшем масштабе FORGO, Wits Fortran и Kingston Fortran 2.

Fortran 5 продавался компанией Data General Corp с начала 1970-х до начала 1980-х годов для линеек компьютеров Nova , Eclipse и MV . Он имел оптимизирующий компилятор, который был довольно хорош для мини-компьютеров того времени. Язык больше всего напоминает FORTRAN 66.

FORTRAN V был распространен Control Data Corporation в 1968 году для серии CDC 6600. Язык был основан на FORTRAN IV. [68]

Univac также предлагал компилятор для серии 1100, известный как FORTRAN V. Отделением Univac Fortran V стала Athena FORTRAN.

Конкретные варианты, производимые поставщиками высокопроизводительных научных компьютеров (например, Burroughs , Control Data Corporation (CDC), Cray , Honeywell , IBM , Texas Instruments и UNIVAC ), добавляли расширения к Fortran, чтобы использовать преимущества специальных аппаратных функций, таких как кэш инструкций , конвейеры ЦП и векторные массивы. Например, один из компиляторов FORTRAN от IBM ( H Extended IUP ) имел уровень оптимизации, который переупорядочивал инструкции машинного кода , чтобы одновременно загружать несколько внутренних арифметических устройств. Другим примером является CFD , специальный вариант FORTRAN, разработанный специально для суперкомпьютера ILLIAC IV , работающего в исследовательском центре Эймса NASA . Исследовательские лаборатории IBM также разработали расширенный язык на основе FORTRAN под названием VECTRAN для обработки векторов и матриц.

Объектно-ориентированный Fortran был объектно-ориентированным расширением Fortran, в котором элементы данных могут быть сгруппированы в объекты, которые могут быть созданы и выполнены параллельно. Он был доступен для Sun, Iris, iPSC и nCUBE, но больше не поддерживается.

Такие машинно-специфичные расширения либо исчезли со временем, либо имели элементы, включенные в основные стандарты. Основное оставшееся расширение — OpenMP , которое является кроссплатформенным расширением для программирования общей памяти. Одно новое расширение, Coarray Fortran, предназначено для поддержки параллельного программирования.

FOR TRANSIT — название сокращенной версии языка IBM 704 FORTRAN, которая была реализована для IBM 650 с использованием программы-транслятора, разработанной в Карнеги в конце 1950-х годов. [69] Следующий комментарий появляется в справочном руководстве IBM ( система автоматического кодирования FOR TRANSIT C28-4038, авторские права 1957, 1959 принадлежат IBM):

Система FORTRAN была разработана для более сложной машины, чем 650, и, следовательно, некоторые из 32 операторов, найденных в FORTRAN Programmer's Reference Manual, не приемлемы для системы FOR TRANSIT. Кроме того, были добавлены определенные ограничения к языку FORTRAN. Однако ни одно из этих ограничений не делает исходную программу, написанную для FOR TRANSIT, несовместимой с системой FORTRAN для 704.

Допустимыми утверждениями были:

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

Операторы FOR TRANSIT были ограничены только столбцами с 7 по 56. Для ввода и вывода на IBM 650 использовались перфокарты. Требовалось три прохода для перевода исходного кода на язык «IT», затем для компиляции операторов IT в язык ассемблера SOAP и, наконец, для создания объектной программы, которую затем можно было загрузить в машину для запуска программы (используя перфокарты для ввода данных и вывода результатов на перфокарты).

Существовало две версии для 650-х с барабаном памяти на 2000 слов: FOR TRANSIT I (S) и FOR TRANSIT II, ​​последняя для машин, оснащенных индексными регистрами и автоматической арифметикой с плавающей точкой ( би-квинарной ). Приложение A к руководству включало схемы электропроводки для панели управления считывателем карт/перфоратором IBM 533 .

Языки на основе Фортрана

До FORTRAN 77 многие препроцессоры обычно использовались для предоставления более дружественного языка, с тем преимуществом, что предварительно обработанный код мог быть скомпилирован на любой машине со стандартным компилятором FORTRAN. [70] Эти препроцессоры обычно поддерживали структурное программирование , имена переменных длиннее шести символов, дополнительные типы данных, условную компиляцию и даже возможности макросов . Популярные препроцессоры включали EFL , FLECS, iftran , MORTRAN , SFtran, S-Fortran, Ratfor и Ratfiv . Например, EFL, Ratfor и Ratfiv реализовали языки, подобные C , выводя предварительно обработанный код в стандартном FORTRAN 66. Препроцессор PFORT часто использовался для проверки того, что код соответствует переносимому подмножеству языка. Несмотря на достижения в языке Fortran, препроцессоры продолжают использоваться для условной компиляции и подстановки макросов.

Одна из самых ранних версий FORTRAN, представленная в 60-х годах, широко использовалась в колледжах и университетах. Разработанный, поддерживаемый и распространяемый Университетом Ватерлоо , WATFOR был основан в основном на FORTRAN IV. Студент, использующий WATFOR, мог отправить свое пакетное задание FORTRAN, и, если не было синтаксических ошибок, программа сразу переходила к выполнению. Это упрощение позволяло студентам сосредоточиться на синтаксисе и семантике своей программы или логике выполнения, а не на языке управления заданиями отправки (JCL), последовательных процессах компиляции/компоновки-редактирования/выполнения или других сложностях среды мэйнфрейма/мини-компьютера. Недостатком этой упрощенной среды было то, что WATFOR не был хорошим выбором для программистов, которым требовались расширенные возможности их главного процессора(ов), например, WATFOR обычно имел очень ограниченный доступ к устройствам ввода-вывода. WATFOR был заменен WATFIV и его более поздними версиями.

программа ; s = 0 i = 1 , n ; s = s + 1 ; стоп i ; s = 's' Стоп      

(линейное программирование)

LRLTRAN был разработан в Lawrence Radiation Laboratory для поддержки векторной арифметики и динамического хранения, среди других расширений для поддержки системного программирования. Дистрибутив включал операционную систему Livermore Time Sharing System (LTSS).

Стандарт Fortran-95 включает в себя необязательную Часть 3 , которая определяет необязательную возможность условной компиляции . Эта возможность часто называется «CoCo».

Многие компиляторы Fortran интегрировали в свои системы подмножества препроцессора C.

SIMSCRIPT — специализированный препроцессор Fortran для моделирования и имитации больших дискретных систем.

Язык программирования F был разработан как чистое подмножество Fortran 95, которое пыталось удалить избыточные, неструктурированные и устаревшие функции Fortran, такие как EQUIVALENCEоператор. F сохраняет возможности массивов, добавленные в Fortran 90, и удаляет управляющие операторы, которые стали устаревшими из-за структурированных программных конструкций, добавленных как в FORTRAN 77, так и в Fortran 90. F описывается его создателями как «компилированный, структурированный язык программирования массивов, особенно хорошо подходящий для образования и научных вычислений». [71] Essential Lahey Fortran 90 (ELF90) был похожим подмножеством.

Lahey и Fujitsu объединились для создания Fortran для Microsoft .NET Framework . [72] Silverfrost FTN95 также способен создавать код .NET. [73]

Примеры кода

Следующая программа иллюстрирует динамическое распределение памяти и операции с массивами, две функции, введенные в Fortran 90. Особого внимания заслуживает отсутствие циклов DOи операторов IF/ THENпри работе с массивом; математические операции применяются к массиву в целом. Также очевидно использование описательных имен переменных и общего форматирования кода, которые соответствуют современному стилю программирования. Этот пример вычисляет среднее значение по данным, введенным интерактивно.

программа средняя ! Введите несколько чисел и возьмите среднее значение ! Как написано, если нет точек данных, возвращается среднее значение ноль ! Хотя это может быть нежелательным поведением, оно делает этот пример простым   неявный нет real , allocatable :: points (:) integer :: number_of_points real :: average_points , positive_average , negative_average average_points = 0. positive_average = 0. negative_average = 0. write ( * , * ) "Введите количество баллов для усреднения:" read ( * , * ) number_of_points                           выделить ( очки ( количество_очков ))  написать ( * , * ) "Введите баллы для усреднения:" прочитать ( * , * ) баллы      ! Возьмите среднее значение, суммируя баллы и разделив на количество_баллов, если ( количество_баллов > 0 ) среднее_баллы = сумма ( баллов ) / количество_баллов          ! Теперь сформируем среднее значение только по положительным и отрицательным точкам if ( count ( points > 0. ) > 0 ) positive_average = sum ( points , points > 0. ) / count ( points > 0. ) if ( count ( points < 0. ) > 0 ) negative_average = sum ( points , points < 0. ) / count ( points < 0. )                                 ! Вывести результат на терминал stdout unit 6 write ( * , '(a,g12.4)' ) 'Среднее = ' , average_points write ( * , '(a,g12.4)' ) 'Среднее положительных баллов = ' , positive_average write ( * , '(a,g12.4)' ) 'Среднее отрицательных баллов = ' , negative_average deallocate ( points ) ! освободить память               средний балл программы окончания

Юмор

Во время того же заседания комитета по стандартам FORTRAN, на котором было выбрано название «FORTRAN 77», в официальный дистрибутив было включено сатирическое техническое предложение под названием «Буква O считается вредной ». Это предложение подразумевало устранение путаницы, которая иногда возникает между буквой «O» и цифрой ноль, путем исключения буквы из допустимых имен переменных. Однако предложенный метод заключался в полном исключении буквы из набора символов (тем самым сохраняя 48 в качестве числа лексических символов, которое двоеточие увеличило до 49). Это считалось полезным, поскольку способствовало бы структурному программированию, делая невозможным использование пресловутого GO TOутверждения, как раньше. (Проблемные FORMATутверждения также будут исключены.) Было отмечено, что это «может сделать некоторые существующие программы недействительными», но что большинство из них «вероятно, были неконформными, в любом случае». [74] [ ненадежный источник? ] [75]

Когда X3J3 обсуждал, должно ли минимальное количество проходов для цикла DO быть равно нулю или единице в Fortran 77, Лорен Мейсснер предложил минимальное количество проходов, равное двум, рассуждая (в шутку) , что если бы оно было меньше двух, то не было бы смысла в цикле.

Когда добавлялись массивы предполагаемой длины, возник спор о том, какой символ следует использовать для разделения верхней и нижней границ. В комментарии, рассматривающем эти аргументы, Уолт Брейнерд написал статью под названием «Астрономия против гастроэнтерологии», поскольку некоторые сторонники предлагали использовать звездочку или звездочку («*»), в то время как другие отдавали предпочтение двоеточию («:»). [ необходима цитата ]

Имена переменных, начинающиеся с букв I–N, имеют тип по умолчанию «целое число», в то время как переменные, начинающиеся с любых других букв, по умолчанию имеют действительный тип, хотя программисты могут переопределить значения по умолчанию с помощью явного объявления. [76] Это привело к шутке: «В FORTRAN, GOD — это REAL (если не объявлено INTEGER)».

Смотрите также

Ссылки

  1. ^ "Chapel spec (Благодарности)" (PDF) . Cray Inc. 1 октября 2015 г. Архивировано (PDF) из оригинала 5 февраля 2016 г. Получено 14 января 2016 г.
  2. Отчет о визите для обсуждения общих языков программирования в Чехословакии и Польше, 1963, Джон А. Госден (редактор), Роджер Э. Гей, Джон Л. Джонс, Джек Н. Мернер, Кристофер Дж. Шоу
  3. ^ Джон Бэкус. "История FORTRAN I, II и III" (PDF) . Softwarepreservation.org. Архивировано (PDF) из оригинала 26 июля 2007 г. . Получено 19 ноября 2014 г. .
  4. ^ Уилсон, Лесли Б. (2001). Сравнительные языки программирования, третье издание . Addison-Wesley. стр. 16. ISBN 0-201-71012-9. Руководство по Fortran I было выпущено в 1956 году, но только в 1958 году успешные компиляторы начали правильно запускать программы.
  5. Лох, Юджин (18 июня 2010 г.). «Идеальный язык программирования HPC». ACM Queue . 8 (6): 30–38. doi :10.1145/1810226.1820518.
  6. ^ "HPL – Портативная реализация высокопроизводительного теста Linpack для компьютеров с распределенной памятью" . Получено 21 февраля 2015 г.
  7. ^ "Q13. Каковы бенчмарки?". Обзор – CPU 2017 . SPEC . Получено 13 ноября 2019 г. .
  8. ^ Уилсон, Лесли Б. (2001). Сравнительные языки программирования, третье издание . Addison-Wesley. стр. 18. ISBN 0-201-71012-9. Другая проблема заключалась в том, что для Fortran не существовало стандарта, и поэтому немного отличающиеся версии ... скорее всего, давали сбой при использовании с другим компилятором.
  9. ^ TIOBE Software BV (май 2024 г.). "TIOBE Index". TIOBE.com . TIOBE . Получено 6 мая 2024 г. .
  10. ^ abcde Backus, John Warner ; Beeber, RJ; Best, Sheldon F.; Goldberg, Richard ; Herrick, Harlan L.; Hughes, RA; Mitchell, LB; Nelson, Robert A.; Nutt, Roy ; Sayre, David ; Sheridan, Peter B.; Stern, Harold; Ziller, Irving (15 октября 1956 г.). Sayre, David (ред.). Система автоматического кодирования FORTRAN для IBM 704 EDPM: Справочное руководство программиста (PDF) . Нью-Йорк, США: Отдел прикладных наук и исследовательский отдел программирования, International Business Machines Corporation . стр. 2, 19–20. Архивировано (PDF) из оригинала 4 июля 2022 г. . Получено 4 июля 2022 г. .(2+51+1 страницы)
  11. ^ abcdef Бэкус, Джон (октябрь–декабрь 1998 г.). «История Fortran I, II и III» (PDF) . IEEE Annals of the History of Computing . 20 (4): 68–78. doi :10.1109/85.728232. Архивировано (PDF) из оригинала 3 марта 2016 г. . Получено 17 июня 2020 г. .[1][2]
  12. ^ "FORTRAN: The Pioneering Programming Language". IBM . 7 марта 2012 г. Получено 19 июля 2017 г.
  13. ^ "FORTRAN". Encyclopedia Britannica . 14 июня 2021 г. Получено 19 июля 2021 г.
  14. ^ Чепмен, Стивен Дж. (2018). Fortran для ученых и инженеров (четвертое изд.). Нью-Йорк : McGraw-Hill Education . стр. 13. ISBN 978-0-07-338589-1.
  15. ^ «Набор символов Fortran», определенный стандартом FORTRAN 77, был минимальным набором символов, который должны были поддерживать компиляторы, соответствующие стандарту; на практике многие компиляторы FORTRAN 77 поддерживали полный набор символов ASCII .
  16. ^ ab JW Backus ; RJ Beeber; S. Best; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (февраль 1957 г.). Автоматическая система кодирования FORTRAN (PDF) . Western Joint Computer Conference. стр. 188–198. doi :10.1145/1455567.1455599.
  17. ^ Минделл, Дэвид (2008). Цифровой Аполлон . Кембридж, Массачусетс: MIT Press. п. 99. ИСБН 978-0-262-13497-2. JSTOR  j.ctt5hhn02. OCLC  228031739.
  18. ^ Падуя, Дэвид (январь–февраль 2000 г.). "Компилятор Fortran I" (PDF) . Вычислительная техника в науке и технике . 2 (1): 70–75. Bibcode :2000CSE.....2a..70P. doi :10.1109/5992.814661. Архивировано из оригинала (PDF) 17 июня 2020 г. Компилятор Fortran I был первым крупным проектом в области оптимизации кода. Он решал проблемы решающей важности, общее решение которых было важным направлением исследований в области технологии компиляторов в течение нескольких десятилетий. Многие классические методы анализа и оптимизации компиляторов могут проследить свое происхождение и вдохновение до компилятора Fortran I.
  19. Брайан Бергштейн (20 мая 2007 г.). «Создатель Fortran Джон Бэкус умер». MSNBC . Получено 29 октября 2018 г.
  20. ^ "FORTRAN – первый язык программирования для числовых вычислений". Блог SciHi . 15 октября 2019 г.
  21. ^ Хейнс, Л. Х. (1965). «Последовательная компиляция и компилятор FORTRAN 1401». IBM Systems Journal . 4 (1): 73–80. doi :10.1147/sj.41.0073.
  22. ^ Ли, Джон А. Н. (1967). Анатомия компилятора . Ван Ностранд Рейнхольд.
  23. ^ Fortran Specifications and Operating Procedures, IBM 1401 (PDF) . IBM. C24-1455-2. Архивировано (PDF) из оригинала 23 сентября 2017 г.
  24. ^ "Тема: GOTRAN ON THE IBM 1316 DISK STORAGE PACK (Serial No. K7402)". Архивировано из оригинала 21 февраля 2006 г. Получено 3 марта 2006 г.
  25. ^ Система автоматического кодирования FORTRAN для IBM 704 EDPM: предварительное руководство оператора (PDF) . Отдел исследований программирования, International Business Machines Corporation. 8 апреля 1957 г. стр. 6–37. Архивировано (PDF) из оригинала 26 февраля 2014 г.
  26. ^ Армстед, Бетти Джо (21 января 2015 г.). «Мои годы в НАСА» (PDF) . Денверский музей природы и науки . Архивировано из оригинала (PDF) 24 декабря 2019 г. . Получено 15 июня 2019 г. .
  27. ^ Справочное руководство, IBM 7090 Data Processing System (PDF) . 1961. A22-6528-3. Архивировано (PDF) из оригинала 1 декабря 2008 г.
  28. ^ Fortran II General Information Manual (PDF) . 1963. Архивировано (PDF) из оригинала 26 апреля 2005 г. Получено 19 ноября 2014 г.
  29. ^ Справочное руководство, FORTRAN II для системы обработки данных IBM 704 (PDF) . 1958. C28-6000-2. Архивировано (PDF) из оригинала 30 октября 2005 г.
  30. ^ "Ibibilio.org". Ibiblio.org . Получено 15 сентября 2014 г. .
  31. ^ Спецификации языка Fortran IV, спецификации программ и операционные процедуры, IBM 1401, 1440 и 1460 (PDF) . IBM. Апрель 1966 г. C24-3322-2. Архивировано (PDF) из оригинала 23 сентября 2017 г.
  32. ^ Мак-Кракен, Дэниел Д. (1965). "Предисловие" . Руководство по программированию на языке FORTRAN IV . Нью-Йорк: Wiley. стр. v. ISBN 978-0-471-58281-6.
  33. ^ "Список реализаций FORTRAN 1957 – 1967". Группа специалистов BCS Fortran . Анналы IEEE. 2017. Получено 17 октября 2017 г.
  34. ^ IBM System/360 Model 50 Functional Characteristics (PDF) . IBM. 1967. A22-6898-1. Архивировано (PDF) из оригинала 29 октября 2021 г. – через bitsavers.
  35. ^ ab "DECSYSTEM-10 FORTRAN IV (F40) Programmers Reference Manual" (PDF) . Github . Digital Equipment Corporation . Получено 15 апреля 2022 г. .
  36. ^ ab "FORTRAN IV". WorldCat.org . Получено 10 декабря 2023 г. .
  37. ^ MIL-STD 1753 - FORTRAN, Дополнение Министерства обороны к американскому национальному стандарту X3.9-1978. Типография правительства США . 9 ноября 1978 г. Получено 21 апреля 2024 г.
  38. ^ IEEE 1003.9-1992 – Стандарт IEEE для информационных технологий – Интерфейсы языка POSIX(R) FORTRAN 77 – Часть 1: Привязка к интерфейсу прикладных программ (API) системы. IEEE . Получено 24 ноября 2018 г. .
  39. ^ Приложение Б.1
  40. ^ "Fortran 95 Reference". Gnu.Org . Получено 10 мая 2014 г.
  41. ^ Лайонел, Стив (30 декабря 2013 г.). «Доктор Фортран в «Современном мире Фортрана»». Форумная дискуссионная группа Intel (ранее DEC) Fortran . Intel . Получено 11 апреля 2022 г.
  42. ^ "Fortran 2003– Последний рабочий черновик". Gnu.Org . Получено 10 мая 2014 г. .
  43. ^ "WG5 Completes Processing Fortran 2003 and the TR". nag.co.uk. 14 мая 2004 г. Архивировано из оригинала 5 августа 2004 г. Получено 3 апреля 2023 г.. Его также можно загрузить в виде PDF-файла по адресу "The New Features of Fortran 2003" (PDF) . Архивировано (PDF) из оригинала 15 января 2018 г. . Получено 3 апреля 2023 г. .
  44. ^ "N1836, Сводка голосования/Таблица ответов по ISO/IEC FDIS 1539-1, Информационные технологии – Языки программирования – Fortran – Часть 1: Базовый язык" (PDF) . Архивировано (PDF) из оригинала 15 января 2018 г.
  45. ^ "Fortran 2008 – Last Working Draft" (PDF) . Gnu.Org. Архивировано (PDF) из оригинала 12 мая 2014 г. . Получено 10 мая 2014 г. .
  46. ^ N1830, Информационные технологии – Языки программирования – Фортран – Часть 1: Базовый язык [3] [ мертвая ссылка ]
  47. ^ ISO/IEC TS 29113:2012 – Информационные технологии – Дальнейшее взаимодействие Fortran с C.
  48. ^ "Проект Технической спецификации (TS) 29113" (PDF) . wg5-fortran.org . Архивировано (PDF) из оригинала 15 января 2018 г.
  49. ^ "Доктор Фортран в "Восемнадцать — это новые Пятнашки"". Software.intel.com . Получено 20 ноября 2017 г. .
  50. ^ "Fortran 2018". ISO . Получено 30 ноября 2018 г. .
  51. ^ "Further Interoperability with C" (PDF) . ISO. Архивировано (PDF) из оригинала 1 декабря 2017 г. . Получено 20 ноября 2017 г. .
  52. ^ "Дополнительные параллельные возможности в Fortran". ISO . Получено 20 ноября 2017 г. .
  53. ^ "Новые возможности Fortran 2015". ISO . Получено 23 июня 2017 г. .
  54. ^ "Доктор Фортран в "One Door Closes"". Software.intel.com . Получено 21 сентября 2015 г. .
  55. ^ "Doctor Fortran Goes Dutch: Fortran 2015". Software.intel.com . Получено 19 ноября 2014 г. .
  56. ^ Fortran 2018 Interpretation Document (PDF) . 9 октября 2018 г.
  57. ^ "Fortran 2023". wg5-fortran.org . Получено 30 ноября 2023 г. .
  58. Кемени, Джон Г.; Курц, Томас Э. (11 октября 1968 г.). «Dartmouth Time-Sharing». Science . 162 (3850): 223–228. Bibcode :1968Sci...162..223K. doi :10.1126/science.162.3850.223. PMID  5675464.
  59. ^ Филлипс, Ли (8 мая 2014 г.). «Будущее научных вычислений: может ли какой-либо язык программирования превзойти гиганта 1950-х годов?». Ars Technica . Получено 8 мая 2014 г.
  60. ^ Pasachoff, Jay M. (апрель 1984). "Scientists: FORTRAN vs. Modula-2". BYTE (письмо). стр. 404. Получено 6 февраля 2015 г.
  61. ^ Гальперин, Борис (1993). "26". Моделирование больших вихрей сложных инженерных и геофизических потоков . Лондон: Cambridgey. стр. 573. ISBN 978-0-521-43009-8.
  62. ^ Брандт, Зигмунд (1970). Статистические и вычислительные методы в анализе данных . North-Holland Publishing Company. стр. Предисловие. ISBN 0-7204-2033-4.
  63. ^ Curcic, Милан (24 ноября 2020 г.). Современный Фортран: Создание эффективных параллельных приложений. Simon and Schuster. ISBN 978-1-61729-528-7.
  64. ^ Gaffney, PW; Wooten, JW (1 мая 1980 г.). Методы обеспечения стандартизации программного обеспечения FORTRAN (Отчет). Национальная лаборатория Оук-Ридж. OSTI  5361454. PFORT ... Библиотека ...
  65. ^ ab PA Fox (1977). "Port — A portable matrix subroutine library". Переносимая математическая библиотека подпрограмм . Lecture Notes in Computer Science. Vol. 57. pp. 165–177. doi :10.1007/3-540-08446-0_42. ISBN 978-3-540-08446-4. PORT ... написан на (PFORT) .. ANS Fortran
  66. ^ Whitten, Douglas E.; Demaine, Paul AD (1975). "Машинно- и конфигурационно-независимый Fortran: Portable Fortran {PFortran}". IEEE Transactions on Software Engineering . SE-1 (1). Институт инженеров по электротехнике и электронике (IEEE): 111–124. doi :10.1109/tse.1975.6312825. ISSN  0098-5589. S2CID  16485156.
  67. ^ "Проблемы переносимости". .. обсуждает .. переносимость .. Fortran
  68. ^ Healy, MJR (1968). "Towards FORTRAN VI". Advanced scientific Fortran by CDC . CDC. стр. 169–172. Архивировано из оригинала 5 июля 2009 г. Получено 10 апреля 2009 г.
  69. ^ Перлис, А. Дж.; Смит, Дж. В.; Ван Зоерен, HR Внутренний переводчик (ИТ) Компилятор для IBM 650 (PDF) . Вычислительный центр, Технологический институт Карнеги. Архивировано (PDF) из оригинала 2 октября 2012 г.
  70. ^ Мейсснер, Лорен (1 сентября 1975 г.). «О расширении структур управления Фортрана для облегчения структурного программирования». ACM SIGPLAN Notices . acm.org.
  71. ^ "F Programming Language Homepage". Fortran.com. Архивировано из оригинала 9 января 2015 г. Получено 19 ноября 2014 г.
  72. ^ "Fortran for .NET Language System". Архивировано из оригинала 18 октября 2014 г.
  73. ^ "FTN95: Fortran 95 для Windows". Silverfrost.com . Получено 19 ноября 2014 г. .
  74. ^ Распространение X3J3 после совещания, состоявшегося в Брукхейвенской национальной лаборатории в ноябре 1976 года.
  75. ^ "Уничтожение O". Computer Weekly . 3 марта 1977 г.
  76. ^ Правила типизации данных (Справочник языка FORTRAN 77) . Получено 29 сентября 2016 г.

Дальнейшее чтение

Языковые стандарты
Сопутствующие стандарты
Другие справочные материалы
Книги
Статьи

Внешние ссылки