Jump to content

Фортран

(Перенаправлено с FORTRAN II )

Фортран
Парадигма Мультипарадигмальность : структурированная , императивная ( процедурная , объектно-ориентированная ), универсальная , массивная.
Разработано Джон Бэкус
Разработчик Джон Бэкус и IBM
Впервые появился 1957 год ; 67 лет назад ( 1957 )
Стабильная версия
Фортран 2023 (ИСО/МЭК 1539:2023) / 17 ноября 2023 г .; 8 месяцев назад ( 17.11.2023 )
Дисциплина набора текста сильный , статичный , явный
Расширения имен файлов .f90, .f, .for
Веб-сайт только фортран .org
Основные реализации
Absoft , Cray , GFortran , G95 , IBM XL Fortran, Intel , Hitachi , Lahey/Fujitsu, Numerical Algorithms Group , Open Watcom , PathScale , PGI , Silverfrost , Oracle Solaris Studio и другие
Под влиянием
Спидкодирование
Под влиянием
АЛГОЛ 58 , БЕЙСИК , C , Часовня , [1] CMS-2 , DOPE , Fortress , MATLAB , PL/I , PACT I , MUMPS , IDL , Ratfor , SAKO [2]

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

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

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

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

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

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

В первом руководстве по FORTRAN он описывается как система перевода формул , а название напечатано маленькими заглавными буквами . Фортран . [10] : стр.2 [11] Другие источники предполагают, что это название означает « Переводчик формул» . [12] или Перевод формул . [13]

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

В официальных языковых стандартах Фортрана этот язык называется «Фортран» с начальными ограничениями, начиная с Фортрана 90. [ нужна ссылка ]

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

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

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

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

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

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

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

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

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

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

Первоначальная версия FORTRAN для IBM 704. [10] содержало 32 заявления , в том числе:

  • DIMENSION и EQUIVALENCE заявления
  • Операторы присвоения
  • Трехсторонняя арифметика IF оператор, передающий управление одному из трех мест программы в зависимости от того, был ли результат арифметического выражения отрицательным, нулевым или положительным.
  • Операторы управления для проверки исключений ( IF ACCUMULATOR OVERFLOW, IF QUOTIENT OVERFLOW, и IF DIVIDE CHECK); и операторы управления для управления сенсорными переключателями и сенсорными лампочками ( IF (SENSE SWITCH), IF (SENSE LIGHT), и SENSE LIGHT)
  • GO TO, вычислено GO TO, ASSIGN, и назначен GO TO
  • DO петли
  • Форматированный ввод-вывод: FORMAT, READ, READ INPUT TAPE, WRITE OUTPUT TAPE, PRINT, и PUNCH
  • Неформатированный ввод-вывод: READ TAPE, READ DRUM, WRITE TAPE, и WRITE DRUM
  • Другой ввод-вывод: END FILE, REWIND, и BACKSPACE
  • PAUSE, STOP, и CONTINUE
  • FREQUENCY оператор (для предоставления подсказок по оптимизации компилятору).

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

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

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

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

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

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

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

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

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

  • От 1 до 5 были полем метки: здесь последовательность цифр использовалась в качестве метки для использования в операторах DO или управления, таких как GO TO и IF, или для идентификации оператора FORMAT, на который ссылаются операторы WRITE или READ. Ведущие нули игнорируются, а 0 не является допустимым номером метки.
  • 6 было полем продолжения: символ, отличный от пробела или нуля, приводил к тому, что карта воспринималась как продолжение оператора предыдущей карты. Карты продолжения обычно имели номера 1, 2 и т. д. , и поэтому начальная карта могла иметь ноль в столбце продолжения, что не является продолжением предыдущей карты.
  • Полем оператора служили поля с 7 по 72.
  • IBM 704 От 73 до 80 были проигнорированы ( устройство чтения карт использовало только 72 столбца). [27]

Таким образом, столбцы с 73 по 80 могут использоваться для идентификационной информации, такой как ввод порядкового номера или текста, который можно использовать для изменения порядка карточек, если стопка карточек упала; хотя на практике это предназначалось для стабильных, производственных программ. IBM 519 можно было использовать для копирования колоды программ и добавления порядковых номеров. Некоторые ранние компиляторы, например IBM 650, имели дополнительные ограничения из-за ограничений устройств чтения карт. [28] Нажатия клавиш можно было запрограммировать на переход к столбцу 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.), позволяющий сохранять пробелы в строке символов. Ошибки в подсчетах были проблемой.

Эволюция

[ редактировать ]
Хронология языка Фортран
Год Неофициальное имя Стандарт АНСИ Стандарт ИСО/МЭК
1957 ФОРТРАН
1958 ФОРТРАН II
1958 ФОРТРАН III
1961 ФОРТРАН IV
1966 ФОРТРАН 66 X3.9-1966
1978 ФОРТРАН 77 X3.9-1978
1991 Фортран 90 Х3.198-1992 1539:1991
1997 Фортран 95 1539-1:1997
2004 Фортран 2003 1539-1:2004
2010 Фортран 2008 1539-1:2010
2018 Фортран 2018 1539-1:2018
2023 Фортран 2023 1539-1:2023

ФОРТРАН II

[ редактировать ]

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

  • SUBROUTINE, FUNCTION, и END
  • CALL и RETURN
  • COMMON

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

Ранние компиляторы FORTRAN не поддерживали рекурсию в подпрограммах. Ранние компьютерные архитектуры не поддерживали концепцию стека, а когда они напрямую поддерживали вызовы подпрограмм, место возврата часто сохранялось в одном фиксированном месте, рядом с кодом подпрограммы (например, IBM 1130 ) или в конкретном машинном регистре ( IBM 360 и последующие) . ), что допускает рекурсию только в том случае, если стек поддерживается программным обеспечением и адрес возврата сохраняется в стеке до выполнения вызова и восстанавливается после возврата вызова. Хотя это не указано в FORTRAN 77, многие компиляторы F77 поддерживали рекурсию в качестве опции, а мэйнфреймы Burroughs , разработанные со встроенной рекурсией, делали это по умолчанию. Он стал стандартом в Фортране 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 AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - TAPE READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
      READ INPUT TAPE 5, 501, IA, IB, IC
  501 FORMAT (3I5)
C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
      IF (IA) 777, 777, 701
  701 IF (IB) 777, 777, 702
  702 IF (IC) 777, 777, 703
  703 IF (IA+IB-IC) 777, 777, 704
  704 IF (IA+IC-IB) 777, 777, 705
  705 IF (IB+IC-IA) 777, 777, 799
  777 STOP 1
C USING HERON'S FORMULA WE CALCULATE THE
C AREA OF THE TRIANGLE
  799 S = FLOATF (IA + IB + IC) / 2.0
      AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
     +     (S - FLOATF(IC)))
      WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
  601 FORMAT (4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
     +        13H SQUARE UNITS)
      STOP
      END

ФОРТРАН 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

  • 1966: FORTRAN IV F для DOS/360 (64 КБ)
  • 1966: FORTRAN IV G для OS/360 (128 КБ)
  • 1968: FORTRAN IV H для OS/360 (256 КБ)

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, но лишенный его машинно-зависимых функций). ФОРТРАН, определенный первым стандартом, официально обозначенным X3.9-1966, стал известен как ФОРТРАН 66 (хотя многие продолжали называть его ФОРТРАН IV, язык, на котором в значительной степени был основан стандарт). FORTRAN 66 фактически стал первой версией FORTRAN, соответствующей отраслевому стандарту. ФОРТРАН 66 включал:

  • Основная программа, SUBROUTINE, FUNCTION, и BLOCK DATA программные единицы
  • INTEGER, REAL, DOUBLE PRECISION, COMPLEX, и LOGICAL типы данных
  • COMMON, DIMENSION, и EQUIVALENCE заявления
  • DATA оператор для указания начальных значений
  • Внутренний и EXTERNAL (например, библиотечные) функции
  • Заявление о назначении
  • GO TO, вычислено GO TO, назначенный GO TO, и ASSIGN заявления
  • Логический IF и арифметика (трехсторонняя) IF заявления
  • DO оператор цикла
  • READ, WRITE, BACKSPACE, REWIND, и ENDFILE операторы последовательного ввода-вывода
  • FORMAT заявление и назначенный формат
  • CALL, RETURN, PAUSE, и STOP заявления
  • Константы Холлерита в DATA и FORMAT операторов и в качестве аргументов процедур
  • Идентификаторы длиной до шести символов.
  • Строки комментариев
  • END линия

ФОРТРАН 77

[ редактировать ]
Программа FORTRAN-77 с выводом компилятора, написанная на CDC 175 в RWTH Ахенском университете , Германия, в 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, добавил ряд важных функций для решения многих проблем. недостатки ФОРТРАН 66:

  • Блокировать IF и END IF заявления с необязательным ELSE IF и ELSE предложений, чтобы обеспечить улучшенную языковую поддержку структурного программирования.
  • DO расширения цикла, включая выражения параметров, отрицательные приращения и нулевой счетчик отключений
  • OPEN, CLOSE, и INQUIRE операторы для улучшения возможностей ввода-вывода
  • Файловый ввод-вывод с прямым доступом
  • IMPLICIT оператор, чтобы переопределить неявные соглашения о том, что необъявленные переменные являются INTEGER если их имя начинается с I, J, K, L, M, или NREAL в противном случае)
  • CHARACTER тип данных, заменяющий строки Холлерита значительно расширенными возможностями для ввода и вывода символов, а также обработки символьных данных.
  • PARAMETER оператор для указания констант
  • SAVE оператор для постоянных локальных переменных
  • Общие имена для встроенных функций (например, SQRT также принимает аргументы других типов, например COMPLEX или REAL*16).
  • Набор встроенных функций ( LGE, LGT, LLE, LLT) для лексического сравнения строк на основе ASCII последовательности сопоставления . (Эти функции ASCII были запрошены Министерством обороны США в ходе голосования по условному одобрению. [ нужна ссылка ] )
  • Максимум семь измерений в массивах вместо трёх. Также были обобщены допустимые индексные выражения.

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

  • Константы Холлерита и данные Холлерита , такие как GREET = 12HHELLO THERE!
  • Чтение дескриптора редактирования H (поле Холлерита) в спецификации FORMAT.
  • Переиндексация границ массива индексами
          DIMENSION A(10,5)
          Y = A(11,1)
    
  • Передача управления из диапазона цикла DO и обратно в него (также известный как «расширенный диапазон»).

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

[ редактировать ]

Разработка пересмотренного стандарта, пришедшего на смену FORTRAN 77, неоднократно откладывалась, поскольку процесс стандартизации с трудом успевал за быстрыми изменениями в практике вычислений и программирования. Между тем, в течение почти пятнадцати лет 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 году. В этой основной версии, написанной с ФОРТРАНа на Фортран, было добавлено множество новых функций, отражающих значительные изменения в практике программирования, произошедшие со времени стандарта 1978 года:

  • Ввод исходного кода в произвольной форме устранил необходимость пропускать первые шесть позиций символов перед вводом операторов.
  • Ключевые слова Фортрана в нижнем регистре
  • Идентификаторы длиной до 31 символа (в предыдущем стандарте было всего шесть символов).
  • Встроенные комментарии
  • Возможность работать с массивами (или частями массива) в целом, что значительно упрощает математические и инженерные вычисления.
    • Операторы присваивания целых, частичных и маскированных массивов и выражения массивов, такие как X(1:N)=R(1:N)*COS(A(1:N))
    • WHERE оператор выборочного присвоения массива
    • константы и выражения со значениями массива,
    • определяемые пользователем функции, возвращающие значения массива, и конструкторы массивов.
  • RECURSIVE процедуры
  • Модули для группировки связанных процедур и данных вместе и предоставления их другим программным модулям, включая возможность ограничить доступ только к определенным частям модуля.
  • Значительно улучшенный механизм передачи аргументов, позволяющий интерфейсы во время компиляции. проверять
  • Пользовательские интерфейсы для общих процедур
  • Перегрузка оператора
  • Производные (структурированные) типы данных
  • Новый синтаксис объявления типа данных для указания типа данных и других атрибутов переменных.
  • Динамическое распределение памяти с помощью ALLOCATABLE атрибут и ALLOCATE и DEALLOCATE заявления
  • POINTER атрибут, назначение указателя и NULLIFY заявление, облегчающее создание и манипулирование динамическими структурами данных
  • Структурированные циклические конструкции с END DO оператор завершения цикла и EXIT и CYCLE заявления о прекращении нормального DO итерации цикла упорядоченным образом
  • SELECT CASE, CASE, . . . CASE DEFAULT, END SELECT конструкция для многостороннего выбора
  • Портативная спецификация числовой точности под контролем пользователя
  • Новые и усовершенствованные внутренние процедуры.

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

[ редактировать ]

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

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

Устаревание и удаления
Устаревшая функция Текущий статус
Арифметический оператор IF Устарело в F90, удалено в F2018.
Нецелочисленные параметры DO или переменные управления Устарело в F90, удалено в F95.
Завершение общего цикла DO или завершение с помощью оператора, отличного от END DO или CONTINUE.  Устарело в F90, удалено в F2018.
Переход к END IF снаружи блока Устарело в F90, удалено в F95.
Оператор ПАУЗЫ Устарело в F90, удалено в F95.
Оператор ASSIGN и назначенный оператор GO TO Устарело в F90, удалено в F95.
Присвоенные номера операторов и спецификаторы FORMAT Устарело в F90, удалено в F95.
H дескриптор редактирования Устарело в F90, удалено в F95.
Управление вертикальным форматом Удален в F2003.
Альтернативный возврат Устаревший в F90
Вычисленный оператор GO TO Устаревший в F90
Операторные функции Устаревший в F90
Операторы DATA среди исполняемых операторов Устаревший в F90
Символьные функции предполагаемой длины Устаревший в F90
Исходный код фиксированной формы Устаревший в F90
CHARACTER* форма объявления CHARACTER Устаревший в F90
ВХОДНЫЕ заявления Устарело в F2008
Форма метки оператора DO Устарело в F2018
Операторы COMMON и EQUIVALENCE, а также программный модуль BLOCK DATA. Устарело в F2018
Конкретные имена для внутренней функции Устарело в F2018
Конструкция и оператор FORALL Устарело в F2018

"Привет, мир!" пример

[ редактировать ]
program helloworld
     print *, "Hello, World!"
end program helloworld

Фортран 95

[ редактировать ]

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

  • FORALL и вложенный WHERE конструкции, помогающие векторизации
  • Пользовательский PURE и ELEMENTAL процедуры
  • Инициализация по умолчанию компонентов производного типа, включая инициализацию указателя.
  • Расширена возможность использования выражений инициализации для объектов данных.
  • Инициализация указателей на NULL()
  • Четко определил, что ALLOCATABLE массивы автоматически освобождаются, когда они выходят за пределы области видимости.

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

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

  • DO утверждения с использованием REAL и DOUBLE PRECISION индексные переменные
  • Разветвление на END IF оператор извне своего блока
  • PAUSE заявление
  • ASSIGN и назначен GO TO оператор и назначенные спецификаторы формата
  • H Дескриптор редактирования Холлерита.

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

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

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

[ редактировать ]

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

  • Строки символов различной длины (ISO/IEC 1539-2: 2000)
  • Условная компиляция (ISO/IEC 1539-3: 1998)

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

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

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

[ редактировать ]

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

Фортран 2003

[ редактировать ]

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

В этой статье основные улучшения этой версии включают в себя:

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

Фортран 2008

[ редактировать ]

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

  • Субмодули – дополнительные возможности структурирования модулей; заменяет ISO/IEC TR 19767:2005.
  • Coarray Fortran — модель параллельного выполнения
  • Конструкция DO CONCURRENT – для итераций цикла без взаимозависимостей.
  • Атрибут CONTIGUOUS – для указания ограничений по размещению хранилища.
  • Конструкция BLOCK – может содержать объявления объектов с областью действия конструкции.
  • Рекурсивные выделяемые компоненты – как альтернатива рекурсивным указателям в производных типах.

Окончательный проект международного стандарта (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 TS 29113:2012 Дальнейшее взаимодействие с C [51]
  • ISO/IEC TS 18508:2015 Дополнительные параллельные функции на Фортране [52]

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

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

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

Фортран 2023

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

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

[ редактировать ]

До тех пор, пока не был разработан стандарт Fortran 66, каждый компилятор поддерживал свой вариант 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 , работающего в НАСА Эймса Исследовательском центре . IBM Research Labs также разработала расширенный язык на основе FORTRAN под названием VECTRAN для обработки векторов и матриц.

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

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

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

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

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

  • Операторы арифметического присваивания, например, a = b
  • GO to n
  • GO TO (n1, n2, ..., nm), i
  • IF (a) n1, n2, n3
  • PAUSE
  • STOP
  • DO n i = m1, m2
  • CONTINUE
  • END
  • READ n, list
  • PUNCH n, list
  • DIMENSION V, V, V, ...
  • EQUIVALENCE (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. Эти препроцессоры обычно поддерживают структурированное программирование , имена переменных длиной более шести символов, дополнительные типы данных, условную компиляцию и даже возможности макросов . Популярные препроцессоры включали EFL , FLECS , iftran , MORTRAN , SFtran , S-Fortran , Ratfor и Ratfiv . EFL, Ratfor и Ratfiv, например, реализовали C -подобные языки, выдавая предварительно обработанный код на стандартном FORTRAN 66. Препроцессор PFORT часто использовался для проверки соответствия кода переносимому подмножеству языка. Несмотря на достижения в языке Фортран, препроцессоры продолжают использоваться для условной компиляции и замены макросов.

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

program; s=0 i=1,n; s=s+1; stop i; s='s'  Stop

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

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

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

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

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

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

Лэхи и Fujitsu объединились, чтобы создать язык Fortran для Microsoft .NET Framework . [71] Silverfrost FTN95 также способен создавать код .NET. [72]

Примеры кода

[ редактировать ]

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

program average

    ! Read in some numbers and take the average
    ! As written, if there are no data points, an average of zero is returned
    ! While this may not be desired behavior, it keeps this example simple

    implicit none

    real, allocatable :: points(:)
    integer           :: number_of_points
    real              :: average_points, positive_average, negative_average
    average_points   = 0.
    positive_average = 0.
    negative_average = 0.
    write (*,*) "Input number of points to average:"
    read  (*,*) number_of_points

    allocate (points(number_of_points))

    write (*,*) "Enter the points to average:"
    read  (*,*) points

    ! Take the average by summing points and dividing by number_of_points
    if (number_of_points > 0) average_points = sum(points) / number_of_points

    ! Now form average over positive and negative points only
    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.)

    ! Print result to terminal stdout unit 6
    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
    deallocate (points) ! free memory

end program average

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

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

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

Имена переменных, начинающиеся с букв I – N, имеют по умолчанию целочисленный тип, а переменные, начинающиеся с любых других букв, по умолчанию имеют значение вещественное, хотя программисты могут переопределить значения по умолчанию с помощью явного объявления. [75] Это привело к шутке: «В ФОРТРАНЕ БОГ РЕАЛЬНЫЙ (если не указано ЦЕЛОЕ ЧИСЛО)».

См. также

[ редактировать ]
  1. ^ «Спецификация часовни (Благодарность)» (PDF) . Cray Inc., 1 октября 2015 г. Архивировано (PDF) из оригинала 5 февраля 2016 г. . Проверено 14 января 2016 г.
  2. ^ Отчет о визите для обсуждения общих языков программирования в Чехословакию и Польшу, 1963, Джон А. Госден (редактор), Роджер Э. Гей, Джон Л. Джонс, Джек Н. Мернер, Кристофер Дж. Шоу
  3. ^ Джон Бэкус. «История ФОРТРАНА I, II и III» (PDF) . Softwarepreservation.org. Архивировано (PDF) из оригинала 26 июля 2007 г. Проверено 19 ноября 2014 г.
  4. ^ Уилсон, Лесли Б. (2001). Языки сравнительного программирования, третье издание . Аддисон-Уэсли. п. 16. ISBN  0-201-71012-9 . Руководство по Фортрану I было выпущено в 1956 году, но только в 1958 году успешные компиляторы начали корректно запускать программы.
  5. ^ Ло, Евгений (18 июня 2010 г.). «Идеальный язык программирования для HPC» . Очередь АКМ . 8 (6): 30–38. дои : 10.1145/1810226.1820518 .
  6. ^ «HPL — портативная реализация высокопроизводительного теста Linpack для компьютеров с распределенной памятью» . Проверено 21 февраля 2015 г.
  7. ^ «Вопрос 13. Каковы ориентиры?» . Обзор — ЦП 2017 года . СПЕЦ . Проверено 13 ноября 2019 г.
  8. ^ Уилсон, Лесли Б. (2001). Языки сравнительного программирования, третье издание . Аддисон-Уэсли. п. 18. ISBN  0-201-71012-9 . Другая проблема заключалась в том, что для Фортрана не было стандарта, и поэтому несколько разные версии... скорее всего, потерпят неудачу при использовании с другим компилятором.
  9. ^ TIOBE Software BV (май 2024 г.). «Индекс ТИОБЕ» . TIOBE.com . ТИОБЕ . Проверено 6 мая 2024 г.
  10. ^ Перейти обратно: а б с д и Бэкус, Джон Уорнер ; Бибер, Р.Дж.; Бест, Шелдон Ф.; Гольдберг, Ричард ; Херрик, Харлан Л.; Хьюз, РА; Митчелл, LB; Нельсон, Роберт А.; Натт, Рой ; Сэйр, Дэвид ; Шеридан, Питер Б.; Стерн, Гарольд; Циллер, Ирвинг (15 октября 1956 г.). Сэйр, Дэвид (ред.). Система автоматического кодирования FORTRAN для IBM 704 EDPM: Справочное руководство программиста (PDF) . Нью-Йорк, США: Отдел прикладных наук и отдел исследований в области программирования, International Business Machines Corporation . стр. 2, 19–20. Архивировано (PDF) из оригинала 4 июля 2022 г. Проверено 4 июля 2022 г. (2+51+1 стр.)
  11. ^ Перейти обратно: а б с д и ж Бэкус, Джон (октябрь – декабрь 1998 г.). «История Фортрана I, II и III» (PDF) . IEEE Анналы истории вычислений . 20 (4): 68–78. дои : 10.1109/85.728232 . Архивировано (PDF) из оригинала 3 марта 2016 г. Проверено 17 июня 2020 г. [1] [2]
  12. ^ «ФОРТРАН: новаторский язык программирования» . ИБМ . 7 марта 2012 года . Проверено 19 июля 2017 г.
  13. ^ «ФОРТРАН» . Британская энциклопедия . 14 июня 2021 г. . Проверено 19 июля 2021 г.
  14. ^ Чепмен, Стивен Дж. (2018). Фортран для ученых и инженеров (Четвертое изд.). Нью-Йорк : Образование Макгроу-Хилл . п. 13. ISBN  978-0-07-338589-1 .
  15. ^ «Набор символов Фортрана», определенный стандартом FORTRAN 77, был минимальным набором символов, который должны были поддерживать компиляторы, соответствующие стандарту; на практике многие компиляторы FORTRAN 77 поддерживали полный набор символов ASCII .
  16. ^ Перейти обратно: а б Дж. В. Бэкус ; Р. Дж. Бибер; С. Бест; Р. Гольдберг; Л. М. Хаибт ; Х. Л. Херрик; Р. А. Нельсон; Д. Сэйр ; П. Б. Шеридан; Х. Стерн; Л. Циллер; Р. А. Хьюз; Р. Натт (февраль 1957 г.). Система автоматического кодирования FORTRAN (PDF) . Западная объединенная компьютерная конференция. стр. 188–198. дои : 10.1145/1455567.1455599 .
  17. ^ Минделл, Дэвид (2008). Цифровой Аполлон . Кембридж, Массачусетс: MIT Press. п. 99. ИСБН  978-0-262-13497-2 . JSTOR   j.ctt5hhn02 . OCLC   228031739 .
  18. ^ Падуя, Дэвид (январь – февраль 2000 г.). «Компилятор Фортрана I» (PDF) . Вычисления в науке и технике . 2 (1): 70–75. Бибкод : 2000CSE.....2a..70P . дои : 10.1109/5992.814661 . Архивировано из оригинала (PDF) 17 июня 2020 года. Компилятор Fortran I был первым крупным проектом по оптимизации кода. Он решал проблемы решающей важности, общее решение которых было важным направлением исследований в области технологии компиляторов на протяжении нескольких десятилетий. Многие классические методы анализа и оптимизации компилятора берут свое начало и вдохновение от компилятора Fortran I.
  19. ^ Брайан Бергштейн (20 мая 2007 г.). «Умер создатель Фортрана Джон Бэкус» . MSNBC . Проверено 29 октября 2018 г.
  20. ^ «ФОРТРАН – первый язык программирования для числовых вычислений» . Блог SciHi . 15 октября 2019 г.
  21. ^ Хейнс, Л.Х. (1965). «Последовательная компиляция и компилятор FORTRAN 1401». IBM Systems Journal . 4 (1): 73–80. дои : 10.1147/sj.41.0073 .
  22. ^ Ли, Джон А.Н. (1967). Анатомия компилятора . Ван Ностранд Рейнхольд.
  23. ^ Спецификации и рабочие процедуры Фортрана, IBM 1401 (PDF) . ИБМ. C24-1455-2. Архивировано (PDF) из оригинала 23 сентября 2017 г.
  24. ^ «Тема: GOTRAN НА IBM 1316 DISK STORAGE PACK (серийный номер K7402)» . Архивировано из оригинала 21 февраля 2006 года . Проверено 3 марта 2006 г.
  25. ^ Система автоматического кодирования FORTRAN для IBM 704 EDPM: предварительное руководство оператора (PDF) . Отдел исследований в области программирования, Международная корпорация Business Machines. 8 апреля 1957 г. стр. 6–37. Архивировано (PDF) из оригинала 26 февраля 2014 г.
  26. ^ Армстед, Бетти Джо (21 января 2015 г.). «Мои годы в НАСА» (PDF) . Денверский музей природы и науки . Архивировано из оригинала (PDF) 24 декабря 2019 года . Проверено 15 июня 2019 г.
  27. ^ Справочное руководство, Система обработки данных IBM 7090 (PDF) . 1961. А22-6528-3. Архивировано (PDF) из оригинала 1 декабря 2008 г.
  28. ^ Общее информационное руководство по Фортрану II (PDF) . 1963. Архивировано (PDF) из оригинала 26 апреля 2005 года . Проверено 19 ноября 2014 г.
  29. ^ Справочное руководство FORTRAN II для системы обработки данных IBM 704 (PDF) . 1958. С28-6000-2. Архивировано (PDF) из оригинала 30 октября 2005 г.
  30. ^ «Библия.орг » Библиотека.орг . Получено 15 . сентября
  31. ^ Спецификации языка Fortran IV, спецификации программ и рабочие процедуры, IBM 1401, 1440 и 1460 (PDF) . ИБМ. Апрель 1966 г. C24-3322-2. Архивировано (PDF) из оригинала 23 сентября 2017 г.
  32. ^ Маккракен, Дэниел Д. (1965). «Предисловие» . Руководство по программированию на FORTRAN IV . Нью-Йорк: Уайли. п. ISBN против  978-0-471-58281-6 .
  33. ^ «Список реализаций FORTRAN 1957–1967» . Группа специалистов BCS по Фортрану . Анналы IEEE. 2017 . Проверено 17 октября 2017 г.
  34. ^ Функциональные характеристики IBM System/360 Model 50 (PDF) . ИБМ. 1967. А22-6898-1. Архивировано (PDF) из оригинала 29 октября 2021 г. - через битсейверы.
  35. ^ Перейти обратно: а б «Справочное руководство для программиста DECSYSTEM-10 FORTRAN IV (F40)» (PDF) . Гитхаб . Корпорация цифрового оборудования . Проверено 15 апреля 2022 г.
  36. ^ Перейти обратно: а б «ФОРТРАН IV» . WorldCat.org . Проверено 10 декабря 2023 г.
  37. ^ MIL-STD 1753 — ФОРТРАН, дополнение Министерства обороны США к американскому национальному стандарту X3.9-1978 . Типография правительства США . 9 ноября 1978 года . Проверено 21 апреля 2024 г.
  38. ^ IEEE 1003.9-1992 – Стандарт IEEE для информационных технологий – POSIX(R) FORTRAN 77 Языковые интерфейсы – Часть 1: Привязка для системного прикладного программного интерфейса (API) . ИИЭЭ . Проверено 24 ноября 2018 г.
  39. ^ Приложение Б.1.
  40. ^ «Справочник по Фортрану 95» . Gnu.Орг . Проверено 10 мая 2014 г.
  41. ^ Лайонел, Стив (30 декабря 2013 г.). «Доктор Фортран в «Это современный мир Фортрана» » . Дискуссионная группа форума Intel (была DEC) на Фортране . Интел . Проверено 11 апреля 2022 г.
  42. ^ «Фортран 2003 – Последний рабочий проект» . Gnu.Орг . Проверено 10 мая 2014 г.
  43. ^ «WG5 завершает обработку Fortran 2003 и TR» . nag.co.uk. ​14 мая 2004 года. Архивировано из оригинала 5 августа 2004 года . Проверено 3 апреля 2023 г. . Его также можно скачать в формате PDF по адресу «Новые возможности Fortran 2003» (PDF) . Архивировано (PDF) из оригинала 15 января 2018 г. Проверено 3 апреля 2023 г.
  44. ^ «N1836, Сводка голосования/таблица ответов по ISO/IEC FDIS 1539-1, Информационные технологии. Языки программирования. Фортран. Часть 1. Базовый язык» (PDF) . Архивировано (PDF) из оригинала 15 января 2018 г.
  45. ^ «Фортран 2008 — последний рабочий проект» (PDF) . Gnu.Орг. Архивировано (PDF) из оригинала 12 мая 2014 г. Проверено 10 мая 2014 г.
  46. ^ N1830, Информационные технологии. Языки программирования. Фортран. Часть 1. Базовый язык [3] [ мертвая ссылка ]
  47. ^ ISO/IEC TS 29113:2012 – Информационные технологии – Дальнейшее взаимодействие Фортрана с C.
  48. ^ «Проект Технической спецификации (ТУ) 29113» (PDF) . wg5-fortran.org . Архивировано (PDF) из оригинала 15 января 2018 г.
  49. ^ «Доктор Фортран в «Восемнадцать — новые пятнадцать» » . Software.intel.com . Проверено 20 ноября 2017 г.
  50. ^ «Фортран 2018» . ИСО . Проверено 30 ноября 2018 г.
  51. ^ «Дальнейшая совместимость с C» (PDF) . ИСО. Архивировано (PDF) из оригинала 1 декабря 2017 г. Проверено 20 ноября 2017 г.
  52. ^ «Дополнительные параллельные возможности в Фортране» . ИСО . Проверено 20 ноября 2017 г.
  53. ^ «Новые возможности Фортрана 2015» . ИСО . Проверено 23 июня 2017 г.
  54. ^ «Доктор Фортран в «Одна дверь закрывается» » . Software.intel.com . Проверено 21 сентября 2015 г.
  55. ^ «Доктор Фортран переходит на голландский язык: Фортран 2015» . Software.intel.com . Проверено 19 ноября 2014 г.
  56. ^ Документ интерпретации Fortran 2018 (PDF) . 9 октября 2018 г.
  57. ^ «Фортран 2023» . wg5-fortran.org . Проверено 30 ноября 2023 г.
  58. ^ Кемени, Джон Г.; Курц, Томас Э. (11 октября 1968 г.). «Дартмутское разделение времени» . Наука . 162 (3850): 223–228. Бибкод : 1968Sci...162..223K . дои : 10.1126/science.162.3850.223 . ПМИД   5675464 .
  59. ^ Филлипс, Ли (8 мая 2014 г.). «Будущее научных вычислений: может ли какой-либо язык программирования превзойти бегемота 1950-х годов?» . Арс Техника . Проверено 8 мая 2014 г.
  60. ^ Пасачофф, Джей М. (апрель 1984 г.). «Ученые: ФОРТРАН против Модулы-2» . БАЙТ (буква). п. 404 . Проверено 6 февраля 2015 г.
  61. ^ Гальперин, Борис (1993). «26». Крупно-вихревое моделирование сложных инженерно-геофизических потоков . Лондон: Кембриджи. п. 573. ИСБН  978-0-521-43009-8 .
  62. ^ Брандт, Зигмунд (1970). Статистические и вычислительные методы анализа данных . Издательство Северной Голландии. с. Предисловие. ISBN  0-7204-2033-4 .
  63. ^ Курчич, Милан (24 ноября 2020 г.). Современный Фортран: создание эффективных параллельных приложений . Саймон и Шустер. ISBN  978-1-61729-528-7 .
  64. ^ Гаффни, П.В.; Вутен, Дж. В. (1 мая 1980 г.). Методы обеспечения стандартизации программного обеспечения FORTRAN (Отчет). Окриджская национальная лаборатория. ОСТИ   5361454 . ПФОРТ...Библиотека...
  65. ^ Перейти обратно: а б П. А. Фокс (1977). «Порт — портативная библиотека математических подпрограмм». Портативная библиотека математических подпрограмм . Конспекты лекций по информатике. Том. 57. стр. 165–177. дои : 10.1007/3-540-08446-0_42 . ISBN  978-3-540-08446-4 . ПОРТ... пишется на (PFORT)..ANS Фортран
  66. ^ Уиттен, Дуглас Э.; Демейн, Поль А.Д. (1975). «Фортран, независимый от машины и конфигурации: Портативный Фортран {PFortran}». Транзакции IEEE по разработке программного обеспечения . СЭ-1 (1). Институт инженеров по электротехнике и электронике (IEEE): 111–124. дои : 10.1109/tse.1975.6312825 . ISSN   0098-5589 . S2CID   16485156 .
  67. ^ «Проблемы переносимости» . .. обсуждает .. переносимость .. Фортрана
  68. ^ Хили, MJR (1968). «На пути к ФОРТРАНУ VI» . Передовой научный Фортран от CDC . CDC. стр. 169–172. Архивировано из оригинала 5 июля 2009 года . Проверено 10 апреля 2009 г.
  69. ^ Перлис, Эй Джей; Смит, Дж.В.; Ван Зоерен, внутренний переводчик отдела кадров (ИТ). Компилятор для IBM 650 (PDF) . Вычислительный центр Технологического института Карнеги. Архивировано (PDF) из оригинала 2 октября 2012 г.
  70. ^ «Домашняя страница языка программирования F» . Фортран.com. Архивировано из оригинала 9 января 2015 года . Проверено 19 ноября 2014 г.
  71. ^ «Фортран для языковой системы .NET» . Архивировано из оригинала 18 октября 2014 года.
  72. ^ «FTN95: Фортран 95 для Windows» . Silverfrost.com . Проверено 19 ноября 2014 г.
  73. ^ Рассылка X3J3 после собрания, состоявшегося в Брукхейвенской национальной лаборатории в ноябре 1976 года.
  74. ^ «Уничтожение О». Компьютерный еженедельник . 3 марта 1977 года.
  75. ^ Правила ввода данных (Справочник по языку FORTRAN 77) . Проверено 29 сентября 2016 г.

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

[ редактировать ]
Языковые стандарты
Сопутствующие стандарты
Другой справочный материал
Книги
Статьи
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: acf511b7dc7fae428db47bbde91174b4__1722696780
URL1:https://arc.ask3.ru/arc/aa/ac/b4/acf511b7dc7fae428db47bbde91174b4.html
Заголовок, (Title) документа по адресу, URL1:
Fortran - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)