Fortran - znate.ru

advertisement
Fortran
План:
Введение







1 История развития
o 1.1 FORTRAN
o 1.2 FORTRAN II
o 1.3 FORTRAN IV
o 1.4 FORTRAN 66
o 1.5 FORTRAN 77
o 1.6 Fortran 90
o 1.7 Fortran 95
o 1.8 Fortran 2003
o 1.9 Fortran 2008
2 Особенности и возможности современного Фортрана
3 Компиляторы
4 Библиотеки
5 Критика
6 Примеры
7 Юмор
Примечания
Литература
Введение
Фортран (Fortran) (ранее FORTRAN - сокращение от "The IBM Mathematical Formula
Translating System", т.е. "Система трансляции математических формул IBM") - это
императивная язык общего назначения, особенно подходит для интенсивных численных и
научных вычислений. Разработанная корпорацией IBM в 1950-х годах в университетском
городке на юге Сан-Хосе, штат Калифорния для нужд научных и инженерных проектов.
Довольно быстро Fortran стал доминировать в этой области программирования, и вот уже
как более полувека находится в постоянном употреблении в области численного прогноза
погоды, анализа методом конечных элементов, вычислительной гидродинамики,
вычислительной физики и химии. Это одна из наиболее популярных языков в области
высокопроизводительных вычислений, а также используется для тестирования
быстродействия мощных в мире суперкомпьютеров.
Фортран как язык, развивался стабильно и даже консервативно. Каждый следующий
стандарт создавался в результате длительной дискуссии между производителями
компиляторов и заинтересованными экспертами. Благодаря этому, каждая из версий,
развивавшаяся обычно добавляла только расширение языка, одновременно сохраняя при
этом совместимость с предыдущими версиями (однако были и исключения). Версия
Fortran 77 добавила поддержку для обработки символьных данных, операции с массивами
и модульное программирование появились в Fortran 90; функциональное
программирование в Fortran 95, объектно-ориентированное программирование и
обобщенное программирование в Fortran 2003. И наконец обобщенное параллельное
программирование с помощью co-arrays, использующий архитектурно-независимый и
близкий для Фортрана синтаксис для параллельной декомпозиции данных и выполнения
инструкций, было стандартизировано в Fortran 2008.
1. История развития
1.1. FORTRAN
Особенностью языка Fortran является уже то, что с развитием она изменила даже свое
название, отражая тот факт, что в версии Fortran 90 все ключевые слова должны были
быть написаны заглавными буквами. Это изменилось в Fortran 90 и начиная с этой версии
язык FORTRAN официально стали называть Fortran.
В конце 1953 года Джон В. Бeкус внес предложение своему начальству в IBM по
разработке более практической альтернативы языка программирования для их IBM 704
ЭВМ. В историческую команду по созданию языка FORTRAN вошли также
программисты Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt,
Robert Nelson, Irving Ziller, Lois Haibt, and David Sayre. Проект спецификации системы
было завершено к середине 1954 года. Первое пособие для FORTRAN появился в октябре
1956 года, а первый компилятор FORTRAN - в апреле 1957 года. Это был первый в мире
оптимизирующий компилятор, поскольку клиенты соглашались использовать языки
программирования высокого уровня только тогда, когда компилятор сможет генерировать
код, производительность которого будет близка к коду, который может написать опытный
программист непосредственно на ассемблере. Несмотря на скепсис и сомнения
сообщества, компилятор быстро завоевал признание. Речь была положительно принята
учеными и инженерами для написания программ, которые в свою очередь создали
необходимые условия и рынок для создания компиляторов, которые могут генерировать
более быстрый и эффективный код. Включение комплексных чисел в фортран сделал это
язык особенно удобной для технических и инженерных программ, таких как
электротехника. До 1960 года версии FORTRAN были доступны для 709, 650, 1620, и 7090
IBM компьютеров. Рост популярности FORTRAN побудило производителей компьютеров
обеспечить компиляторами FORTRAN свои машины, так что до 1963 года существовало
уже более 40 различных FORTRAN-компиляторов. По этим причинам, FORTRAN
считается первой широко используемой языке программирования, которая поддерживала
самые компьютерные архитектуры. Развитие FORTRAN происходил параллельно ранней
эволюции технологии компиляторов, и многие достижения в области теории и разработки
компиляторов были специально мотивированы необходимостью создания эффективного
кода для программ на FORTRAN.
До появления дисков и файлов, текстовых и терминалов, программы зачастую вводили с
помощью перфокарт на клавиатуре перфоратора на 80 знаков. То есть, в результате колода
карт подавалась в специальный "кард-ридер" ЭВМ для компиляции. Поэтому
оригинальный код Фортран был в фиксированном формате длиной в 80 символов
(колонок). Не поддерживалась рекурсия и подпрограммы.
1.2. FORTRAN II
IBM, FORTRAN II появился в 1958 году. Основными улучшениями были поддержка
процедурного программирования, т.е. подпрограммы и функций с параметрами, которые
передавались по ссылке (by reference). Для подпрограмм предоставили возможность
доступа к глобальным переменным.
IBM также разработала FORTRAN III в 1958 году, позволял писать на ассемблере в
функциях, однако эту версию так и не выпустили на рынок в качестве готового продукта.
Для машины IBM 1401 был создан инновационный на то время 63-проходной компилятор
Фортрана, который помещался всего в 8-килобайт. Он сохранял код программы в памяти
и одновременно постепенно транслировал ее на машинный язык - то есть это был первый
в мире интерпретатор языка программирования. Следующий интерпретатор (языка Pascal)
появился только через 2 десятилетия.
1.3. FORTRAN IV
Начиная с 1961 года, в результате изучения потребностей клиентов, компания IBM начала
разработку версии FORTRAN IV, в котором были удалены машинно-зависимые
особенности FORTRAN II (такие как READ INPUT TAPE), а добавлено много новых
элементов, таких как: логический тип данных, логические операции и логический IF в
качестве альтернативы арифметическому IF. FORTRAN IV выпустили в 1962 году,
первоначально для компьютеров IBM 7030 ("Stretch"), а затем и для IBM 7090 и IBM 7094.
К 1965 году, FORTRAN IV был "стандартом" в соответствии с American Standards
Association X3.4.3 FORTRAN Working Group [1].
1.4. FORTRAN 66
Пожалуй, самым значительным событием в ранней истории FORTRAN стало решение
Американской ассоциации стандартов (ANSI сейчас) сформировать комитет для
разработки "американского стандарта Фортрана". Fortran 66 в марте 1966 года фактически
стал первой "стандартной для индустрии" версии FORTRAN. В Fortran 66 входили очень
много усовершенствований: main program, SUBROUTINE, FUNCTION и BLOCK DATA
программные одниници; типы INTEGER, REAL, DOUBLE PRECISION, COMPLEX и LOGICAL;
COMMON, DIMENSION, AND EQUIVALENCE инструкции; DATA для спецификации начальных
значений переменных INTRINSIC и EXTERNAL (т.е. библиотечных, внешних) функций;
GOTO, определенный GOTO, и вычисляемый GOTO; логический и арифметический IF; DO
циклы; READ, WRITE, BACKSPACE, REWIND, и ENDFILE ключевые слова для последовательных
операций ввода-вывода; FORMAT для форматирования ввода- вывода; CALL, RETURN, PAUSE,
и STOP; холерические константы в DATA и FORMAT выражениях, а также в качестве
аргументов для процедур; идентификаторы с длиной до 6 символов а также предоставлена
возможность записи комментариев в коде.
1.5. FORTRAN 77
После обнародования стандарта FORTRAN 66, производители компиляторов продолжали
вносить по просьбе пользователей ряд расширений для языка, что заставило ANSI в 1969
году начать работу по пересмотру принятого в 1966 году стандарта. Окончательные
проекты следующего стандарта были завершены в 1977 году, и официальное утверждение
стандарта FORTRAN 77 произошло в апреле 1978 года. Новый стандарт FORTRAN 77
добавлял ряд существенных особенностей для решения многих недостатков FORTRAN
66: блоки IF ... END IF IF ... END IF, с опциональными ELSE ... ELSE IF ELSE ...
ELSE IF, что значительно облегчали структурное программирование, расширение DO
циклов с параметрическими выражениями, негативным инкрементом и нулевым циклом;
OPEN, CLOSE, и INQUIRE для работы с файлами а также прямой доступ к файлам; IMPLICIT
выражение и символьный тип данных CHARACTER с большим количеством функций для
него; PARAMETER для декларирования констант; SAVE для постоянных в памяти локальных
переменных, общие имена встроенных функций и др.. В этой версии стандарта некоторые
инструкции были изъяты и объявлены устаревшими (то есть такими, которые будут
изъяты в следующих версиях языка Fortran).
1.6. Fortran 90
Со значительным опозданием, как преемник FORTRAN 77, известный сейчас как Fortran
90 (а до этого, Fortran 8X) был выпущен в качестве стандарта ISO 1991 и стандарта ANSI в
1992 году. Это был довольно масштабный пересмотр предыдущего стандарта, который
также учитывал новые тенденции и развитие других языков. Было добавлено множество
новых функций, чтобы отразить значительные изменения в практике программирования:
















нефиксированная форма записи исходного кода а также запись ключевых слов
строчными буквами;
идентификаторы переменных длиной до 31 символа;
встроенные однострочные комментарии;
операции над массивами как целое, и над выборками массивов, что значительно
упрощало математические и инженерные вычисления;
рекурсивные процедуры;
модули для группировки связанных процедур и данных, чтобы сделать их
доступными для других частей программы, включая возможность ограничивать
доступ только к определенным частям модуля
значительно улучшилось механизм передачи аргументов, что позволяло проверять
интерфейсы функций и процедур во время компиляции;
предусмотрено создание интерфейсов пользователя для общих процедур;
перегрузки операторов;
производные / абстрактные типы данных новый тип синтаксиса для декларации
типа данных и других атрибутов переменных и констант;
динамическое выделение памяти с помощью ALLOCATATE/ DEALLOCATE и
ALLOCATABLE атрибутов;
POINTER для облегчения создания и обработки динамических структур данных;
структурированные циклические конструкции с END DO для завершения цикла, и
CYCLE и EXIT для контроля и выхода из итераций цикла;
SELECT ... CASE SELECT ... CASE для многоходового выбора;
спецификации точности вычислений под контролем пользователя;
новые и усовершенствованные встроенные процедуры.
В отличие от предыдущих версий, с версии стандарта Фортран 90 не было удалено ни
одного элемента, однако значительное их количество объявили устаревшими.
1.7. Fortran 95
Fortran 95 был незначительным ревизией предыдущего стандарта, в основном, чтобы
решить некоторые нерешенные насущные вопросы из практики программирования с
помощью стандарта Fortran 90. Тем не менее, в Fortran 95 также было добавлено ряд
расширений, в частности,






так называемого высокопроизводительного Фортран (High Performance Fortran):
FORALL и вложенные инструкции WHERE, для облегчения векторизации;
PURE и элементарные ELEMENTAL процедуры;
стандартная инициализация по умолчанию компонентов производных типов;
расширены возможности использования выражений инициализации;
дополнили явным разъяснением того, что память занята ALLOCATABLE массивами
автоматически освобождается, когда они выходят из своей области видимости;
расширили число встроенных функций.
Некоторые инструкции отмечены в Fortran 90 как устаревшие, были удалены из Fortran 95:
циклы с действительными счетчиками, PAUSE и др..
Важным дополнением к Fortran 95 стал доклад ISO TR-15581. В этой спецификации
определен расширенное использование ALLOCATABLE массивов, еще до наличии полностью
Fortran 2003 совместимых компиляторов. Добавили возможность для ALLOCATABLE
массивов быть компонентами производных типов, в списках формальных параметров
процедур, а также как возвращаемые функцией. Еще одним важным дополнением к
Fortran 95 была техническая доклад ISO TR-15580: с отделкой исключений работы с
плавающей запятой, неофициально известный как IEEE TR. В этой спецификации
определены также полную поддержку IEEE арифметики с плавающей запятой. Fortran 95
также добавил два дополнительных модуля для поддержки строк переменной длины
(Varying character strings (ISO / IEC 1539-2: 2000)) и условной компиляции (Conditional
compilation - ISO / IEC 1539-3: 1998).
1.8. Fortran 2003
Fortran 2003 стал одним из основных ревизий, добавила в язык много новых
возможностей. Всесторонний обзор новых возможностей Fortran 2003 можно прочитать на
официальном сайте рабочей группы Фортран [2]. Согласно этой статье, основные
улучшения для новой версии стандарта включают:









улучшения для производных типов-параметризованы производные типы, улучшено
контроль доступности, улучшения структуры конструкторов и деструкторов;
объектно-ориентированное программирование - расширение типа и наследование,
полиморфизм, динамическое выделение памяти для типов и привязанных к типу
процедур;
улучшения манипуляций с данными - динамическое выделение памяти для
компонент, VOLATILE атрибут, явные спецификации типа в конструкторах
массивов, усовершенствования POINTER, расширенные выражения для
инициализации, и улучшение встроенных процедур;
операции чтения / записи - асинхронная передача, потоковый доступ,
определенные пользователем операции для производных типов, контроль за
округлением в спецификации FORMAT, именованные константы для открытых
файловых потоков, FLUSH инструкция, регуляризация ключевых слов и доступ к
сообщениям об ошибках;
POINTER для процедур;
поддержка IEEE с плавающей запятой и обработка исключений (включая TR
15580)
взаимодействие с языком программирования C;
поддержка интернационализации: доступ к ISO 10646 4-байтовых символов и
выбор десятичной знака чисел при формат чтения / записи;
расширенная интеграция с основной операционной системой - доступ к аргументам
командной строки, переменные окружения, и сообщения об ошибках процессора.
Важным дополнением к Fortran 2003 стала доклад ISO TR-19767: о расширении модулей в
Fortran. Этот доклад внедрила дополнительный SUBMODULE. Это позволило определение и
реализацию модулей, которые могут описываться частями в отдельных блоках
программы, что позволяет улучшить архитектуру крупных библиотек, облегчает
публикацию интерфейсов, а также предотвращает каскадной компиляции.
1.9. Fortran 2008
Последний стандарт ISO / IEC 1539-1:2010, неофициально известный как Fortran 2008,
был утвержден в сентябре 2010 года [3]. Как и Fortran 95, это незначительное обновление,
включает разъяснения и поправки к Fortran 2003, но также вносит несколько новых
возможностей. Эти возможности включают в себя:






подмодули - заменили ISO / IEC TR 19767:2005;
Coarray Fortran - синтаксис для параллельных вычислений;
DO CONCURRENT конструкцию для циклов без взаимозависимостей;
атрибут CONTIGUOUS;
BLOCK конструкцию;
рекурсивные динамические компоненты производных типов.
Окончательный проект международного стандарта (Final Draft international Standard FDIS) приводится в документе N1830 [4]. Важным дополнением к Fortran 2008 является
ISO Technical Specification (TS) 29113 по дальнейшему взаимодействию в Fortran с языком
C [5] [6], который был представлен ISO в мае 2012 на утверждение. Спецификация
добавляет поддержку доступа к дескриптору массива с языка C и позволяет не обращать
внимания на тип и ранг аргументов.
2. Особенности и возможности современного Фортрана
Возможности и преимущества Фортрана берут свое происхождение из области
применения этого языка (наука, бизнес-логика и высокоскоростные параллельные
вычисления). В общем современный фортран хорошо подготовлен для сложных
математических вычислений:












встроенная поддержка операций с многомерными массивами как целое, так и с
выборками
операции с комплексными числами и числами повышенной точности
большое количество встроенных функций с автоматическим выбором точности и
типа (такие функции очень хорошо оптимизируются)
индексы массивов могут быть любые целые числа (отрицательные тоже)
очень хорошая поддержка операций чтения / записи (форматированного,
асинхронного и др.)
специальный синтаксис для автоматического распараллеливания вычислений с
помощью coarrays
стандартная (быстрая) передача переменных по ссылке (by reference) в качестве
параметров в функциях и подпрограммах
лучше (в общем) оптимизация кода, что положительно влияет на быстродействие
программ и более оптимизированы математические вычисления
порядок математических операций определены абсолютно точно и также
контролируется скобками
нечувствительность к регистру позволяет избегать ошибок при неправильном
записи "Константа" и "переменные"
в Фортране все слова языка ключевые, но не зарезервированы, что придает
некоторое дополнительное пространство выбора названий переменных
принцип "один оператор на строку кода" в общем добавляет стабильности
программам
Фортран позволяет воспользоваться очень большим количеством имеющегося
совместного и проверенного кода разнообразных общих математических библиотек, а
также специализированного кода из всех областей науки и техники

общие математические библиотеки как коммерческие (NAG, MKL, IMSL) так и с
публичными лицензиями (все в netlib.org, TOMS алгоритмы, ATLAS, BLAS,
LAPACK, ScaLAPACK, SLATEC и др.).
Фортран также очень низкий уровень вхождения для начинающих


интуитивно простa в использовании, небагатосливнa, стандартизованa язык
(грамматика и синтаксис современного Фортрана приближенные к английскому
языку и математических формул)
много общих операций организовано на высшем уровне, чем это сделано в C или C
+ +, и это дает возможность писать короче и понятнее код






строки символов в современном Фортране это объекты первого класса и операции
со строками символов чрезвычайно простыми и понятными
операции ввода / вывода простые и организованы преимущественно как
инструкции а не как процедуры или функции
использование модулей и интерфейсов позволяет лучшую диагностику на этапе
компиляции
меньшие потребности в использовании указателей в коде на Фортране делают код
безопаснее
очень мало "исключений из правил" или непредсказуемого поведения
компиляторов согласно стандарту
в среднем лучше диагностика от компиляторов, поэтому начинающий получает
больше подсказок
Основные возможности объектно-ориентированного программирования добавили в
Fortran 90 стандарт. Починаючи з стандарту Fortran 2003, він отримав повний набір
можливостей, що дозволяють класифікувати його як об'єктно-орієнтовану мову
програмування: інкапсуляцію та модульність; успадкування; прив'язані до типів
процедури; поліморфізм; вказівники на процедури; абстрактні типи даних.
3. Компілятори
Існує величезна кількість компіляторів мови фортран, однак в наступному списку подані
тільки основні, широковідомі компілятори, та такі, що розвиваються:














GNU gfortran
Intel ifort
Absoft Fortran
Lahey Fortran
g95
Portland PGI fortran
NAG f95
Silverfrost FTN95 для Windows
Oracle f90 (раніше входив в Sun Studio)
MS/Compaq/Dec FORTRAN
IBM XL Fortran
Open64 Fortran
Open Watcom fortran
PathScale Fortran Compiler
Всі названі компілятори значно відрізняються між собою рівнем підтримки сучасних
стандартів фортрану. Деякі з них зупинилися на Fortran 90, чи Fortran 95, а деякі
завершують імплементацію нововведень останніх стандартів Fortran 2003/2008 (GNU
gfortran, INTEL ifort, PGI pgfortran). Більшість з цих компіляторів є комерційними, однак
GNU gfortran, g95 та Open64 випускаються під публічними відкритими ліцензіями.
4. Бібліотеки
Існує величезна кількість спеціалізованого наукового та інженерного коду на фортрані.
Дуже широко розвинутими є напрямки математичних бібліотек та спеціалізовані
алгоритми з чисельних методів [7]. Однак більшу частину такого коду почали розробляти
ще до затвердження стандарту Fortran 90 і тому він часто містить в собі всі недоліки
попередніх стандартів (фіксований код, нестандартні розширення, погану
структурованість, незрозумілі назви змінних, статичне виділення пам'яті та інше). Дуже
мало бібліотек тих часів переписувалось згідно з новими стандартами. Додавати такий код
в сучасні проекти не є проблемою, але проблеми часто виникають, коли в коді цих
бібліотек необхідно дещо змінити. В фортрані майже [8] відсутні бібліотеки з
узагальненими алгоритмами для роботи з різноманітними типами даних. Також немає
достатньої кількості зразкового коду, що використовує об'єктно-орієнтовану модель та
роботу з узагальненими типами даних. Звичайно це пояснюється низькою потребою в
такому коді в тих галузях, де використовується фортран. З стандартом 2003-2008 однак
значно покращилась сумісність та можливість взаємодії бібліотек та програм на C та
Fortran. Тому на даний час можна безпосередньо писати звичайний інтерфейс для
використання потрібних бібліотек, що написані на C. Це використовується наприклад в
FGSL [9] - інтерфейсі до GNU Scientific Library. В деяких випадках можна згенерувати
такий інтерфейс автоматично [10].
5. Критика
Всю критику можна поділити на кілька видів

Критика, пов'язана з незнанням сучасних стандартів фортрану
Дуже часто фортран критикують спеціалісти, котрі стикалися з ним кілька десятків
років назад, тобто щонайбільше з стандартом Fortran 77. Їх уявлення про фортран
зводиться до того, що це код у фіксованому форматі з скороченими (чи
обрізаними) іменами змінних, з неявною типізацією, статичним виділенням пам'яті
та надзвичайно перевантаженим використанням оператора GOTO. Незважаючи на те,
що такий код дійсно підтримується майже всіма компіляторами, в сучасному
фортрані він є архаїзмом і більше не використовується в нових проектах.

Критика та суперечки щодо того, яка мова програмування (точніше компілятор)
дає більш оптимізований по швидкодії код
Внаслідок довготривалого розвитку компіляторів та орієнтації мови на чисельне
математичне програмування дуже небагато мов чи точніше компіляторів можуть
позмагатися в якості оптимізації з компіляторами фортрану. Тому дана дискусія
зводиться переважно до суперечки: C чи Fortran - що швидше. Дехто звичайно
додає що і C++ з використанням шаблонів та метапрограмування може позмагатися
у швидкодії з фортраном (однак вони забувають згадати про те багатоповерхове
пекло повідомлень компілятора про помилку в коді що використовує шаблони). В
загальному швидкодія Фортрану та коду на C повинна бути однакова, однак досить
часто компілятору все-таки вдається краще оптимізувати програми на фортрані.
Також код на фортрані в середньому компактніший порівняно з C.

Критика пов'язана з неправильною інтерпретацією області застосування
Оскільки фортран - це мова з достатньо вузькою нішею застосування, то це часто
використовується критиками при порівнянні її з іншими мовами широкого
профілю такими як C чи C++. Однак фортран не є мовою для системного чи
низькорівневого програмування.

Критика (справедлива) про недоліки мови Фортран та компіляторів
o В фортрані насправді немає бібліотек з універсальними алгоритмами для
роботи з складними структурами даних на кшалт STL чи Boost в C++
o Існує все ще недостатня підтримка основними компіляторами останнього
стандарту
o Узагальнене програмування для похідних типів хоча і є в стандарті, але на
практиці реалізація виявляється складною
o Компілятори фортрану в загальному не є ABI -сумісними (англ. Application
Binary Interface) тобто на рівні двійкового коду, а це ускладнює поширення
готових бібліотек на фортрані
o
o
В фортрані немає звичного вбудованого механізму обробки винятків, як в
інших мовах і тому неможливо реагувати програмно на виняткові ситуації.
Існує підтримка винятків для IEEE арифметики з рухомою комою та для
READ і WRITE інструкцій.
В загальному, ієрархічна модель простору імен (по аналогії до namespace в
C++) - в фортрані відсутня. Зазвичай перший рівень простору імен
забезпечується в фортрані модулями з певним рівнем видимості для змінних
(вживаючи відповідні private чи public інструкції для певних змінних).
Ієрархію можна симулювати декларуванням похідних типів, що в свою
чергу містять наступні типи, однак такий спосіб створює певні незручності.
Стандартно ж проблема якось вирішується контролем видимості змінних
кожного модуля за допомогою оголошення тільки певних змінних як public
або ж із вживанням use module_name, only: some_variable. Популярним
також є безпосереднє додавання префіксів для кожної змінної в певному
модулі, чи створення нового модуля zz_module_name в котрому роблять
перейменування всіх видимих змінних: use module_name, x=>zz_x.
6. Приклади
Наступна програма ілюструє динамічне виділення пам'яті та операції з масивами;
необхідно відзначити відсутність явних циклів та математичні операції з масивами як
ціле. Цей приклад обчислює середнє арифметичне з даних котрі вводяться інтерактивно
program average ! обчислення середнього арифметичного для заданих чисел !
якщо немає вводу, повертаємо нуль ! така поведінка вибрана для спрощення
коду implicit none real , dimension ( : ) , allocatable :: points
integer :: number_of_points real :: 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 ! Обчислити середнє if
( number_of_points > 0 ) average_points = sum ( points ) /
number_of_points ! Зараз середнє для додатніх чи від'ємних чисел if (
count ( points > 0 . ) > 0 ) then positive_average = sum (
points, points > 0 . ) / count ( points > 0 . ) end if if (
count ( points < 0 . ) > 0 ) then negative_average = sum (
points, points < 0 . ) / count ( points < 0 . ) end if
deallocate ( points ) ! вивести результат в терміналі write ( * ,
'(a,g12.4)' ) 'Average = ' , average_points write ( * , '(a,g12.4)' )
'Average of positive points = ' , positive_average write ( * ,
'(a,g12.4)' ) 'Average of negative points = ' , negative_average end
program average
7. Юмор
Впродовж багатьох років існування та розвитку фортрану у розробників стали
поширеними саркастичні жарти та специфічний фолькльор щодо фортрану. Нижче зібрані
деякі зразки.









Відомий експерт проф. Едсгер Дейкстра сказав [11] : "Фортран страждає від дитячої
хвороби - на даний час вже існує майже 20 років і є безнадійно неадекватний для
розробки будь-якої комп'ютерної програми, котра вам спаде на думку сьогодні: він
занадто незграбний, занадто ризикований і обходиться занадто дорого у
використанні". А також: "У старі добрі часи фізики відтворювали експерименти
інших фізиків, просто щоб бути впевненими. Сьогодні вони вчепилися за фортран,
тому що вони можуть просто поділитися один з одним програмами, включно з
усіма помилками в коді".
Знавць Unix i BSD, Дон Сілей, ( (Англ.) Donn Seeley) написав [12] роздуми на тему:
"Як не писати на фортрані будь-якою мовою програмування". Як наслідок, набув
значного поширення вислів "ви можете програмувати на фортрані,
використовуючи будь-яку мову".
Кен Томпсон ( (Англ.) Ken Thompson) в "Reflections on Trusting Trust" сказав:
"фортран вибирають з тієї самої причини, по якій є популярними змагання з бігу з
зв'язаними ногами".
В Sun FORTRAN Reference Manual стверджувалось: "систематичний поділ слів
прогалинами став загальною звичкою близько десятого століття нашої ери і це
тривало приблизно до 1957 року, коли в FORTRAN відмовилися від цієї практики".
Алан Перліс : "FORTRAN - не квітка, а бур'ян: витривалий, іноді цвіте, але
виростає в кожному комп'ютері".
Unix програма fortune видає таку "мудрість": "комп'ютер без COBOL та FORTRAN
- це як шматочок шоколаду без кетчупу та гірчиці"
Під час засідання комітету по затвердженню стандарту FORTRAN 77 була внесена
технічна пропозиція під назвою "Літера О розглядається як небезпечна". В ньому
містилось пояснення, що оскільки літера О подібна до цифри 0, то необхідно
заборонити вживання літери О в наступному стандарті в іменах змінних та
видалити її з дозволених символів. Це допоможе уникати помилок, а також
сприятиме кращій структуризації програм (роблячи неможливим використання
горезвісного GO TO). Небезпечну інструкцію FORMAT теж буде нейтралізовано.
Відзначалося, що це "може зробити деякі наявні програми неробочими", але
більшість з них " ймовірно, були несумісними з стандартом так чи інакше ще
раніше."
В "FORTRAN manual for Xerox computers" був такий абзац: "Основною метою
інструкції DATA є іменування констант: замість посилання кожного разу на pi як
+3.141592653589793 змінній pі може бути надане це значення і використовуватись
замість числової форми постійно. Це також спрощує модифікацію програми у тому
випадку, коли значення pi раптом зміниться".
FORTRAN - це не мова програмування. Це спосіб перетворити мейнфрейм, що
коштує багато мільйонів, в програмований науковий калькулятор за 50$.
См.. также

photran - Інтегроване середовище розробки для мови Fortran на основі відкритої
IDE Eclipse [13]
Примечания
1. McCracken, Daniel D. "Preface", A Guide to FORTRAN IV Programming. - New York :
Wiley, 1965. ISBN 0-471-58281-6.
2. Fortran Working Group (WG5) - www.nag.co.uk/sc22wg5/. Цей документ також
можна завантажити як PDF file чи gzip ped PostScript file, FTP.nag.co.uk
3. N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information
technology - Programming languages - Fortran - Part 1: Base language
ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1836.pdf PDF ( 101 KiB)
4. N1830, Information technology - Programming languages - Fortran - Part 1: Base
language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdf PDF ( 7.9 MiB)
5. ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=45136
6. Draft of the Technical Specification (TS) 29113 ftp://ftp.nag.co.uk/sc22wg5/N1901N1950/N1917.pdf PDF ( 312 kiB)
7. Список чисельних бібліотек на фортрані (англ.)
8. FLIBS - A collection of Fortran modules - flibs.sourceforge.net
9. FGSL: A Fortran interface to the GNU Scientific Library www.lrz.de/services/software/mathematik/gsl/link2
10. Fortran 95 GTK+ Interface Modules
11. Prof. Dr. Edsger W.Dijkstra, - www.cs.virginia.edu/~evans/cs655S00/readings/ewd498.html англ. Як ми подаємо правду, що є болючою? 18 June 1975
12. Donn Seeley, How Not to Write Fortran in Any Language queue.acm.org/detail.cfm?id=1039535
13. Photran - An Integrated Development Environment and Refactoring Tool for Fortran www.eclipse.org/photran/
Литература

Metcalf, M.; Reid, J.; Cohen, M. (2011) (англ.), Modern Fortran Explained books.google.ua/books?id=MmOIFEgsDLwC, Numerical Mathematics and Scientific
Computation (4 вид.), Oxford University Press, pp. 512, ISBN 9780199601417 ,
http://books.google.ua/books?id=MmOIFEgsDLwC books.google.ua/books?id=MmOIFEgsDLwC

Clerman, Norman S.; Spector, Walter (2011) (англ.), Modern Fortran: Style and Usage books.google.ua/books?id=5Qj2DieTHsYC (1 вид.), Cambridge University Press, pp.
352, ISBN 9780521730525 , http://books.google.ua/books?id=5Qj2DieTHsYC books.google.ua/books?id=5Qj2DieTHsYC

Markus, Arjen (2012) (англ.), Modern Fortran in Practice books.google.ua/books?id=UXcPuQAACAAJ (1 вид.), Cambridge University Press, pp.
272, ISBN 9781107603479 , http://books.google.ua/books?id=UXcPuQAACAAJ books.google.ua/books?id=UXcPuQAACAAJ

Chapman, Stephen J. (2007) (англ.), Fortran 95/2003 for Scientists and Engineers books.google.ua/books?id=YZIISgAACAAJ (3 вид.), McGraw-Hill, pp. 974, ISBN
9780073191577 , http://books.google.ua/books?id=YZIISgAACAAJ books.google.ua/books?id=YZIISgAACAAJ

Adams, Jeanne C.; Brainerd, Walter S.; Hendrickson, Richard A.; Maine, Richard E.;
Martin, Jeanne T. (2008) (англ.), The Fortran 2003 Handbook: The Complete Syntax,
Features and Procedures - books.google.ua/books?id=40UkLNQuAeoC (1 вид.),
Springer, pp. 712, ISBN 9781846283789 ,
http://books.google.ua/books?id=40UkLNQuAeoC books.google.ua/books?id=40UkLNQuAeoC

Chivers, Ian; Sleightholme, Jane (2012) (англ.), Introduction to Programming With
Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77 books.google.ua/books?id=FWAGULJjZQUC (2 вид.), Springer, pp. 619, ISBN
9780857292322 , http://books.google.ua/books?id=FWAGULJjZQUC books.google.ua/books?id=FWAGULJjZQUC

Немнюгин, Сергей; Стесик, Ольга (2004) (рос.), Современный Фортран.
Самоучитель (1 вид.), BHV, pp. 496, ISBN 5941573022

Бартеньев, О. В. (2005) (рос.), Современный Фортран (1 вид.), Диалог-МИФИ, pp.
560, ISBN 5864041130

Горелик, А. М. (2006) (рос.), Программирование на современном Фортране (1
вид.), Финансы и статистика, pp. 352, ISBN 527903066Х

Рыжиков, Ю. И. (2009) (рос.), Современный Фортран. Учебник (1 вид.), КоронаПринт, pp. 288, ISBN 579310304Х
http://nado.znate.ru
Download