Fortran
| Парадигма: | декілька: структурна, імперативна (процедурна, об’єктно-орієнтована), узагальнена |
|---|---|
| Дата появи: | 1957 |
| Творці: | Джон Бекус |
| Розробник: | Джон Бекус & IBM |
| Система типізації: | сильна, статична, маніфест |
| Основні реалізації: | Absoft, Cray, GFortran, G95, IBM, Intel, Lahey/Fujitsu, Open Watcom, Pathscale, PGI, Silverfrost, Oracle, XL Fortran, Visual Fortran, та інші |
| Під впливом від: | Speedcoding |
| Вплинула на: | ALGOL 58, BASIC, C, PL/I, PACT I, MUMPS, Ratfor |
| Звичайні розширення файлів: | .f, .for, .f90, .f95 |
Фортран (Fortran) (раніше FORTRAN — скорочення від «The IBM Mathematical Formula Translating System», тобто «Система трансляції математичних формул IBM») — це імперативна мова програмування загального призначення, яка особливо підходить для інтенсивних чисельних та наукових обчислень. Розроблена корпорацією IBM в 1950-х роках в університетському містечку на півдні Сан-Хосе, штат Каліфорнія для потреб наукових та інженерних проектів. Досить швидко Fortran став домінувати в цій галузі програмування, і ось вже як понад півстоліття знаходиться в постійному вжитку в області чисельного прогнозу погоди, аналізу методом скінченних елементів, обчислювальної гідродинаміки, обчислювальної фізики та хімії. Це одна з найбільш популярних мов в області високопродуктивних обчислень, а також використовується для тестування швидкодії найпотужніших у світі суперкомп'ютерів.
Фортран як мова розвивався стабільно і навіть консервативно. Кожен наступний стандарт був створений в результаті тривалої дискусії між виробниками компіляторів та зацікавленими експертами. Завдяки цьому, кожна з версій, що розвивалася, зазвичай додавала тільки розширення мови, одночасно зберігаючи при цьому сумісність з попередніми версіями (однак були і винятки). Версія Fortran 77 додала підтримку для обробки символьних даних; операції з масивами і модульне програмування з'явилися в Fortran 90; функційне програмування в Fortran 95, об'єктно-орієнтоване програмування та узагальнене програмування в Fortran 2003. І нарешті узагальнене паралельне програмування з допомогою co-arrays, що використовує архітектурно-незалежний та близький для фортрану синтаксис для паралельної декомпозиції даних та виконання інструкцій, було стандартизовано в Fortran 2008.
Зміст |
Історія розвитку [ред.]
FORTRAN [ред.]
Особливістю мови Fortran є вже те, що з розвитком вона змінила навіть свою назву, відображаючи той факт, що до версії Fortran 90 всі ключові слова повинні були бути написані великими літерами. Це змінилось в Fortran 90 і починаючи з цієї версії мову FORTRAN офіційно стали називати Fortran.
В кінці 1953 року Джон В. Бекус вніс пропозицію своєму начальству в 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 символів (стовпчиків). Не підтримувалась рекурсія та підпрограми.
FORTRAN II [ред.]
IBM, FORTRAN II з'явився в 1958 році. Основними поліпшеннями були підтримка процедурного програмування, тобто підпрограми і функцій з параметрами, що передавалися за посиланням (by reference). Для підпрограм надали можливість доступу до глобальних змінних.
IBM також розробила FORTRAN III в 1958 році, що дозволяв писати на асемблері в функціях, однак цю версію так і не випустили на ринок в якості готового продукту.
Для машини IBM 1401 було створено інноваційний на той час 63-прохідний компілятор Фортрану, який поміщався всього у 8-кілобайт. Він зберігав код програми в пам'яті та одночасно поступово транслював її на машинну мову - тобто це був перший в світі інтерпретатор мови програмування. Наступний інтерпретатор (мови Pascal) появився тільки через 2 десятиліття.
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] .
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 символів а також надано можливість запису коментарів в коді.
FORTRAN 77 [ред.]
Після оприлюднення стандарту FORTRAN 66, виробники компіляторів продовжували вносити на прохання користувачів ряд розширень для мови, що змусило ANSI в 1969 році розпочати роботу з перегляду прийнятого в 1966 році стандарту. Остаточні проекти наступного стандарту були завершені в 1977 році, і офіційне затвердження стандарту FORTRAN 77 відбулося в квітні 1978 року. Новий стандарт FORTRAN 77 додавав ряд істотних особливостей для вирішення багатьох недоліків FORTRAN 66: блоки IF ... END IF, з опціональними ELSE ... ELSE IF, що значно полегшували структурне програмування; розширення DO циклів з параметричними виразами, негативним інкрементом та нульовим циклом; OPEN, CLOSE, та INQUIRE для роботи з файлами а також прямий доступ до файлів; IMPLICIT вираз та символьний тип даних CHARACTER з великою кількістю функцій для нього; PARAMETER для декларування констант; SAVE для постійних в пам'яті локальних змінних; загальні імена для вбудованих функцій та ін. У цій версії стандарту деякі інструкції були вилучені або оголошені застарілими (тобто такими, що будуть вилучені в наступних версіях мови Fortran).
Fortran 90 [ред.]
Зі значним запізненням, як наступник FORTRAN 77, відомий зараз як Fortran 90 (а до цього, Fortran 8X) був випущений в якості стандарту ISO 1991 і стандарту ANSI в 1992 році. Це був досить масштабний перегляд попереднього стандарту, котрий також враховував нові тенденції та розвиток інших мов. Було додано безліч нових функцій, щоб відобразити значні зміни в практиці програмування:
- нефіксована форма запису джерельного коду а також запис ключових слів малими літерами;
- ідентифікатори змінних довжиною до 31 символу;
- вбудовані однорядкові коментарі;
- операції над масивами як ціле, та над вибірками масивів, що значно спрощувало математичні та інженерні обчислення;
- рекурсивні процедури;
- модулі для групування пов'язаних процедур і даних, щоб зробити їх доступними для інших частин програми, включаючи можливість обмежувати доступ тільки до певних частин модуля;
- значно покращився механізм передачі аргументів, що дозволяло перевіряти інтерфейси функцій та процедур під час компіляції;
- передбачено створення інтерфейсів користувачем для загальних процедур;
- перевантаження операторів;
- похідні/абстрактні типи даних; новий тип синтаксису для декларації типу даних та інших атрибутів змінних та констант;
- динамічне виділення пам'яті за допомогою
ALLOCATATE/ DEALLOCATEтаALLOCATABLEатрибутів; POINTERдля полегшення створення та обробки динамічних структур даних;- структуровані циклічні конструкції з
END DOдля завершення циклу, іCYCLEтаEXITдля контролю та виходу з ітерацій циклу; SELECT ... CASEдля багатоходового вибору;- специфікації точності обчислень під контролем користувача;
- нові та вдосконалені вбудовані процедури.
На відміну від попередніх версій, з версії стандарту Фортран 90 не було видалено жодного елементу, однак значну їх кількість оголосили застарілими.
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).
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. Це дозволило визначення і реалізацію модулів, які можуть описуватись частинами в окремих блоках програми, що дозволяє покращити архітектуру великих бібліотек, полегшує публікацію інтерфейсів, а також запобігає каскадній компіляції.
Fortran 2008 [ред.]
Останній стандарт ISO / IEC 1539-1:2010, неофіційно відомий як Fortran 2008, було затверджено у вересні 2010 року [3]. Як і Fortran 95, це незначне оновлення, включає роз'яснення та поправки до Fortran 2003, але також вносить декілька нових можливостей. Ці можливості включають в себе:
SUBMODULES- замінили 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 і дозволяє не звертати уваги на тип і ранг аргументів.
Особливості та можливості сучасного фортрану [ред.]
Можливості та переваги фортрану беруть своє походження з області застосування цієї мови (наука, бізнес-логіка та високошвидкісні, паралельні обчислення). В загальному сучасний фортран добре підготовлений для складних математичних обчислень:
- вбудована підтримка операцій з багатомірними масивами як ціле, так і з вибірками
- операції з комплексними числами та числами підвищеної точності
- велика кількість вбудованих функцій з автоматичним вибором точності та типу(такі функції дуже добре оптимізуються)
- індекси масивів можуть бути будь-які цілі числа (негативні також)
- дуже добра підтримка операцій читання/запису (форматованого, асинхронного та ін)
- спеціальний синтаксис для автоматичного розпаралелювання обчислень за допомогою coarrays
- стандартна (найшвидша) передача змінних за посиланням (by reference) як параметрів в функціях та підпрограмах
- краща (в загальному) оптимізація коду, що позитивно впливає на швидкодію програм та більш оптимізовані математичні обчислення
- порядок математичних операцій визначено абсолютно точно і також контролюється дужками
- нечутливість до регістру дозволяє уникати багів при неправильному записі "КоНстаНт" та "ЗміНниХ"
- в фортрані всі слова мови є ключові, але не зарезервовані, що додає деякий додатковий простір вибору назв змінних
- принцип "один оператор на рядок коду" в загальному додає стабільності програмам
Фортран дозволяє скористатись дуже великою кількістю наявного сумісного і перевіреного коду різноманітних загальних математичних бібліотек, а також спеціалізованого коду з усіх галузей науки та техніки
- загальні математичні бібліотеки як комерційні (NAG, MKL, IMSL) так і з публічними ліцензіями (всі в netlib.org, TOMS алгоритми, ATLAS, BLAS, LAPACK, ScaLAPACK, SLATEC та ін.)
Фортран також має дуже низький рівень входження для початківців:
- інтуїтивно проста у використанні, небагатослівна, стандартизована мова (граматика і синтаксис сучасного фортрану наближені до англійської мови та математичних формул)
- багато загальних операцій організовано на вищому рівні, ніж це зроблено в C чи C++, і це дає можливість писати коротший і зрозуміліший код
- рядки символів в сучасному фортрані це об'єкти першого класу і операції з рядками символів є надзвичайно простими і зрозумілими
- операції введення/виведення простіші і організовані переважно як інструкції а не як процедури чи функції
- використання модулів та інтерфейсів дозволяє кращу діагностику на етапі компіляції
- менші потреби в використанні вказівників в коді на фортрані роблять код безпечнішим
- дуже мало "винятків з правил" чи непередбачуваної поведінки компіляторів відповідно до стандарту
- в середньому краща діагностика від компіляторів, тому початківець отримує більше підказок
Основні можливості об'єктно-орієнтованого програмування додали ще в Fortran 90 стандарт. Починаючи з стандарту Fortran 2003, він отримав повний набір можливостей, що дозволяють класифікувати його як об'єктно-орієнтовану мову програмування: інкапсуляцію та модульність; успадкування; прив'язані до типів процедури; поліморфізм; вказівники на процедури; абстрактні типи даних.
Компілятори [ред.]
Існує величезна кількість компіляторів мови фортран, однак в наступному списку подані тільки основні, широковідомі компілятори, та такі, що розвиваються:
- 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 випускаються під публічними відкритими ліцензіями.
Бібліотеки [ред.]
Існує величезна кількість спеціалізованого наукового та інженерного коду на фортрані. Дуже широко розвинутими є напрямки математичних бібліотек та спеціалізовані алгоритми з чисельних методів[7]. Однак більшу частину такого коду почали розробляти ще до затвердження стандарту Fortran 90 і тому він часто містить в собі всі недоліки попередніх стандартів (фіксований код, нестандартні розширення, погану структурованість, незрозумілі назви змінних, статичне виділення пам'яті та інше). Дуже мало бібліотек тих часів переписувалось згідно з новими стандартами. Додавати такий код в сучасні проекти не є проблемою, але проблеми часто виникають, коли в коді цих бібліотек необхідно дещо змінити. В фортрані майже[8] відсутні бібліотеки з узагальненими алгоритмами для роботи з різноманітними типами даних. Також немає достатньої кількості зразкового коду, що використовує об'єктно-орієнтовану модель та роботу з узагальненими типами даних. Звичайно це пояснюється низькою потребою в такому коді в тих галузях, де використовується фортран. З стандартом 2003-2008 однак значно покращилась сумісність та можливість взаємодії бібліотек та програм на C та Fortran. Тому на даний час можна безпосередньо писати звичайний інтерфейс для використання потрібних бібліотек, що написані на C. Це використовується наприклад в FGSL[9] - інтерфейсі до GNU Scientific Library. В деяких випадках можна згенерувати такий інтерфейс автоматично[10].
Критика [ред.]
Всю критику можна поділити на кілька видів
- Критика, пов'язана з незнанням сучасних стандартів фортрану
- Дуже часто фортран критикують спеціалісти, котрі стикалися з ним кілька десятків років назад, тобто щонайбільше з стандартом Fortran 77. Їх уявлення про фортран зводиться до того, що це код у фіксованому форматі з скороченими (чи обрізаними) іменами змінних, з неявною типізацією, статичним виділенням пам'яті та надзвичайно перевантаженим використанням оператора
GOTO. Незважаючи на те, що такий код дійсно підтримується майже всіма компіляторами, в сучасному фортрані він є архаїзмом і більше не використовується в нових проектах.
- Критика та суперечки щодо того, яка мова програмування (точніше компілятор) дає більш оптимізований по швидкодії код
- Внаслідок довготривалого розвитку компіляторів та орієнтації мови на чисельне математичне програмування дуже небагато мов чи точніше компіляторів можуть позмагатися в якості оптимізації з компіляторами фортрану. Тому дана дискусія зводиться переважно до суперечки: C чи Fortran - що швидше. Дехто звичайно додає що і C++ з використанням шаблонів та метапрограмування може позмагатися у швидкодії з фортраном (однак вони забувають згадати про те багатоповерхове пекло повідомлень компілятора про помилку в коді що використовує шаблони). В загальному швидкодія Фортрану та коду на C повинна бути однакова, однак досить часто компілятору все-таки вдається краще оптимізувати програми на фортрані. Також код на фортрані в середньому компактніший порівняно з C.
- Критика пов'язана з неправильною інтерпретацією області застосування
- Оскільки фортран - це мова з достатньо вузькою нішею застосування, то це часто використовується критиками при порівнянні її з іншими мовами широкого профілю такими як C чи C++. Однак фортран не є мовою для системного чи низькорівневого програмування.
- Критика (справедлива) про недоліки мови Фортран та компіляторів
- В фортрані насправді немає бібліотек з універсальними алгоритмами для роботи з складними структурами даних на кшалт STL чи Boost в C++
- Існує все ще недостатня підтримка основними компіляторами останнього стандарту
- Узагальнене програмування для похідних типів хоча і є в стандарті, але на практиці реалізація виявляється складною
- Компілятори фортрану в загальному не є ABI-сумісними (англ. Application Binary Interface) тобто на рівні двійкового коду, а це ускладнює поширення готових бібліотек на фортрані
- В фортрані немає звичного вбудованого механізму обробки винятків, як в інших мовах і тому неможливо реагувати програмно на виняткові ситуації. Існує підтримка винятків для IEEE арифметики з рухомою комою та для
READіWRITEінструкцій. - В загальному, ієрархічна модель простору імен (по аналогії до
namespaceв C++) — в фортрані відсутня. Зазвичай перший рівень простору імен забезпечується в фортрані модулями з певним рівнем видимості для змінних (вживаючи відповідніprivateчиpublicінструкції для певних змінних). Ієрархію можна симулювати декларуванням похідних типів, що в свою чергу містять наступні типи, однак такий спосіб створює певні незручності. Стандартно ж проблема якось вирішується контролем видимості змінних кожного модуля за допомогою оголошення тільки певних змінних якpublicабо ж із вживаннямuse module_name, only: some_variable. Популярним також є безпосереднє додавання префіксів для кожної змінної в певному модулі, чи створення нового модуляzz_module_nameв котрому роблять перейменування всіх видимих змінних:use module_name, x=>zz_x.
Приклади [ред.]
Наступна програма ілюструє динамічне виділення пам'яті та операції з масивами; необхідно відзначити відсутність явних циклів та математичні операції з масивами як ціле. Цей приклад обчислює середнє арифметичне з даних котрі вводяться інтерактивно
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
Гумор [ред.]
Впродовж багатьох років існування та розвитку фортрану у розробників стали поширеними саркастичні жарти та специфічний фолькльор щодо фортрану. Нижче зібрані деякі зразки.
- Відомий експерт проф. Едсгер Дейкстра сказав[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 змінній pi може бути надане це значення і використовуватись замість числової форми постійно. Це також спрощує модифікацію програми у тому випадку, коли значення pi раптом зміниться". - FORTRAN — це не мова програмування. Це спосіб перетворити мейнфрейм, що коштує багато мільйонів, в програмований науковий калькулятор за 50$.
Див. також [ред.]
- photran — Інтегроване середовище розробки для мови Fortran на основі відкритої IDE Eclipse[13]
Примітки [ред.]
- ↑ McCracken, Daniel D. (1965). «Preface». A Guide to FORTRAN IV Programming. New York: Wiley. с. v. ISBN 0-471-58281-6.
- ↑ Fortran Working Group (WG5). Цей документ також можна завантажити як PDF file чи
gzipped PostScript file, FTP.nag.co.uk - ↑ 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.pdfPDF ( 101 KiB)
- ↑ N1830, Information technology — Programming languages — Fortran — Part 1: Base language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdfPDF ( 7.9 MiB)
- ↑ ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C
- ↑ Draft of the Technical Specification (TS) 29113 ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdfPDF ( 312 kiB)
- ↑ Список чисельних бібліотек на фортрані (англ.)
- ↑ FLIBS - A collection of Fortran modules
- ↑ FGSL: A Fortran interface to the GNU Scientific Library
- ↑ Fortran 95 GTK+ Interface Modules
- ↑ Prof. Dr. Edsger W.Dijkstra, англ. Як ми подаємо правду, що є болючою? 18 June 1975
- ↑ Donn Seeley, How Not to Write Fortran in Any Language
- ↑ Photran - An Integrated Development Environment and Refactoring Tool for Fortran
Література [ред.]
- Metcalf, M.; Reid, J.; Cohen, M. (2011) (англ. ), Modern Fortran Explained, Numerical Mathematics and Scientific Computation (4 вид.), Oxford University Press, pp. 512, ISBN 9780199601417, http://books.google.ua/books?id=MmOIFEgsDLwC
- Clerman, Norman S.; Spector, Walter (2011) (англ. ), Modern Fortran: Style and Usage (1 вид.), Cambridge University Press, pp. 352, ISBN 9780521730525, http://books.google.ua/books?id=5Qj2DieTHsYC
- Markus, Arjen (2012) (англ. ), Modern Fortran in Practice (1 вид.), Cambridge University Press, pp. 272, ISBN 9781107603479, http://books.google.ua/books?id=UXcPuQAACAAJ
- Chapman, Stephen J. (2007) (англ. ), Fortran 95/2003 for Scientists and Engineers (3 вид.), McGraw-Hill, pp. 974, ISBN 9780073191577, http://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 (1 вид.), Springer, pp. 712, ISBN 9781846283789, http://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 (2 вид.), Springer, pp. 619, ISBN 9780857292322, http://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Х
Посилання [ред.]
- Фортран-Wiki (англ.)
- Збірка рецептів та порад для написання програм на сучасному Фортрані (англ.)
- Зразки коду на Фортрані від rosettacode.org (англ.)
- Колекція програм та бібліотек на фортрані для чисельного аналізу (англ.)
- Корисні додатки, бібліотеки та програми від Алана Міллера на Фортрані (англ.)
- Зібрання корисних посилань на ресурси по Фортрану та компіляторам (англ.)
- Зібрання корисних посилань на ресурси по Фортрану: Michel Olagnon's Fortran 90 List (англ.)
- Структуроване зібрання інформації про комерційні компілятори на polyhedron.com (англ.)
- Різноманітна інформація по Фортрану та ресурсам на fortranplus.co.uk (англ.)
- Fortran 90 Reference Card (англ.)