GNU Fortran

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з GFortran)
Перейти до навігації Перейти до пошуку
GNU Fortran
Тип компілятор[1]
Розробник Проект GNU
Стабільний випуск 9.1 (3 травня 2019; 4 роки тому (2019-05-03)[2])
Операційна система багатоплатформний, на операційному та апаратному рівнях, основна ОС Linux, понад 30 апаратних архітектур[3].
Мова програмування C
Ліцензія GNU General Public License, version 2.0 or laterd[4]
Репозиторій gcc.gnu.org/viewcvs/gcc/
Вебсайт 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

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

  1. а б http://directory.fsf.org/wiki/Gfortran
  2. GCC 9 Release Series [Архівовано 8 травня 2019 у Wayback Machine.](англ.)
  3. а б GCC Wiki, gfortran is known to work on... Архів оригіналу за 19 грудня 2013. Процитовано 12 лютого 2016.
  4. Free Software Directory
  5. Discussion of incompatibilities between g77 and gfortran [Архівовано 3 березня 2016 у Wayback Machine.](англ.)
  6. а б Chart of Fortran 2003 Features supported by GNU Fortran [Архівовано 12 серпня 2013 у Wayback Machine.](англ.)
  7. а б Chart of Fortran 2008 Features supported by GNU Fortran [Архівовано 9 серпня 2013 у Wayback Machine.](англ.)
  8. Debian: GfortranTransition, Transitioning from g77 to gfortran. Архів оригіналу за 15 лютого 2016. Процитовано 12 лютого 2016.
  9. Email Archive: g95-develop (read-only) Email From: Steven Bosscher, Announcing fork, 2003-01-05 07:28
  10. як приклад: 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++
  11. Andy Vaught on g95 development. Архів оригіналу за 8 липня 2012. Процитовано 12 лютого 2016.
  12. From: Toon Moene, Subject: GNU Fortran 95 project started. Date: 2000/03/18 [Архівовано 8 липня 2012 у Archive.is] March 2000 (usenet announcement)(англ.)
  13. The other GCC-based Fortran compiler. Архів оригіналу за 3 березня 2016. Процитовано 12 лютого 2016.
  14. g95 archive, 2010. Архів оригіналу за 5 лютого 2016. Процитовано 12 лютого 2016.
  15. What's new in gfortran? [Архівовано 15 лютого 2016 у Wayback Machine.](англ.)
  16. а б Fortran 2003 Features in GNU Fortran. Архів оригіналу за 5 березня 2016. Процитовано 12 лютого 2016.
  17. 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
  18. TS 29113: Technical Specification on Further Interoperability of Fortran with C. Архів оригіналу за 11 березня 2016. Процитовано 12 лютого 2016.
  19. Coarray* support in gfortran as specified in the Fortran 2008 standard. Архів оригіналу за 9 березня 2016. Процитовано 12 лютого 2016.
  20. (Fortran Forum PDF, always delayed by a few months) (PDF). Архів оригіналу (PDF) за 16 лютого 2016. Процитовано 12 лютого 2016.