Фортран

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Fortran)
Перейти до: навігація, пошук
Fortran
Fortran acs cover.jpeg
Парадигма: декілька: структурна, імперативна (процедурна, об’єктно-орієнтована), узагальнена, паралельна
Дата появи: 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 став домінувати в цій галузі програмування, і ось вже як понад півстоліття знаходиться в постійному вжитку в області чисельного прогнозу погоди[1], аналізу методом скінченних елементів, обчислювальної гідродинаміки, обчислювальної фізики та хімії. Це одна з найбільш популярних мов в області високопродуктивних обчислень, а також використовується для тестування швидкодії найпотужніших у світі суперкомп'ютерів[2][3].

Фортран як мова розвивався стабільно і навіть консервативно. Кожен наступний стандарт був створений в результаті тривалої дискусії між виробниками компіляторів та зацікавленими експертами. Завдяки цьому, кожна з версій, що розвивалася, зазвичай додавала тільки розширення мови, одночасно зберігаючи при цьому сумісність з попередніми версіями (однак були і винятки). Версія 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[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 символів а також надано можливість запису коментарів в коді.

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 символу;
  • вбудовані однорядкові коментарі !;
  • операції над масивами як ціле, та над вибірками масивів, що значно спрощувало математичні та інженерні обчислення, введено поняття масиву без елементів (нульового розміру);
  • рекурсивні recursive процедури (підпрограми та функції);
  • модулі module ... end module для групування пов'язаних процедур і даних, щоб зробити їх доступними для інших частин програми, включаючи можливість обмежувати доступ тільки до певних частин модуля з допомогою private/public;
  • значно покращився механізм передачі аргументів (атрибути optional, intent(in/out/inout)), що дозволяло перевіряти інтерфейси функцій та процедур під час компіляції (атрибут intrinsic); додано також опцію result() для оголошення назви змінної, що повертається функцією;
  • передбачено створення інтерфейсів interface ... end interface користувачем для узагальнених процедур;
  • перевантаження операторів;
  • похідні/абстрактні типи даних type ... end type з оператором вибору компонента %; новий тип синтаксису для декларації типу даних та інших атрибутів змінних: kind (та додатково len для символьного character вбудованого типу), save, та іменованих parameter констант;
  • динамічне виділення пам'яті за допомогою allocate/deallocate та allocatable атрибутів;
  • вказівник pointer та атрибут target для типу, на який вказує вказівник,— для полегшення створення та операцій з динамічними структурами даних;
  • нові оператори порівняння <, <=, ==, /=, >, >=;
  • структуровані циклічні конструкції do i = x,y,z ... end do з end do, а не continue для завершення циклу, cycle та exit для контролю та виходу з ітерацій циклу; цикли do while () ... end do, необмежені цикли у формі do ... end do без лічильника;
  • select case ... end select для багатоходового вибору;
  • sequence інструкцію для контролю запису на фізичний носій об'єктів похідних типів, якщо такі об'єкти знаходяться в equivalence та common інструкціях;
  • конструкцію where () ... elsewhere ... end where для полегшення маніпуляцій з масивами;
  • специфікації точності обчислень під контролем користувача;
  • нові та вдосконалені вбудовані процедури (понад 100 нових функцій та підпрограм!);

На відміну від попередніх версій, з версії стандарту Фортран 90 не було видалено жодного елементу, однак значну їх кількість оголосили застарілими: нецілі лічильники в конструкціях циклів, завершення циклу з допомогою визначеної мітки, спільні continue для вкладених do циклів, арифметичні конструкції if(x) a,b,c, інструкцію pause, assign та ін.

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 можна прочитати на офіційному сайті робочої групи Фортран[5]. Згідно з цією статтею, основні поліпшення для нової версії стандарту включають:

  • покращення для похідних типів - додано параметризовані похідні типи (з допомогою вхідних параметрів типу kind, та len), покращено контроль доступності, поліпшено структури конструкторів та введено явні деструктори з допомогою final, додано зв'язування => модульних процедур до оголошених в похідному типі процедур та операторів (перевантаження та створення нових операторів), додано узагальнені generic ідентифікатори-назви для зв'язаних процедур-методів похідного типу (поліморфних для різних типів вхідних параметрів), додано явні pass та nopass атрибути для керування передачі вказівника на об'єкт в прив'язаних до типу процедур, можливість керувати видимістю (private, public) окремих компонент типу - як видимістю компонент з даними так і видимістю прив'язаних процедур (слід однак мати на увазі, що видимість і доступність типів, компонент типів, об'єктів та змінних в фортрані заснована на модулях/субмодулях, а не на похідних типах, як в багатьох інших ОО-мовах);
  • об'єктно-орієнтоване програмування — розширення типу і успадкування (за допомогою extends) та заборона за потреби переозначення зв'язаних до батьківського типу процедур (ключове слово non_overridable), поліморфізм типів (class, необмежений поліморфний специфікаторclass(*), конструкції select type ... end select, та вбудовані функції same_type_as, extends_type_of), відкладене зв'язування (deffered) та абстрактні типи (abstract), динамічне виділення пам'яті для типів та прив'язаних до типу процедур;
  • покращення маніпуляцій з даними — динамічне виділення пам'яті для компонентів типів, автоматичне виділення пам'яті для динамічних масивів під час присвоєння, перевиділення(перенесення) пам'яті для динамічної змінної (з допомогою підпрограмиmove_alloc), associate ... end associate блок для скороченого іменування довгих виразів, volatile атрибут, явні специфікації типу в конструкторах масивів, удосконалення вказівників pointer, введення вказівників на модульні процедури, вказівників на процедури як компонент похідних типів (procedure pointer components дозволяють реалізувати динамічне зв'язування (ручну динамічну диспетчеризацію) процедур-методів в об'єкті-примірнику похідного типу в часі виконання), розширені вирази для ініціалізації, і покращення вбудованих процедур;
  • внесення концепції вбудованих модулів (intrinsic), а також самі модулі, напр — iso_fortran_env;
  • видимість модульних об'єктів — додано protected для видимості модульних об'єктів, додано можливість перейменовувати (невбудовані) об'єкти і сутності модуля (об'єкти даних, похідні типи, інтерфейсні блоки, процедури, узагальнені ідентифікатори та групи списків імен) в специфікаторі use, додано import твердження для контролю видимості модульних об'єктів в тілі interface ... end interface;
  • операції читання/запису — асинхронна передача в інструкціях читання/запису (asynchronous='yes') та для оголошених змінних, потоковий доступ, визначені користувачем операції для похідних типів, контроль за округленням в специфікації format, іменовані константи для відкритих файлових потоків, flush інструкція для завершення запису з буферів, регуляризація ключових слів та доступ до повідомлень про помилки;
  • визначені користувачем операції читання/запису для похідних типів (англ. User-Defined Derived Type Input/Output або UDTIO), що дозволяють розробнику деталізувати, як похідний тип читається з файла та записується в файл з допомогою вбудованих інструкцій read та write. Технічно це задається зв'язуванням узагальнених та прив'язаних до типу процедур-інструкцій generic :: read(formatted) =>X, generic :: write(formatted)=>Y, generic :: read(unformatted) => X, generic :: write(unformatted) => Y з приватними підпрограмами X та Y з визначеним інтерфейсом X(dtv, unit, iotype, v_list, iostat, iomsg);
  • підтримка IEEE із рухомою комою і обробка винятків (включаючи TR 15580) у вбудованому модулі ieee_arithmetic (нові типи, та нові функції ieee_support_underflow_control, ieee_get_underflow_mode, ieee_set_underflow_mode, та багато ін.);
  • взаємодія з мовою програмування C з допомогою вбудованого модуля iso_c_binding, де оголошені іменовані константи для kind параметрів більшості типів мови C (c_int, c_short, c_long, c_long_long та всі інші цілі типи, c_signed_char, c_size_t, c_float, c_double, c_long_double, c_float_complex, c_double_complex, c_long_double_complex, c_bool, c_char, а також c_null_char, c_backspace, c_form_feed, c_new_line, c_carriage_return, c_horizontal_tab, c_vertical_tab), для вказівників та їх нульових значень (c_ptr, c_funptr, c_null_ptr, c_null_funptr), а також додаткові процедури (c_loc, c_funloc, c_associated, c_f_pointer, c_f_procpointer); додано bind(c) атрибут для модульних змінних та похідних типів, щоб вони могли бути сумісними зі структурами в мові C;
  • підтримка інтернаціоналізації: доступ до ISO 10646 4-байтових символів і вибір десяткового знаку чисел під час форматованого читання/запису (select_char_kind);
  • введення констант в бінарній b'10001', вісімковій o'345', та шістнадцятковій z'1234abcd' системі числення як аргументів до вбудованих функцій (int(),real(),cmplx(),dble());
  • введення квадратних дужок [...] як альтернативу для ініціалізації масивів з допомогою конструктора (/.../);
  • розширена інтеграція з основною операційною системою — доступ до аргументів командного рядка, змінні оточення, та повідомлення про помилки процесора з вбудованого модуля iso_fortran_env (input_unit, output_unit, error_unit, iostat_end, iostat_eor, numeric_storage_size, character_storage_size, file_storage_size), а також додано вбудовані функції command_argument_count, get_command, get_command_argument, get_environment_variable;

Важливим доповненням до Fortran 2003 стала доповідь ISO TR-19767: про розширення модулів в Fortran. Ця доповідь внесла додатковий submodule що в свою чергу дозволяє визначення і реалізацію модулів, які можуть описуватись частинами в окремих блоках програми, і дозволяє покращити архітектуру великих бібліотек, полегшує публікацію інтерфейсів, а також запобігає каскадній компіляції.

Fortran 2008[ред.ред. код]

Останній стандарт ISO / IEC 1539-1:2010, неофіційно відомий як Fortran 2008, було затверджено голосуванням у вересні 2010 року[6]. Як і Fortran 95, це незначне оновлення, включає роз'яснення та поправки до Fortran 2003, але також вносить декілька нових можливостей. Ці можливості включають в себе[7]:

  • submodule — замінили ISO / IEC TR 19767:2005;
  • Coarray Fortran (CAF) — вбудований в мову синтаксис для паралельних обчислень[8];
  • do concurrent конструкцію для розпаралелювання циклів без взаємозалежностей;
  • атрибут contiguous для масивів, які розміщені безперервно цілим куском в оперативній пам'яті та вказівників, котрі на такі масиви вказують і функцію is_contiguous;
  • block конструкцію, всередині якої можна оголошувати нові змінні з локальною межею видимості і котрі можуть бути вкладеними;
  • рекурсивні динамічні компоненти похідних типів;
  • внутрішні вкладені процедури можуть використовуватись як аргументи в інших процедурах
  • доступ до дійсної та уявної частини комплексних чисел в "стилі ООП" з допомогою псевдокоманд %re та %im;
  • створення нової динамічної змінної в allocate (b, mold=a) копіюючи розмірність та тип іншої змінної, але без копіювання значень з допомогою нового специфікатора mold додатково до вже існуючого source; також ці специфікатори дозволяється використовувати для одночасного створення кількох змінних;
  • автоматичне виділення пам'яті змінних під час операції присвоєння, які раніше були задекларовані як allocatable;
  • рекурсивні операції вводу/виводу для будь-яких файлів (на відміну від стандарту 2003, де це дозволялось тільки для внутрішніх файлів)
  • newunit специфікатор для інструкції open, який автоматично виділяє унікальне ціле число-ідентифікатор для операцій читання та запису;
  • новий універсальний дескриптор формату g0.x
  • ряд нових вбудованих функцій - математичних (acosh, asinh, atanh, bessel_j0, bessel_j1, bessel_jn, bessel_y0, bessel_y1, bessel_yn, erf, erc, erf_scaled, gamma, log_gamma, hypot, norm2), маніпуляції з бітами (bge, bgt, ble, blt, dshiftl, dshiftr, iall, iany, iparity, leadz, popcnt, poppar, trailz, maskl, masr, merge_bits, shiftl, shiftr), для паралельної роботи з комасивами (atomic_define, atomic_ref, image_index, lcobound, num_images, this_image, ucobound ), для взаємодії з операційною системою та запуску її команд execute_command_line, для пошуку в масивах findloc, для отримання розміру об'єктів в пам'яті storage_size,
  • розширення модуля iso_fortran_env з допомогою додаткових процедур compiler_version та compiler_options , які дають за потреби інформацію про компілятор та його опції під час фази компіляції
  • в модулі iso_c_binding додано c_sizeof - відповідає оператору sizeof в мові C


Остаточний проект міжнародного стандарту (Final Draft international Standard — FDIS) наводиться в документі N1830[9], та технічні доповнення N1903[10] та N1958[11]. Важливим розширенням до Fortran 2008 стало ISO Technical Specification (TS) 29113 по подальшій взаємодії в Fortran з мовою C[12][13], який був представлено ISO в травні 2012 на затвердження. Специфікація додає підтримку доступу до дескриптора масиву з мови C і дозволяє не звертати уваги на тип і ранг аргументів.

Fortran 2015[ред.ред. код]

Продовжується робота над наступним стандартом[14][15]. Вже затверджено й опубліковано 1 грудня 2012 року "ISO/IEC TS 29113:2012" Technical Specification (TS29113) по подальшій взаємодії в Fortran з мовою C[16], та затверджено й опубліковано 19 листопада 2015 року "ISO/IEC TS 18508:2015 Information technology - Additional Parallel Features in Fortran" щодо розпаралелювання за допомогою комасивів (TS18508)[17]. Офіційне оприлюднення стандарту планується на 2018 рік[18]

Особливості та можливості сучасного фортрану[ред.ред. код]

Можливості та переваги фортрану беруть своє походження з області застосування цієї мови (наука, бізнес-логіка та високошвидкісні, паралельні обчислення). В загальному сучасний фортран добре підготовлений для складних математичних обчислень і також має відносно низький рівень входження для початківців:

  • проста у використанні, стандартизована мова (граматика і синтаксис сучасного фортрану наближені до англійської мови та математичних формул)
  • багато загальних операцій організовано на вищому рівні, ніж це зроблено в C чи C++, і це дає можливість писати коротший і зрозуміліший код
  • рядки символів в сучасному фортрані це об'єкти першого класу і операції з рядками символів є надзвичайно простими і зрозумілими
  • операції введення/виведення простіші і організовані переважно як інструкції а не як процедури чи функції
  • використання модулів та інтерфейсів дозволяє кращу діагностику на етапі компіляції
  • менші потреби в використанні вказівників в коді та високорівневий доступ до пам'яті на фортрані роблять код безпечнішим
  • вказівники в фортрані впроваджені таким чином, що компілятору надзвичайно просто ідентифікувати як їх самих, так і неправильне їх використання
  • мало «винятків з правил» чи непередбачуваної поведінки компіляторів відповідно до стандарту
  • в середньому добра діагностика від компіляторів, тому початківець отримує багато підказок
  • операції з комплексними числами та числами підвищеної точності
  • велика кількість вбудованих функцій з автоматичним вибором точності та типу(такі функції дуже добре оптимізуються)
  • вбудована підтримка операцій з багатомірними масивами як ціле, так і з вибірками (окремо, і в інструкціях, напр. вибору select case)
  • підтримка одного рівня т.зв. вкладених функцій (англ. nested function) за допомогою contains
  • індекси масивів можуть бути будь-які цілі числа (від'ємні також)
  • дуже добра підтримка операцій читання/запису (форматованого, асинхронного та ін)
  • спеціальний синтаксис для розпаралелювання обчислень за допомогою комасивів Coarray Fortran
  • стандартна (найшвидша) передача змінних за посиланням (by reference) як параметрів в функціях та підпрограмах
  • краща (в загальному) оптимізація коду, що позитивно впливає на швидкодію програм та більш оптимізовані математичні обчислення
  • порядок математичних операцій визначено абсолютно точно і також контролюється дужками
  • нечутливість до регістру дозволяє уникати помилок при неправильному записі «КоНстаНт» та «ЗміНниХ»
  • в фортрані всі слова мови є ключові, але не зарезервовані, що додає деякий додатковий простір вибору назв змінних
  • принцип «одна інструкція на рядок коду» в загальному додає стабільності програмам (однак можна використовувати крапку з комою для запису двох і більше інструкцій в рядку)
  • Перевантаження стандартних операторів та розширення набору операторів за допомогою створення нових в сучасному фортрані дозволяє писати програми максимально наближеними до складних математичних формул[19][20][21][22][23]

Основні можливості об'єктно-орієнтованого програмування додали ще в Фортран 90 стандарт. Починаючи з стандарту Фортран 2003, мова отримала повний набір можливостей, що дозволяють класифікувати фортран як об'єктно-орієнтовану мову програмування: інкапсуляцію та модульність; успадкування; прив'язані до типів процедури; поліморфізм; вказівники на процедури; абстрактні типи даних. Також сучасний стандарт фортрану в деякій мірі дозволяє використовувати функційну парадигму програмування з допомогою pure та elemental функцій, рекурсії та функцій вищого порядку (як аргумент, результат та з одним рівнем вкладених функцій),- однак без замикань (closures), анонімних функцій (лямбда-функцій) та часткового застосування.

Компілятори[ред.ред. код]

Існує величезна кількість компіляторів мови фортран, однак в наступному списку подані тільки основні, широковідомі компілятори, та такі, що розвиваються:

Всі названі компілятори значно відрізняються між собою рівнем підтримки сучасних стандартів фортрану. Деякі з них зупинилися на Fortran 90, чи Fortran 95, а деякі завершують імплементацію нововведень останніх стандартів Fortran 2003/2008[25][26] (GNU gfortran[27][28][29], INTEL ifort, PGI pgfortran, NAG Fortran Compiler[30]). Більшість з цих компіляторів є комерційними, однак GNU gfortran, g95 та Open64 випускаються під публічними відкритими ліцензіями. В листопаді 2015 року NVIDIA, Національна Адміністрація ядерної безпеки США (NNSA) та інші три національні лабораторії оголосили про початок розробки нового відкритого компілятора Фортран для суперкомп'ютерів на базі LLVM архітектури[31]

Бібліотеки[ред.ред. код]

Фортран дозволяє скористатись дуже великою кількістю наявного сумісного і перевіреного коду різноманітних математичних бібліотек, а також спеціалізованого коду з усіх галузей науки та техніки[32]. Дуже широко розвинутими є напрямки математичних бібліотек та спеціалізовані алгоритми з чисельних методів[33]. Найбільш відомі загальні математичні бібліотеки для роботи в Fortran це комерційні NAG, MKL, IMSL, та з публічними ліцензіями: netlib.org[34], TOMS алгоритми[35], BLAS[36], LAPACK[37], ScaLAPACK[38], SLATEC[39], GSL разом з FGSL[40], SPHEREPACK[41], FISHPACK90[42], FFTPACK5[43], CERNLIB[44] та ін.

Однак існують і певні проблеми: більшу частину коду на фортрані почали розробляти ще до затвердження стандарту Fortran 90 і тому він часто містить в собі всі недоліки попередніх стандартів (фіксований код, нестандартні розширення, погану структурованість, незрозумілі назви змінних, статичне виділення пам'яті, проблеми з багатонитевою безпекою та інше). Дуже мало бібліотек тих часів переписувалось згідно з новими стандартами. Додавати такий код в сучасні проекти не є проблемою, але проблеми часто виникають, коли в коді цих бібліотек необхідно дещо змінити.

В фортрані майже[45] відсутні бібліотеки з узагальненими алгоритмами для роботи з різноманітними типами даних. Також немає достатньої кількості зразкового коду, що використовує об'єктно-орієнтовану модель, шаблони проектування[46] та роботу з узагальненими типами даних. Звичайно це пояснюється низькою потребою в такому коді в тих галузях, де використовується фортран.

З стандартом 2003–2008 однак значно покращилась сумісність та можливість взаємодії бібліотек та програм на C та Fortran. Тому на даний час можна безпосередньо писати звичайний інтерфейс для використання потрібних бібліотек, що написані на C. Це використовується наприклад в FGSL[40] — інтерфейсі до GNU Scientific Library. В деяких випадках можна згенерувати такий інтерфейс автоматично[47]. Багато фірм-розробників компіляторів додають також інші нестандартні додаткові функції: в gfortran - у вигляді GNU extension функцій, або ж як в intel ifort у вигляді додаткового модуля-бібліотеки "intel portability library", котра підключається з допомогою інструкції USE IFLPORT[48].

Для програмування графічних інтерфейсів на фортрані також можна виділити кілька відомих бібліотек, що дозволяють відносно швидку реалізацію ГІК, чи візуалізувати дані у вигляді різноманітних графіків: gtk-fortran[47], QuickWin[49], Winteracter[50], DISLIN[51], GINO[52], PLPLOT[53], GrWin[54], f90gl[55], JAPI[56], PGPLOT[57], g2[58], MathGL[59], f03gl[60], gnufor2[61], gnuplotfortran[62]

Критика[ред.ред. код]

Всю критику можна поділити на кілька видів

  • Критика, пов'язана з незнанням сучасних стандартів фортрану
Дуже часто фортран критикують спеціалісти, котрі стикалися з ним кілька десятків років назад, тобто щонайбільше з стандартом Fortran 77. Їх уявлення про фортран зводиться до того, що це код у фіксованому форматі з скороченими (чи обрізаними) іменами змінних, з неявною типізацією, статичним виділенням пам'яті та надзвичайно перевантаженим використанням інструкції безумовного переходу goto. Незважаючи на те, що такий код дійсно підтримується майже всіма компіляторами, в сучасному фортрані він є архаїзмом і більше не використовується в нових проектах.
  • Критика та суперечки щодо того, яка мова програмування (точніше компілятор) дає більш оптимізований по швидкодії код
Внаслідок довготривалого розвитку та орієнтації мови Фортран на чисельне математичне програмування, компілятори фортрану показують дуже високий рівень оптимізації. Тому дана дискусія зводиться переважно до суперечки: C чи Fortran — що швидше. Компілятори для програми на C++ з використанням шаблонів та метапрограмування можуть також позмагатися у швидкодії з фортраном, однак зневадження коду на C++, що використовує такий підхід та супроводження і модифікація є надзвичайно складними і затратними. В загальному ж швидкодія програм написаних на фортрані та на C є приблизно однакова.
  • Критика пов'язана з неправильною інтерпретацією області застосування
Оскільки фортран — це мова з достатньо вузькою нішею застосування, то це часто використовується критиками при порівнянні її з іншими мовами широкого профілю такими як C чи C++. Однак фортран не є мовою для системного чи низькорівневого програмування.
  • Критика (справедлива) про недоліки мови Фортран та компіляторів
    • В фортрані насправді немає бібліотек з універсальними алгоритмами для роботи з складними структурами даних на кшалт STL чи Boost в C++. Всі відомі та широковживані контейнери (дерева, черги, купи, таблиці, стеки, зв'язані списки ітд.) винаходяться щоразу майже[63] заново
    • Існує все ще недостатня підтримка основними компіляторами останнього стандарту[25][26]
    • Узагальнене програмування для похідних типів хоча і є в стандарті, але на практиці реалізація виявляється складною. Шаблони для різних типів, як в C++ відсутні[63]. Відсутність механізму використання шаблонів в фортрані в порівнянні до C++ є одним з основних недоліків в контексті застосовності мови до об'єктно-орієнтованого програмування
    • Компілятори фортрану в загальному не є ABI-сумісними (англ. Application Binary Interface) тобто на рівні двійкового коду, а це ускладнює поширення готових бібліотек на фортрані
    • В фортрані немає звичного вбудованого механізму обробки винятків, як в інших мовах і тому неможливо реагувати програмно на виняткові ситуації. Існує підтримка винятків для IEEE арифметики з рухомою комою та для read і write інструкцій.
    • Дещо обмежене поняття вказівника - наприклад для створення масиву вказівників потрібно використовувати окремий похідний тип з компонентом-вказівником всередині і потім створювати масив таких об'єктів-вказівників
    • Ієрархічна модель простору імен (по аналогії до namespace в C++) — в фортрані відсутня і до Fortran 2008 це створювало незручності для організації ієрархії коду та її компіляції. Зазвичай перший рівень простору імен забезпечувався в фортрані модулями з певним рівнем видимості для змінних (вживаючи відповідні private чи public інструкції для певних змінних) або ж обмежуючи видимість сутностей в модулі з допомогою use module_name, only: some_variable. Популярним також було безпосереднє додавання префіксів для кожної змінної в певному модулі, чи створення нового модуля zz_module_name в котрому робили перейменування всіх видимих змінних: use module_name, x=>zz_x. Ієрархію простору імен можна також симулювати декларуванням похідних типів, котрі в свою чергу містять наступні типи, однак такий спосіб не вирішує повністю проблем розділення видимості (наприклад при розпаралелюванні програми з такими типами). Однак, починаючи з стандарту Fortran 2008, задача локалізації видимості об'єктів та змінних навіть в межах одного модуля вирішується з використанням ієрархії на основі submodule, оскільки інші субмодулі певного модуля типово не мають доступу до об'єктів, які оголошені локально в кожному з цих субмодулів[64]. Субмодуль може мати тільки один предок-модуль та ієрархію предків-субмодулів. Використовуючи видимість та ієрархію за допомогою субмодулів двох окремих модулів можна легко добратись навіть перехресно до об'єктів та сутностей, оголошених в кожному з цих модулів,- це коли субмодуль модуля А може використовувати об'єкт з модуля Б, а субмодуль модуля Б в свою чергу використовує об'єкт модуля А (що без субмодулів явно заборонено і викликає помилку циркулярної взаємозалежності модулів А та Б під час компіляції).
    • Код на фортрані, хоча й в меншій мірі, але як і C чи C++ код, може містити серйозні уразливості з точки зору безпеки, які не завжди виявляють компілятори: переповнення цілочислового буфера, висячі вказівники та ін[65]

Приклади[ред.ред. код]

Програма ілюструє динамічне виділення пам'яті та операції з масивами; необхідно відзначити відсутність явних циклів та математичні операції з масивами як ціле. Цей приклад обчислює середнє арифметичне з даних котрі вводяться інтерактивно

  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

Наступна програма використовує можливості розпаралелювання на сучасному фортрані з допомогою комасивів (використовуються можливості з TS18508[17]).

program hello_world
  implicit none
  character(len=20) :: name[*] ! скалярний комасив, одне name для кожного image
  ! тобто: "name" це локальна змінна а "name[<index>]" надає доступ
  ! до копії цієї змінної в конкретному image; "name[this_image()]" те ж саме, що і "name".

  ! взаємодія з користувачем в image 1; виконання всіх інших проходить без переривання.
  if (this_image() == 1) then
    write(*,'(a)',advance='no') 'enter your name: '
    read(*,'(a)') name
  end if
  ! розсилання інформації в змінній name з image 1 всім іншим відображенням
  call co_broadcast(name,source_image=1)

  ! виведення з усіх відображень виконуються в довільному порядку але кожна інструкція write завершується повністю
  write(*,'(3a,i0)') 'hello ',trim(name),' from image ', this_image()
end program hello_world

Гумор[ред.ред. код]

Впродовж багатьох років існування та розвитку фортрану у розробників стали поширеними саркастичні жарти та специфічний фолькльор щодо фортрану. Нижче зібрані деякі зразки.

  • Відомий експерт проф. Едсгер Дейкстра сказав[66]: «Фортран страждає від дитячої хвороби — на даний час вже існує майже 20 років і є безнадійно неадекватний для розробки будь-якої комп'ютерної програми, котра вам спаде на думку сьогодні: він занадто незграбний, занадто ризикований і обходиться занадто дорого у використанні». А також: «У старі добрі часи фізики відтворювали експерименти інших фізиків, просто щоб бути впевненими. Сьогодні вони вчепилися за фортран, тому що вони можуть просто поділитися один з одним програмами, включно з усіма помилками в коді».
  • Знавець Unix i BSD, Дон Сілей, ((англ.) Donn Seeley) написав[67] роздуми на тему: «Як не писати на фортрані будь-якою мовою програмування». Як наслідок, набув значного поширення вислів «ви можете програмувати на фортрані, використовуючи будь-яку мову».
  • Кен Томпсон ((англ.) Ken Thompson) в «Reflections on Trusting Trust» сказав: «фортран вибирають з тієї самої причини, по якій є популярними змагання з бігу з зв'язаними ногами».
  • В Sun FORTRAN Reference Manual стверджувалось: «систематичний поділ слів прогалинами став загальною звичкою близько десятого століття нашої ери і це тривало приблизно до 1957 року, коли в FORTRAN відмовилися від цієї практики».
  • Алан Перліс: «FORTRAN — не квітка, а бур'ян: витривалий, іноді цвіте, але виростає в кожному комп'ютері»; «ви можете виміряти перспективність програміста, дізнаючись про його ставлення до (дивної) триваючої життєздатності мови FORTRAN»; «хоча китайці повинні обожнювати APL, вони вкладають свої гроші чомусь в FORTRAN»; «протягом багатьох століть навіть древні індіанці різних племен розробили спільну мову жестів для спілкування і пояснення явищ, що представляють певний обопільний інтерес. Програмісти з різних племен (FORTRAN, LISP, Алгол, SNOBOL і т.д.) могли б також навчитись якоїсь однієї мови, яка б не вимагала від них возити за собою шкільну дошку на своїх поні, щоб порозумітися».
  • Стівен Фейнер ((англ.) Steven Feiner): «ви можете сказати, як далеко нам ще потрібно пройти, якщо FORTRAN — це зараз у нас мова для суперкомп'ютерів.»
  • Unix програма fortune видає таку «мудрість»: «комп'ютер без COBOL та FORTRAN — це як шматочок шоколаду без кетчупу та гірчиці»
  • Під час засідання комітету по затвердженню стандарту FORTRAN 77 була внесена технічна пропозиція під назвою «Літера О розглядається як небезпечна». В ньому містилось пояснення, що оскільки літера О подібна до цифри 0, то необхідно заборонити вживання літери О в наступному стандарті в іменах змінних та видалити її з дозволених символів. Це допоможе уникати помилок, а також сприятиме кращій структуризації програм (роблячи неможливим використання горезвісного goto). Небезпечну інструкцію format теж буде нейтралізовано. Відзначалося, що це «може зробити деякі наявні програми неробочими», але більшість з них « ймовірно, були несумісними з стандартом так чи інакше ще раніше.»
  • В «FORTRAN manual for Xerox computers» був такий абзац: «Основною метою інструкції data є іменування констант: замість посилання кожного разу на pi як +3.141592653589793 змінній pi може бути надане це значення і використовуватись замість числової форми постійно. Це також спрощує модифікацію програми у тому випадку, коли значення pi раптом зміниться».
  • FORTRAN — це не мова програмування. Це спосіб перетворити мейнфрейм, що коштує багато мільйонів, в програмований науковий калькулятор за 50$.

Примітки[ред.ред. код]

  1. Наприклад найбільш відомий комплекс програм для моделювання та прогнозу погоди у відкритому доступі: The Weather Research and Forecasting (WRF) Model (National Center for Atmospheric Research, USA)(англ.)
  2. The NAS Parallel Benchmarks (NPB) від NASA
  3. CPU™ 2006
  4. McCracken, Daniel D. (1965). Preface. A Guide to FORTRAN IV Programming. New York: Wiley. с. v. ISBN 0-471-58281-6. 
  5. Fortran Working Group (WG5). Цей документ також можна завантажити як PDF file чи gzipped PostScript file, FTP.nag.co.uk
  6. 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)
  7. John Reid, The new features of Fortran 2008, JKR Associates, UK. May 6, 2009(англ.)
  8. станом на квітень 2016 кілька комерційних компіляторів (Cray, Intel) вже підтримують це нововведення, також створено суспільний проект з відкритим джерельним кодом OpenCoarrays, який забезпечує підтримку двійкового інтерфейсу (ABI) coarray Fortran (CAF) в GFortran
  9. N1830, Information technology — Programming languages — Fortran — Part 1: Base language http://j3-fortran.org/doc/standing/links/007.pdfPDF ( 7.9 MiB)
  10. Technical corrigendum 1
  11. Technical corrigendum 2
  12. ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C
  13. Draft of the Technical Specification (TS) 29113 ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdfPDF ( 312 kiB)
  14. JTC1/SC22/WG5
  15. Doctor Fortran Goes Dutch: Fortran 2015
  16. TS 29113 Further Interoperability of Fortran with C
  17. а б TS18508, Additional Parallel Features in Fortran - ISO чорновик (2013р), N2074, вільнодоступний чорновик з iso.org, (2015р)
  18. Doctor Fortran in "One Door Closes", 21 вересня 2015 року(англ.)
  19. Damian Rouson et al. This Isn't Your Parents' Fortran: Managing C++ Objects with Modern Fortran, Comput. Sci. Eng. 14, 46 (2012)
  20. Damian Rouson, Jim Xia, Xiaofeng Xu, Scientific Software Design: The Object-Oriented Way, Cambridge University Press, 2011, ISBN 9781139498784
  21. Magne Haveraaen et al. High-Performance Design Patterns for Modern Fortran, Scientific Programming, Volume 2015 (2015), див. також 1,2
  22. Ed Akin, Object-Oriented Programming Via Fortran 90/95, Cambridge University Press, 2003, ISBN 9780521524087
  23. Markus A., Metcalf w.M. Modern Fortran in practice, Cambridge University Press 2012, ISBN 9781107017900
  24. раніше The Portland Group, Inc, однак в червні 2013 року, NVIDIA Corporation придбала цю компанію і зараз це окремий підрозділ NVIDIA.
  25. а б Compiler Support for the Fortran 2003 Standard(англ.)
  26. а б Compiler Support for the Fortran 2008 Standard(англ.)
  27. Chart of Fortran 2003 Features supported by GNU Fortran
  28. Chart of Fortran 2008 Features supported by GNU Fortran
  29. Chart of Fortran TS 29113 Features supported by GNU Fortran
  30. What's New in Fortran 2008
  31. NNSA, national labs team with Nvidia to develop open-source Fortran compiler technology(англ.)
  32. нaприклад Computer Physics Communications Program Library - колекція понад 3000 програм журналу Computer Physics Communications з обчислювальної фізики та хімії
  33. Список чисельних бібліотек на фортрані (англ.)
  34. Netlib колекція математичнного ПЗ (більшість з якого написано на фортрані)
  35. Software associated with papers published in the Transactions on Mathematical Software(англ.)
  36. Basic Linear Algebra Subprograms
  37. LAPACK — Linear Algebra PACKage
  38. ScaLAPACK — Scalable Linear Algebra PACKage
  39. SLATEC Common Mathematical Library
  40. а б FGSL: A Fortran interface to the GNU Scientific Library
  41. SPHEREPACK - A Package for Modeling Geophysical Processes
  42. FISHPACK90 - Efficient FORTRAN Subprograms for the Solution of Separable Elliptic Partial Differential Equations
  43. FFTPACK - A Fortran77 library of fast Fourier transforms
  44. CERN Program Library
  45. FLIBS — A collection of Fortran modules
  46. Реалізація популярних шаблонів проектування в Fortran
  47. а б Fortran 95 GTK+ Interface Modules
  48. Portability Library Routines
  49. Intel Fortran QuickWin library Графічна бібліотека поставляється з Intel Visual Fortran (раніше Compaq Visual Fortran) тільки для MS Windows.
  50. Winteracter Winteracter Графічний інтерфейс і засоби візуалізації. Мультиплатформне власницьке ПЗ.
  51. DISLIN закрита графічна бібліотека для відображення даних у вигляді графіків, гістограм, кругових діаграм, 3D-кольорових ділянок, поверхонь, контурів і карт, створена в Max Planck Institute for Solar System Research. Мультиплатформна і для багатьох компіляторів. Безкоштовна для некомерційного використання.
  52. GINO Графічний інтерфейс і засоби візуалізації. Мультиплатформне власницьке ПЗ.
  53. PLPLOT Бібліотека для наукових графіків. Мультиплатформна, вільне програмне забезпечення під ліцензією LGPL.
  54. GrWin Графічна бібліотека для Windows, безкоштовна для некомерційного використання.
  55. f90gl Надає Fortran 90 інтерфейс до OpenGL, GLU і GLUT. Мультиплатформна. Працює з багатьма компіляторами. Ліцензія: суспільне надбання.
  56. JAPI Графічна бібліотека на JAVA і C, що забезпечує доступ до JAVA AWT Toolkit для C, Fortran, Pascal і Basic. Мультиплатформна, вільне програмне забезпечення під ліцензією LGPL.
  57. PGPLOT Графічна бібліотека, мультиплатформна, безкоштовна для некомерційного використання.
  58. g2 graphical library Мультиплатформна графічна бібліотека, вільне програмне забезпечення під ліцензією LGPL.
  59. MathGL Мультиплатформна графічна бібліотека, надає інтерфейс для багатьох мов програмування, в тому числі для Fortran, вільне програмне забезпечення
  60. f03gl Бібліотека забезпечує Fortran 2003 інтерфейс до бібліотеки OpenGL, GLU і GLUT, вільне ПЗ, ліцензія GPL3
  61. gnufor2 являє собою модуль, написаний на мові Fortran 90, надає інтерфейс до Gnuplot ПЗ
  62. gnuplotfortran бібліотека надає також контроль сеансу Gnuplot з коду на Fortran 95.
  63. а б див. однак: BlockIt and PyF95++: Fortran templating and pre-processing(англ.)
  64. Fortran Wiki, Submodules(англ.)
  65. Document: WG 23/N0442, ISO/IEC JTC1/SC22/WG5 N1965, Fortran Annex to TR 24772, Guidance to Avoiding Vulnerabilities in Programming Languages through Language Selection and Use, ISO/IEC JTC1/SC22/WG5(англ.)
  66. Prof. Dr. Edsger W.Dijkstra, англ. Як ми подаємо правду, що є болючою? 18 June 1975
  67. Donn Seeley, How Not to Write Fortran in Any Language

Стандарти мови Fortran[ред.ред. код]

Література[ред.ред. код]

  • Немнюгин, Сергей; Стесик, Ольга (2004). Современный Фортран. Самоучитель (рос. ) (вид. 1). BHV. с. 496. ISBN 5941573022. 
  • Бартеньев, О. В. (2005). Современный Фортран (рос. ) (вид. 1). Диалог-МИФИ. с. 560. ISBN 5864041130. 
  • Горелик, А. М. (2006). Программирование на современном Фортране (рос. ) (вид. 1). Финансы и статистика. с. 352. ISBN 527903066Х Перевірте значення |isbn= (довідка). 
  • Рыжиков, Ю. И. (2009). Современный Фортран. Учебник (рос. ) (вид. 1). Корона-Принт. с. 288. ISBN 579310304Х Перевірте значення |isbn= (довідка). 

Див. також[ред.ред. код]

Посилання[ред.ред. код]



  1. Photran — An Integrated Development Environment and Refactoring Tool for Fortran
  2. Lutz D. Schmadel, International Astronomical Union Dictionary of Minor Planet Names. — 5-th Edition. — Berlin Heidelberg New-York : Springer-Verlag, 2003. — 992 с. — ISBN 3-540-00238-3.