Фортран ( / ˈ f ɔːr t r æ n / ; ранее FORTRAN ) — это компилируемый императивный язык программирования третьего поколения , который особенно подходит для числовых и научных вычислений .
Первоначально Фортран был разработан IBM . [2] Впервые он был правильно скомпилирован в 1958 году . [3] Компьютерные программы на Фортране были написаны для поддержки научных и инженерных приложений, таких как численный прогноз погоды , анализ методом конечных элементов , вычислительная гидродинамика , геофизика , вычислительная физика , кристаллография и вычислительная химия . Это популярный язык для высокопроизводительных вычислений [4] и используется в программах для оценки и оценки самых быстрых суперкомпьютеров в мире . [5] [6]
Фортран развивался через множество версий и диалектов. В 1966 году Американский национальный институт стандартов (ANSI) разработал стандарт для Фортрана, поскольку новые компиляторы немного изменяли синтаксис. [7] Тем не менее, в последующих версиях была добавлена поддержка строк (Фортран 77), структурного программирования , программирования массивов , модульного программирования , общего программирования (Фортран 90), параллельных вычислений ( Фортран 95 ), объектно-ориентированного программирования (Фортран 2003) и параллельное программирование (Фортран, 2008).
С августа 2021 года Фортран входит в число пятнадцати лучших языков в индексе TIOBE , показателе популярности языков программирования. [8]
В первом руководстве по FORTRAN он описывается как система перевода формул , а название написано маленькими буквами : Fortran . [9] : стр.2 [10] Другие источники предполагают, что это название означает «Переводчик формул», [11] или «Перевод формул» . [12] Ранние компьютеры IBM не поддерживали строчные буквы, а названия версий языка в FORTRAN 77 обычно писались заглавными буквами [13] (FORTRAN 77 был последней версией, в которой набор символов Фортрана включал только прописные буквы). [14] ). В официальных языковых стандартах Фортрана этот язык называется «Фортран» с начальными ограничениями, начиная с Фортрана 90.
В конце 1953 года Джон В. Бэкус представил своему начальству в IBM предложение разработать более практичную альтернативу языку ассемблера для программирования их мэйнфрейма IBM 704 . [10] : 69 Историческая команда Бэкуса по FORTRAN состояла из программистов Ричарда Голдберга, Шелдона Ф. Беста, Харлана Херрика, Питера Шеридана, Роя Натта , Роберта Нельсона, Ирвинга Циллера, Гарольда Стерна, Лоис Хайбт и Дэвида Сэйра . [15] Его концепции включали более простой ввод уравнений в компьютер - идею, разработанную Дж. Холкомбом Лэнингом и продемонстрированную в системе Лэнинга и Цирлера 1952 года. [16]
Черновой вариант спецификации системы перевода математических формул IBM был завершен к ноябрю 1954 года . 10] : 75 Фортран создал достаточно эффективный код, чтобы программисты на ассемблере могли принять замену языка программирования высокого уровня . [17]
Джон Бэкус сказал в 1979 году в интервью Think , журналу для сотрудников IBM: «Большая часть моей работы связана с ленью. Мне не нравилось писать программы, и поэтому, когда я работал над IBM 701 , я писал программы для вычислений. траектории ракет, я начал работу над системой программирования, чтобы облегчить написание программ». [18]
Этот язык был широко принят учеными для написания программ с интенсивным числом вычислений, что побудило разработчиков компиляторов создавать компиляторы, которые могли генерировать более быстрый и эффективный код. Включение в язык комплексного числового типа данных сделало Фортран особенно подходящим для технических приложений, таких как электротехника. [19]
К 1960 году версии FORTRAN были доступны для компьютеров IBM 709 , 650 , 1620 и 7090 . Примечательно, что растущая популярность FORTRAN побудила конкурирующих производителей компьютеров предоставлять компиляторы FORTRAN для своих машин, так что к 1963 году существовало более 40 компиляторов FORTRAN.
FORTRAN был предоставлен для компьютера IBM 1401 с помощью инновационного 63-фазного компилятора, который полностью работал в основной памяти объемом всего 8000 (шестибитных) символов. Компилятор можно было запустить с ленты или с колоды на 2200 карт; он не использовал никаких дополнительных ленточных или дисковых накопителей. Он хранил программу в памяти и загружал оверлеи , которые постепенно преобразовывали ее на месте в исполняемую форму, как описал Хейнс. [20] Эта статья была переиздана и отредактирована в обоих изданиях « Анатомии компилятора» [21] и в руководстве IBM «Спецификации и операционные процедуры Фортрана, IBM 1401». [22] Исполняемая форма не была полностью машинным языком ; скорее, арифметика с плавающей запятой, подсценарии, ввод/вывод и ссылки на функции интерпретировались на два десятилетия раньше P-кода UCSD Pascal . GOTRAN , упрощенная интерпретируемая версия FORTRAN I (всего с 12 операторами, а не 32) для операции «загрузи и работай», была доступна (по крайней мере, для раннего компьютера IBM 1620 ). [23] Современный Фортран и почти все более поздние версии полностью скомпилированы, как и другие высокопроизводительные языки.
Развитие Фортрана шло параллельно с ранней эволюцией технологии компиляторов , и многие достижения в теории и проектировании компиляторов были специально мотивированы необходимостью генерировать эффективный код для программ на Фортране.
Первоначальная версия FORTRAN для IBM 704 [9] содержала 32 оператора , в том числе:
DIMENSION
и EQUIVALENCE
заявленияIF
оператор, передающий управление одному из трех мест программы в зависимости от того, был ли результат арифметического выражения отрицательным, нулевым или положительным.IF
операторы проверки исключений ( ACCUMULATOR OVERFLOW
, QUOTIENT OVERFLOW
и DIVIDE CHECK
); и IF
инструкции для управления сенсорными переключателями и сенсорными лампочкамиGO TO
, вычислено GO TO
, ASSIGN
, и присвоеноGO TO
DO
петлиFORMAT
, READ
, READ INPUT TAPE
, WRITE
, 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.
Этот FREQUENCY
оператор изначально (и необязательно) использовался для определения вероятностей ветвления для трех случаев IF
ветвления арифметического оператора. Первый компилятор FORTRAN использовал это взвешивание для выполнения во время компиляции моделирования сгенерированного кода по методу Монте-Карло , результаты которого использовались для оптимизации размещения базовых блоков в памяти — очень сложная оптимизация для своего времени. Метод Монте-Карло описан в статье Бэкуса и др. об этой оригинальной реализации « Система автоматического кодирования FORTRAN »:
Фундаментальной единицей программы является базовый блок ; базовый блок — это участок программы, имеющий одну точку входа и одну точку выхода. Цель раздела 4 — подготовить для раздела 5 таблицу предшественников (таблица PRED), в которой перечислены базовые блоки и для каждого базового блока указан каждый из базовых блоков, которые могут быть его непосредственными предшественниками в потоке, а также абсолютная частота появления каждая такая ссылка основного блока. Эта таблица получается путем однократного запуска программы методом Монте-Карло, в котором результат условных передач, возникающих из операторов типа IF и вычисленных GO TO, определяется генератором случайных чисел, соответствующим образом взвешенным в соответствии с любыми предоставленными операторами FREQUENCY. . [15]
Первый компилятор FORTRAN сообщал диагностическую информацию, останавливая программу при обнаружении ошибки и выводя код ошибки на консоль. Программист может найти этот код в таблице сообщений об ошибках в руководстве оператора, предоставив ему краткое описание проблемы. [9] : стр. 19–20 [24] Позже была включена подпрограмма обработки ошибок для обработки пользовательских ошибок, таких как деление на ноль, разработанная НАСА, [25] , информирующая пользователей о том, какая строка кода содержит ошибку.
До разработки дисковых файлов, текстовых редакторов и терминалов программы чаще всего вводились с помощью клавишной клавиатуры на перфокарты с 80 столбцами , по одной строке на карту. Полученная колода карт будет загружена в устройство чтения карт для компиляции. Коды перфокарт не содержали строчных букв или множества специальных символов, а были предложены специальные версии клавишного перфоратора IBM 026 , которые правильно печатали специальные символы, используемые в FORTRAN.
Отражая практику ввода перфокарт, программы на Фортране изначально были написаны в формате с фиксированными столбцами, при этом первые 72 столбца считывались в двенадцать 36-битных слов.
Буква «C» в столбце 1 привела к тому, что вся карточка рассматривалась как комментарий и игнорировалась компилятором. В противном случае столбцы карточки были разделены на четыре поля:
Таким образом, столбцы с 73 по 80 могут использоваться для идентификационной информации, такой как ввод порядкового номера или текста, который можно использовать для изменения порядка карточек, если стопка карточек упала; хотя на практике это предназначалось для стабильных, производственных программ. IBM 519 можно было использовать для копирования колоды программ и добавления порядковых номеров. Некоторые ранние компиляторы, например IBM 650, имели дополнительные ограничения из-за ограничений устройств чтения карт. [27] Нажатия клавиш можно было запрограммировать на переход к столбцу 7 и пропуск после столбца 72. Позже компиляторы ослабили большинство ограничений фиксированного формата, и это требование было устранено в стандарте Fortran 90.
В поле оператора пробельные символы (пробелы) игнорировались за пределами текстового литерала. Это позволило опускать пробелы между токенами для краткости или включать пробелы в идентификаторы для ясности. Например, AVG OF X
был действительным идентификатором, эквивалентным AVGOFX
, и был допустимым оператором, эквивалентным тому, что ноль в столбце 6 рассматривается как пробел (!), а вместо этого было присвоение 1,101 переменной с именем . Обратите внимание на небольшую визуальную разницу между запятой и точкой.101010DO101I=1,101
10101 DO 101 I = 1, 101
101010DO101I=1.101
10101 DO101I = 1.101
DO101I
Строки Холлерита , первоначально разрешенные только в операторах FORMAT и DATA, имели префикс количества символов и буквы H (например, 26HTHIS IS ALPHANUMERIC DATA.
), что позволяло сохранять пробелы в строке символов. Ошибки в подсчетах были проблемой.
FORTRAN II от IBM появился в 1958 году. Основное усовершенствование заключалось в поддержке процедурного программирования путем разрешения написанных пользователем подпрограмм и функций, которые возвращали значения с параметрами, передаваемыми по ссылке . Оператор COMMON предоставляет подпрограммам возможность доступа к общим (или глобальным ) переменным. Было введено шесть новых заявлений: [28]
SUBROUTINE
, FUNCTION
, иEND
CALL
иRETURN
COMMON
В течение следующих нескольких лет в FORTRAN II была добавлена поддержка типов данных DOUBLE PRECISION
и COMPLEX
.
Ранние компиляторы FORTRAN не поддерживали рекурсию в подпрограммах. Ранние компьютерные архитектуры не поддерживали концепцию стека, а когда они напрямую поддерживали вызовы подпрограмм, место возврата часто сохранялось в одном фиксированном месте, рядом с кодом подпрограммы (например, IBM 1130 ) или в регистре конкретной машины ( IBM 360 и последующие). ), что допускает рекурсию только в том случае, если стек поддерживается программным обеспечением и адрес возврата сохраняется в стеке до выполнения вызова и восстанавливается после возврата вызова. Хотя это не указано в FORTRAN 77, многие компиляторы F77 поддерживали рекурсию в качестве опции, а мэйнфреймы Burroughs , разработанные со встроенной рекурсией, делали это по умолчанию. Он стал стандартом в Фортране 90 благодаря новому ключевому слову RECURSIVE. [29]
Эта программа для формулы Герона считывает данные с катушки с лентой, содержащей в качестве входных данных три 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 FORMAT ( 3 I5 ) C IA, IB и IC НЕ МОГУТ БЫТЬ ОТРИЦАТЕЛЬНЫМИ ИЛИ НУЛЕВЫМИ C, КРОМЕ ТОГО, СУММА ДВУХ СТОРОН ТРЕУГОЛЬНИКА C ДОЛЖНА БЫТЬ БОЛЬШЕ ТРЕТЬЕЙ СТОРОНЫ, ПОЭТОМУ МЫ ПРОВЕРЯЕМ ЭТО, ТОЖЕ 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 ЕСЛИ ( IB + IC - IA ) 777 , 777 , 799 777 STOP 1 C ПО ФОРМУЛЕ ГЕРОНА ВЫЧИСЛЯЕМ ПЛОЩАДЬ ТРЕУГОЛЬНИКА 799 S = FLOATF ( IA + IB + IC ) /2.0 AREA = SQRTF ( S * ( S - FLOATF ( IA )) * ( S - FLOATF ( IB )) * + ( S - FLOATF ( IC ))) ЗАПИСЬ ВЫХОДНОЙ ЛЕНТЫ 6 , 601 , IA , IB , IC , AREA 601 ФОРМАТ ( 4 Ч А = , I5 , 5 ЧАС B = , I5 , 5 Ч C = , I5 , 8 Ч ПЛОЩАДЬ = , F10 . 2 , + 13 H КВАДРАТНЫХ ЕДИНИЦ ) СТОП КОНЕЦ
IBM также разработала FORTRAN III в 1958 году, который, помимо других функций, позволял использовать встроенный ассемблерный код; однако эта версия так и не была выпущена как продукт. Подобно 704 FORTRAN и FORTRAN II, FORTRAN III включал машинно-зависимые функции, которые делали написанный на нем код непереносимым с машины на машину. [10] : 76 Ранние версии FORTRAN, предоставленные другими поставщиками, страдали от того же недостатка.
IBM начала разработку FORTRAN IV начиная с 1961 года по требованию клиентов. В FORTRAN IV удалены машинно-зависимые функции FORTRAN II (такие как READ INPUT TAPE
), но добавлены новые функции, такие как LOGICAL
тип данных , логические логические выражения и логический оператор IF в качестве альтернативы арифметическому оператору IF. FORTRAN IV был в конечном итоге выпущен в 1962 году, сначала для компьютера IBM 7030 («Stretch»), за ним последовали версии для IBM 7090 , IBM 7094 и позже для IBM 1401 в 1966 году .
К 1965 году FORTRAN IV должен был соответствовать стандарту , разрабатываемому рабочей группой X3.4.3 FORTRAN Американской ассоциации стандартов . [31]
Между 1966 и 1968 годами IBM предложила несколько компиляторов FORTRAN IV для своей System/360 , каждый из которых был назван буквами, обозначавшими минимальный объем памяти, необходимый для работы компилятора.[32] Буквы (F, G, H) соответствовали кодам, используемым в номерах моделей System/360 для обозначения объема памяти, при этом приращение каждой буквы было в два раза больше: [33] : стр. 5
Digital Equipment Corporation поддерживала DECSYSTEM-10 Fortran IV (F40) для PDP-10 с 1967 по 1975 год. [34] Компиляторы также были доступны для серии UNIVAC 1100 и систем серии Control Data 6000 и 7000 . [35]
Примерно в это же время 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. Эти комментарии не должны были помещаться в середину карточек продолжения. [34] [35]
Возможно, самым значительным событием в ранней истории 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
линияПосле выпуска стандарта 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
или N
(и REAL
иначе)CHARACTER
тип данных, заменяющий строки Холлерита значительно расширенными возможностями для ввода и вывода символов, а также обработки символьных данных.PARAMETER
оператор для указания константSAVE
оператор для постоянных локальных переменныхSQRT
также принимает аргументы других типов, например COMPLEX
или REAL*16
).LGE, LGT, LLE, LLT
) для лексического сравнения строк на основе последовательности сопоставления ASCII . (Эти функции ASCII были запрошены Министерством обороны США в ходе голосования по условному одобрению. [ нужна ссылка ] )В этой версии стандарта ряд функций был удален или изменен таким образом, что это могло сделать недействительными программы, ранее соответствующие стандарту.(Удаление было единственной допустимой альтернативой X3J3 в то время, поскольку концепция « устаревания » еще не была доступна для стандартов ANSI.) Хотя большинство из 24 пунктов в списке конфликтов (см. Приложение A2 X3.9-1978) устранены лазейки или патологические случаи, разрешенные предыдущим стандартом, но редко используемые, небольшое количество конкретных возможностей было намеренно удалено, например:
GREET = 12HHELLO THERE!
РАЗМЕР А ( 10 , 5 ) Y знак равно А ( 11 , 1 )
Разработка пересмотренного стандарта, пришедшего на смену FORTRAN 77, неоднократно откладывалась, поскольку процесс стандартизации с трудом успевал за быстрыми изменениями в практике вычислений и программирования. Между тем, в течение почти пятнадцати лет FORTRAN 77 оставался «стандартным ФОРТРАНом» и стал исторически самым важным диалектом.
Важным практическим расширением FORTRAN 77 стал выпуск MIL-STD-1753 в 1978 году. [36] Эта спецификация, разработанная Министерством обороны США , стандартизировала ряд функций, реализованных большинством компиляторов FORTRAN 77, но не включенных в ANSI. Стандарт ФОРТРАН 77. Эти функции в конечном итоге будут включены в стандарт Fortran 90.
DO WHILE
, EXIT
, CYCLE
, и END DO
утвержденияINCLUDE
заявлениеIMPLICIT NONE
вариант IMPLICIT
высказыванияСтандарт IEEE 1003.9 POSIX , выпущенный в 1991 году, предоставил программистам FORTRAN 77 простые средства для выполнения системных вызовов POSIX. [37] В документе было определено более 100 вызовов, обеспечивающих переносимый доступ к POSIX-совместимому управлению процессами, обработке сигналов, управлению файловой системой, управлению устройствами, указанию процедур и потоковому вводу-выводу.
Преемник FORTRAN 77, неофициально известный как Fortran 90 (а до этого — Fortran 8X ), с большим опозданием был наконец выпущен в качестве стандарта ISO/IEC 1539:1991 в 1991 году и стандарта ANSI в 1992 году. В этой основной версии, написанной с ФОРТРАНа на Фортран, было добавлено множество новых функций, отражающих значительные изменения в практике программирования, произошедшие со времени стандарта 1978 года:
X(1:N)=R(1:N)*COS(A(1:N))
WHERE
оператор выборочного присвоения массиваRECURSIVE
процедурыALLOCATABLE
атрибута и операторов ALLOCATE
and.DEALLOCATE
POINTER
атрибут, назначение указателя и NULLIFY
оператор для облегчения создания и манипулирования динамическими структурами данных.END DO
оператором завершения цикла и оператором EXIT
и CYCLE
для DO
упорядоченного завершения обычных итераций цикла.SELECT CASE
, CASE
, . . . CASE DEFAULT
, END SELECT
конструкция для многостороннего выбораВ отличие от предыдущей версии, в Fortran 90 не было удалено никаких функций. [38] Любая программа FORTRAN 77, соответствующая стандарту, также соответствовала стандарту Fortran 90, и любой стандарт должен был использоваться для определения ее поведения.
Небольшой набор функций был признан «устаревшим» и, как ожидается, будет удален в будущем стандарте. Все функции этих функций ранней версии могут выполняться более новыми функциями Fortran. Некоторые из них сохранены для упрощения переноса старых программ, но многие были удалены в Fortran 95.
программа helloworld print * , "Hello, World!" завершить программу helloworld
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 гарантирует автоматическое освобождение массивов при выходе за пределы области видимости, что исключает возможность утечки памяти . Кроме того, элементы выделяемых массивов являются смежными, и псевдонимы не являются проблемой для оптимизация ссылок на массивы, позволяющая компиляторам генерировать более быстрый код, чем в случае указателей. [39] )
Еще одним важным дополнением к Fortran 95 стал технический отчет ISO TR-15580: Обработка исключений с плавающей запятой , неофициально известный как IEEE TR. Эта спецификация определила поддержку арифметики с плавающей запятой IEEE и обработки исключений с плавающей запятой .
В дополнение к обязательному «Базовому языку» (определенному в ISO/IEC 1539-1: 1997), язык Fortran 95 также включает два дополнительных модуля:
которые вместе составляют многочастный международный стандарт (ISO/IEC 1539).
По мнению разработчиков стандартов, «необязательные части описывают автономные функции, которые запрошены значительной частью пользователей и/или разработчиков, но которые не считаются достаточно общими для того, чтобы они могли требоваться во всех соответствующих стандартам стандартах». Компиляторы Фортрана». Тем не менее, если Фортран, соответствующий стандарту, предоставляет такие возможности, то они «должны быть предоставлены в соответствии с описанием этих возможностей в соответствующей части стандарта».
Язык, определенный стандартами двадцать первого века, в частности из-за включения в него поддержки объектно-ориентированного программирования , а затем и Coarray Fortran , часто называют «современным Фортраном», и этот термин все чаще используется в литературе. [40]
Fortran 2003, официально опубликованный как ISO/IEC 1539-1:2004, представлял собой серьезную версию, в которой было представлено множество новых функций. [41] Подробное описание новых возможностей Fortran 2003 доступно на официальном веб-сайте рабочей группы Fortran ( ISO/IEC JTC1/SC22 /WG5). [42]
В этой статье основные улучшения этой версии включают в себя:
VOLATILE
атрибут , явная спецификация типа в конструкторах массивов и операторах выделения, улучшения указателей, расширенные выражения инициализации и улучшенные внутренние процедуры.FLUSH
, регуляризация ключевых слов и доступ к сообщениям об ошибках.Важным дополнением к Fortran 2003 стал технический отчет ISO TR-19767: Расширенные возможности модулей на Fortran. В этом отчете представлены подмодули, которые делают модули Fortran более похожими на модули Modula-2 . Они похожи на частные дочерние подразделения Ады . Это позволяет выразить спецификацию и реализацию модуля в отдельных программных модулях, что улучшает упаковку больших библиотек, позволяет сохранять коммерческую тайну при публикации окончательных интерфейсов и предотвращает каскадную компиляцию.
ISO/IEC 1539-1:2010, неофициально известный как Fortran 2008, был утвержден в сентябре 2010 года. [43] [44] Как и Fortran 95, это незначительное обновление, включающее пояснения и исправления Fortran 2003, а также введение некоторые новые возможности. Новые возможности включают в себя:
Окончательный проект международного стандарта (FDIS) доступен в виде документа N1830. [45]
Дополнением к Fortran 2008 является Техническая спецификация (TS) 29113 Международной организации по стандартизации (ISO) о дальнейшем взаимодействии Fortran с C , [46] [47], которая была представлена в ISO в мае 2012 года на утверждение. Спецификация добавляет поддержку доступа к дескриптору массива из C и позволяет игнорировать тип и ранг аргументов.
Последняя версия языка (Fortran 2018) ранее называлась Fortran 2015. [48] Это была значительная версия, выпущенная 28 ноября 2018 года. [49]
Fortran 2018 включает две ранее опубликованные технические спецификации:
Дополнительные изменения и новые функции включают поддержку ISO/IEC/IEEE 60559:2011 (версия стандарта IEEE с плавающей запятой до последней незначительной версии IEEE 754–2019), шестнадцатеричный ввод/вывод, улучшения IMPLICIT NONE и другие изменения. [52] [53] [54] [55]
Фортран 2023 (ISO/IEC 1539-1:2023) был опубликован в ноябре 2023 года, и его можно приобрести в ISO. [56] Fortran 2023 — это незначительное расширение Fortran 2018, в котором основное внимание уделяется исправлению ошибок и упущений в Fortran 2018, а также добавлению некоторых небольших функций. Неофициальное описание дано в Metcalf et al. , цитируется ниже.
Полное описание возможностей языка Фортран, представленных в Фортране 95, приведено в соответствующей статье « Функции языка Фортран 95» . Языковые версии, определенные более поздними стандартами, часто называются «современным Фортраном» и описываются в литературе.
Хотя в журнальной статье 1968 года авторы BASIC уже описали FORTRAN как «старомодный», [57] программы были написаны на Fortran в течение многих десятилетий, и существует огромное количество программного обеспечения Fortran, которое ежедневно используется в научных и инженерных сообществах. . [58] Джей Пасачофф писал в 1984 году, что «студентам-физикам и астрономам просто необходимо выучить FORTRAN. В FORTRAN существует так много всего, что кажется маловероятным, что ученые перейдут на Pascal , Modula-2 или что-то еще». [59] В 1993 году Сесил Э. Лейт назвал ФОРТРАН «родным языком научных вычислений», добавив, что его замена любым другим возможным языком «может оставаться тщетной надеждой». [60]
Это основной язык для некоторых из наиболее интенсивных суперкомпьютерных задач, таких как астрономия , моделирование климата , вычислительная химия, вычислительная экономика , вычислительная гидродинамика , вычислительная физика , анализ данных, [61] гидрологическое моделирование , численная линейная алгебра и числовые библиотеки ( LAPACK , IMSL и NAG ), оптимизация , спутниковое моделирование, проектирование конструкций и прогнозирование погоды . [62] Многие тесты с плавающей запятой для оценки производительности новых компьютерных процессоров, такие как компоненты с плавающей запятой тестов 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, чтобы обеспечить более гибкое взаимодействие с другими языками программирования.
Программное обеспечение для зондов НАСА «Вояджер-1» и «Вояджер-2» изначально было написано на FORTRAN 5, а затем портировано на FORTRAN 77. По состоянию на 25 сентября 2013 года [обновлять]часть программного обеспечения все еще написана на Fortran, а часть портирована на C. [63]
На заре переносимость была проблемой, потому что не было единого стандарта (даже справочного руководства 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, последняя для машин, оснащенных индексными регистрами и автоматической десятичной ( двузначной ) арифметикой с плавающей запятой. Приложение A к руководству включало электрические схемы панели управления устройством считывания карт/перфоратора IBM 533 .
До FORTRAN 77 обычно использовался ряд препроцессоров для создания более дружественного языка, с тем преимуществом, что предварительно обработанный код мог быть скомпилирован на любой машине со стандартным компилятором FORTRAN. Эти препроцессоры обычно поддерживают структурированное программирование , имена переменных длиной более шести символов, дополнительные типы данных, условную компиляцию и даже возможности макросов . Популярные препроцессоры включали EFL , FLECS, iftran , MORTRAN , SFtran, S-Fortran, Ratfor и Ratfiv . Например, Ratfor и Ratfiv реализовали C -подобный язык, выводящий предварительно обработанный код на стандартном FORTRAN 66. Препроцессор PFORT часто использовался для проверки соответствия кода переносимому подмножеству языка. Несмотря на достижения в языке Фортран, препроцессоры продолжают использоваться для условной компиляции и замены макросов.
Одна из самых ранних версий FORTRAN, представленная в 60-х годах, широко использовалась в колледжах и университетах. Разработанный, поддерживаемый и распространяемый Университетом Ватерлоо , WATFOR был в основном основан на FORTRAN IV. Студент, использующий WATFOR, мог отправить пакетное задание на FORTRAN, и, если не было синтаксических ошибок, программа сразу перешла бы к выполнению. Это упрощение позволило студентам сосредоточиться на синтаксисе и семантике своей программы или логическом потоке выполнения, вместо того, чтобы иметь дело с языком управления заданиями (JCL), последовательными процессами компиляции/ссылки-редактирования/выполнения или другими сложностями мэйнфрейма. / среда миникомпьютера. Обратной стороной этой упрощенной среды было то, что WATFOR не был хорошим выбором для программистов, которым требовались расширенные возможности их хост-процессора (ов), например, WATFOR обычно имел очень ограниченный доступ к устройствам ввода-вывода. На смену WATFOR пришли WATFIV и его более поздние версии.
программа ; s знак равно 0 я знак равно 1 , п ; с = с + 1 ; остановись, я ; s = 's' Стоп
(линейное программирование)
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
при манипулировании массивом; математические операции применяются к массиву в целом. Также очевидным является использование описательных имен переменных и общего форматирования кода, соответствующих современному стилю программирования. В этом примере вычисляется среднее значение по данным, введенным в интерактивном режиме.
среднее значение программы ! Прочитайте несколько цифр и возьмите среднее значение ! Как написано, если точек данных нет, возвращается среднее значение, равное нулю ! Хотя это может быть нежелательным поведением, этот пример остается простым. неявный нет real , размерность (:), распределяемые :: целочисленные баллы :: число_очков реальные :: средние_баллы , позитивное_среднее , негативное_среднее средние_баллы = 0,0 позитивное_среднее = 0,0 негативное_среднее = 0,0 запись ( * , * ) "Введите количество баллов для среднего:" прочитайте ( * , * ) количество_очков распределить ( баллы ( количество_очков )) напишите ( * , * ) «Введите баллы для усреднения:» прочитайте ( * , * ) баллы ! Возьмите среднее значение, суммируя баллы и разделив на количество_очков, если ( количество_очков > 0 ) средние_очков = сумма ( очков ) / число_очков ! Теперь сформируйте среднее значение по положительным и отрицательным точкам только в том случае, если ( count ( точек > 0. ) > 0 ) положительное_среднее = sum ( точек , точек > 0. ) / count ( точек > 0. ) if ( count ( точек < 0. ) > 0 ) отрицательное_среднее = сумма ( баллов , баллов < 0. ) / количество ( баллов < 0. ) ! Вывести результат в модуль стандартного вывода терминала 6 write ( * , '(a,g12.4)' ) 'Average = ' , Average_points write ( * , '(a,g12.4)' ) 'Среднее положительное значение = ' , положительное_среднее write ( * , '(a,g12.4)' ) 'Среднее отрицательное количество баллов = ' , негативное_среднее освобождение ( пункты ) ! свободная память в конце программы, среднее значение
Во время того же заседания комитета по стандартам FORTRAN, на котором было выбрано название «FORTRAN 77», в официальный дистрибутив было включено сатирическое техническое предложение под названием «Буква O считается вредной ». Это предложение имело целью устранить путаницу, которая иногда возникает между буквой «О» и цифрой ноль, путем исключения этой буквы из допустимых имен переменных. Однако предложенный метод заключался в том, чтобы полностью исключить букву из набора символов (тем самым сохранив 48 как количество лексических символов, которое двоеточие увеличило до 49). Это считалось полезным, поскольку оно способствовало структурному программированию, делая невозможным использование пресловутого GO TO
утверждения, как раньше. (Неприятные FORMAT
утверждения также будут исключены.) Было отмечено, что это «может сделать недействительными некоторые существующие программы», но что большинство из них «в любом случае, вероятно, не соответствуют требованиям». [73] [ ненадежный источник? ] [74]
Когда X3J3 обсуждал, должно ли минимальное количество отключений для цикла DO быть равно нулю или единице в Fortran 77, Лорен Мейснер предложил минимальное количество отключений, равное двум, рассуждая ( иронично) , что если бы оно было меньше двух, то не быть причиной для цикла.
Когда добавлялись массивы предполагаемой длины, возник спор относительно подходящего символа для разделения верхней и нижней границ. В комментарии, рассматривающем эти аргументы, Уолт Брейнерд написал статью под названием «Астрономия против гастроэнтерологии», поскольку некоторые сторонники предлагали использовать звездочку или звездочку («*»), в то время как другие предпочитали двоеточие («:»). [ нужна цитата ]
Имена переменных, начинающиеся с букв I – N, по умолчанию имеют целочисленный тип, а переменные, начинающиеся с любых других букв, по умолчанию имеют значение вещественное, хотя программисты могут переопределить значения по умолчанию с помощью явного объявления. [75] Это привело к шутке: «В ФОРТРАНЕ БОГ РЕАЛЬНЫЙ (если не указано ЦЕЛОЕ ЧИСЛО)».
Руководство по Фортрану I было выпущено в 1956 году, но только в 1958 году успешные компиляторы начали корректно запускать программы.
Другая проблема заключалась в том, что для Фортрана не было стандарта, и поэтому несколько разные версии... скорее всего, потерпят неудачу при использовании с другим компилятором.
Компилятор Fortran I был первым крупным проектом по оптимизации кода.
Он решал проблемы решающей важности, общее решение которых было важным направлением исследований в области технологии компиляторов на протяжении нескольких десятилетий.
Многие классические методы анализа и оптимизации компилятора берут свое начало и вдохновение от компилятора Fortran I.
ПФОРТ...Библиотека...
ПОРТ... пишется на (PFORT)..ANS Фортран
.. обсуждает .. переносимость .. Фортрана
{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )Неофициально известный как FORTRAN 66.{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )Также известен как ISO 1539–1980, неофициально известный как FORTRAN 77.{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )Неофициально известный как Фортран 90.{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )Неофициально известный как Фортран 95. Этот стандарт состоит из еще двух частей. Часть 1 была официально принята ANSI.{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )Неофициально известный как Fortran 2003.{{cite book}}
: CS1 maint: числовые имена: список авторов ( ссылка )[ постоянная мертвая ссылка ] Неофициально известный как Fortran 2008.{{cite book}}
: CS1 maint: местоположение ( ссылка ){{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь )