GNU Fortran
![]() | |
Тип | компілятор[1] |
---|---|
Розробник | Проект GNU |
Стабільний випуск | 9.1 (3 травня 2019; 5 років тому (2019-05-03)[2]) |
Операційна система | багатоплатформний, на операційному та апаратному рівнях, основна ОС Linux, понад 30 апаратних архітектур[3]. |
Мова програмування | C |
Ліцензія | GNU General Public License, version 2.0 or laterd[4] |
Репозиторій | gcc.gnu.org/wiki/GFortranSource |
Вебсайт | gcc.gnu.org/fortran/ |
GNU Fortran або GFortran — це назва вільного оптимізувального компілятора від розробників спільноти проекту GNU для мови Fortran, що входить в набір компіля́торів GNU Compiler Collection (GCC). Компілятор GFortran став логічним (але незалежним) наступником відомого компілятора G77, розробка та підтримка якого були зупинені перед виходом версії GCC 4.0 i підтримує більшість розширень мови Фортран, котрі підтримував компілятор G77 (починаючи від FORTRAN 66, FORTRAN 77 і до Fortran 90)[5], а також має майже повноцінну і завершену підтримку стандартів Fortran 95 та Fortran 2003[6], частково Fortran 2008[7] та подальших технічних специфікацій до стандарту. Розробка GFortran відбувається спільнотою синхронно з іншими компіляторами GCC для великої кількості операційних систем та архітектур. Вперше експериментальна пробна версія GFortran ввійшла в версію GCC 4.0.x, однак тільки починаючи з версії 4.1 розробники рекомендували користувачам компілятор як стабільний і готовий до використання. Дистрибутиви GNU/Linux продовжували ще досить тривалий час надавати пакунки з компіляторами g77 та GFortran паралельно, рекомендуючи тільки не використовувати для одного проекту обидва одночасно[8]. GFortran в свою чергу почав свій розвиток в січні 2003 року як форк проекту компілятора під назвою G95, котрий сам бере початок з 2000 року завдяки намаганням написати компілятор, що підтримує стандарт Fortran 95 (ISO/IEC 1539:1997). Основною причиною форку були непорозуміння з розробником та адміністратором проекту Ендрю Ват (Andrew Vaught), котрий вирішив обмежити інших розробників у доступі на внесення змін до системи контролю версій CVS проекту. Серед інших причин брунькування проекту були названі бажання додати та розробляти джерельний код в сховищі GCC (а не окремо), бажання використовувати та розвивати можливості вже наявної кодової бази синтаксичного аналізатора проекту GCC, ввести більш гнучку і зрозумілу політику додавання змін в сховище проекту, бажання очистити і удосконалити код згідно рекомендацій GNU Coding Standard та ширше використання DejaGnu для набору внутрішніх тестів[9]. Компілятор GNU Fortran дуже активно розвивається, і хоча багато вже зроблено і завершено, попереду ще чимало роботи щодо виправлення помилок та оптимізації згенерованих інструкцій, особливо для коду, що використовує парадигму ООП[10]
Історія
Після появи і публікації стандарту Fortran 95 (ISO/IEC 1539:1997) склалася неприємна багаторічна ситуація внаслідок відсутності вільного чи безкоштовного компілятора для мови програмування фортран з підтримкою останнього стандарту, оскільки незважаючи на відносну популярність (на той час) мови в академічному та науковому середовищі, задовольнити потребу могли тільки комерційні компілятори, що для навчальних закладів не завжди було можливо, зважаючи на високу ціну таких компіляторів, та кількість необхідних ліцензій, а наявний компілятор g77 підтримував тільки щонайбільше елементи стандарту Fortran 90. Тому появу проекту G95 в березні 2000 році за ініціативи від Ендрю Ват (Andrew Vaught)[11] та FSF, щодо розробки відкритого та вільного компілятора для мови стандарту Fortran 95 під GPL ліцензією та з використанням кодової бази GCC дуже прихильно зустріли[12]. Доволі швидко, після дворічної успішної суспільної розробки, компілятор g95 здобув широку популярність. Однак наприкінці 2002 року виникли деякі непорозуміння між розробниками щодо темпів і напрямку розробки і Ендрю Ват вирішив стати самостійним і єдиним розробником G95, тому після згаданого форку в 2003 році виник проект GNU Fortran у вигляді експериментальної версії 4.0.X як елемент набору компіляторів GNU (номери версій було синхронізовано з версією GCC). Починаючи з того часу шляхи та кодова база двох проектів GFortran та G95 розійшлися[13], хоча Ендрю також продовжував активно розвивати та виправляти помилки в G95 компіляторі аж до 2010 року включно[14]
Наступні стабільні випуски компілятора GFortran відбувалися зажди синхронно з виходом нової стабільної версії GCC: 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5, 5.1, 5.2, 5.3., 6.1 ітд
Версія 5.3, що вийшла в грудні 2015 року, має хоча експериментальну, але майже завершену підтримку розпаралелювання програм за допомогою комасивів з 2008 стандарту та з додаткової технічної специфікації ISO/IEC NP TS18508.
27 квітня 2016 року вийшла версія 6.1, в якій значні зусилля зроблено над виправленням помилок та продовжено удосконалення елементів і нововведень наступного стандарту Fortran 2015.
22 серпня 2016 року вийшла версія 6.2, в якій в основному виправляли помилки та регресії попередньої версії.
В версії 6.3 від 21 грудня 2016 року декларується повна підтримка субмодулів з Fortran 2008, додано також підтримку типів подій з Fortran 2015, поліпшили рядки символів змінної довжини (deferred-length character) з Fortran 2003, оновлено OpenMP and OpenACC, оптимізували код matmul
для простих випадків та додали кілька нових інформаційних повідомлень компілятора.[15]
У версії gfortran 7.1 від 2 травня 2017 року додано підтримку розширень fortran (через додаткові параметри компілятора -fdec-structure, -fdec-intrinsic-ints, -fdec-math, -fdec) для сумісності з джерельними текстами, що використовують давні версії стандартів а також різноманітні розширення мови від виробників компіляторів. Зокрема додано підтримку DEC STRUCTURE та UNION; підтримку вбудованих цілочислових функцій з префіксами B/I/J/K такі як BABS, JIAND…; математичних функцій COTAN, TAND, ASIND… Крім того, удосконалено генерацію коду для випадку циклів з кроком 1 чи -1 та додано можливість перехоплення циклів з переповненням лічильника (до HUGE(i), параметр під час етапу компіляції -fcheck=do) та типову ініціалізацію змінних похідних типів (-finit-derived). Декларується майже повна підтримка OpenMP 4.5 (крім structure element mapping). Додано повну підтримку визначених користувачем операцій читання/запису для похідних типів (UDTIO). Покращено підтримку комасивів похідних типів з динамічними (allocatable) компонентами та вказівниками. Додано неконстантні стоп-коди та коди помилок для інструкцій stop, error stop (Fortran 2015), похідні типи з динамічними компонентами рекурсивного типу, присвоєння для поліморфних змінних. Покращено підтримку субмодулів та діагностику поліморфних результатів в чистих функціях. В комасивах додано нововведення Fortan 2015 — підтримку невдалих відображень (failed images).
У версії 8.1 оновлено версію бібліотеки libfortran до 5. Додано параметризовані похідні типи,- одне з найважливіших оновлень з фортрану 2003; збільшено можливу розмірність масивів до 15 згідно з стандартом Fortran 2008; появилась можливість використовувати вбудовані трансформаційні функції в виразах ініціалізації; додано кілька нових параметрів компілятора. Компілятор тепер типово пробує змінювати порядок вкладених циклів оголошених з допомогою FORALL та DO CONCURRENT, якщо це вигідно з точки зору часу виконання програми, така поведінка контролюється параметром -ffrontend-loop-interchange.
Версія 9.1 додала підтримку асинхронних операцій введення/виведення для деяких платформ, якщо програму збирати разом з бібліотекою pthreads. Узгоджено поведінку деяких вбудованих функцій (MAX і MIN більше не повертають певне значення, якщо один з аргументів є NaN). Реалізовано функції FINDLOC, IS_CONTIGUOUS, аргумент BACK для MINLOC і MAXLOC, Додано новий параметр командного рядка -fdec-include для сумісності з старим кодом. Поліпшено взаємодію з мовою С (дескриптори С і вихідний файл ISO_Fortran_binding.h, а також додано нову директиву BUILTIN для взаємодії з бібліотекою GNU C).
Архітектури
Компілятор GFortran працює щонайменше на таких апаратних архітектурах[3]
- x86-linux, x86_64-linux
- Windows (x86, cygwin and mingw; amd64-mingw)
- MacOS X, Intel and PowerPC (powerpc-darwin and i386-darwin)
- x86-freebsd, amd64-freebsd, x86-openbsd
- IA64-linux, IA64-hpux
- sparc-solaris, i386-solaris
- alpha-linux, Tru64
- powerpc-aix
- mips-irix, mips-linux
- hppa-linux, hppa-hpux
- s390-linux
- powerpc-linux
- sh4-linux
- sparc-linux
Підтримка стандартів мови Фортран
GFortran підтримує повністю стандарти Fortran 77 (!X3J3/90.4, ISO 1539:1980), Fortran 90 (ISO/IEC 1539:1991), Fortran 95 (ISO/IEC 1539-1:1997), більшість нововведень стандарту Fortran 2003 (ISO/IEC JTC1/SC22/WG5 N1601)[16][17], та багато нововведень з стандарту Fortran 2008 (ISO/IEC 1539-1:2010), а також додаткові технічні специфікації (напр. ISO/IEC TS 29113:2012 чи ISO/IEC NP TS 18508)[6][7][16][18][19][20]
Див. також
G95
Примітки
- ↑ а б http://directory.fsf.org/wiki/Gfortran
- ↑ GCC 9 Release Series [Архівовано 8 травня 2019 у Wayback Machine.](англ.)
- ↑ а б GCC Wiki, gfortran is known to work on... Архів оригіналу за 19 грудня 2013. Процитовано 12 лютого 2016.
- ↑ A Bibliographic Scan of Digital Scholarly Communication Infrastructure — Educopia Institute, 2020.d:Track:Q2470288d:Track:Q30289432
- ↑ Discussion of incompatibilities between g77 and gfortran [Архівовано 3 березня 2016 у Wayback Machine.](англ.)
- ↑ а б Chart of Fortran 2003 Features supported by GNU Fortran [Архівовано 12 серпня 2013 у Wayback Machine.](англ.)
- ↑ а б Chart of Fortran 2008 Features supported by GNU Fortran [Архівовано 9 серпня 2013 у Wayback Machine.](англ.)
- ↑ Debian: GfortranTransition, Transitioning from g77 to gfortran. Архів оригіналу за 15 лютого 2016. Процитовано 12 лютого 2016.
- ↑ Email Archive: g95-develop (read-only) Email From: Steven Bosscher, Announcing fork, 2003-01-05 07:28
- ↑ як приклад: Shahid Alam, International Journal of Software Engineering & Applications (IJSEA), Vol.5, No.3, May 2014, IS FORTRAN STILL RELEVANT? COMPARING FORTRAN WITH JAVA AND C++
- ↑ Andy Vaught on g95 development. Архів оригіналу за 8 липня 2012. Процитовано 12 лютого 2016.
- ↑ From: Toon Moene, Subject: GNU Fortran 95 project started. Date: 2000/03/18 [Архівовано 8 липня 2012 у Archive.is] March 2000 (usenet announcement)(англ.)
- ↑ The other GCC-based Fortran compiler. Архів оригіналу за 3 березня 2016. Процитовано 12 лютого 2016.
- ↑ g95 archive, 2010. Архів оригіналу за 5 лютого 2016. Процитовано 12 лютого 2016.
- ↑ What's new in gfortran? [Архівовано 15 лютого 2016 у Wayback Machine.](англ.)
- ↑ а б Fortran 2003 Features in GNU Fortran. Архів оригіналу за 5 березня 2016. Процитовано 12 лютого 2016.
- ↑ Compiler support for the Fortran 2003 standard [Архівовано 21 грудня 2019 у Wayback Machine.] ACM SIGPLAN Fortran Forum archive Volume 26 Issue 1, April 2007 Pages 7 — 9
- ↑ TS 29113: Technical Specification on Further Interoperability of Fortran with C. Архів оригіналу за 11 березня 2016. Процитовано 12 лютого 2016.
- ↑ Coarray* support in gfortran as specified in the Fortran 2008 standard. Архів оригіналу за 9 березня 2016. Процитовано 12 лютого 2016.
- ↑ (Fortran Forum PDF, always delayed by a few months) (PDF). Архів оригіналу (PDF) за 16 лютого 2016. Процитовано 12 лютого 2016.
Цю статтю треба вікіфікувати для відповідності стандартам якості Вікіпедії. Будь ласка, допоможіть додаванням доречних внутрішніх посилань або вдосконаленням розмітки статті. (лютий 2016) |
|