GNU Fortran

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
GNU Fortran
GNU Compiler Collection logo.svg
Тип компілятор
Розробник Проект GNU
Стабільний випуск 8.1 (2 травня 2018; 444 дні тому[1])
Репозиторій gcc.gnu.org/viewcvs/gcc/
Операційна система багатоплатформний, на операційному та апаратному рівнях, основна ОС Linux, понад 30 апаратних архітектур[2].
Ліцензія GNU General Public License (версія 3 чи наступна), Вільне програмне забезпечення
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)[4], а також має майже повноцінну і завершену підтримку стандартів Fortran 95 та Fortran 2003[5], частково Fortran 2008[6] та подальших технічних специфікацій до стандарту. Розробка GFortran відбувається спільнотою синхронно з іншими компіляторами GCC для великої кількості операційних систем та архітектур. Вперше експериментальна пробна версія GFortran ввійшла в версію GCC 4.0.x, однак тільки починаючи з версії 4.1 розробники рекомендували користувачам компілятор як стабільний і готовий до використання. Дистрибутиви GNU/Linux продовжували ще досить тривалий час надавати пакунки з компіляторами g77 та GFortran паралельно, рекомендуючи тільки не використовувати для одного проекту обидва одночасно[7]. GFortran в свою чергу почав свій розвиток в січні 2003 року як форк проекту компілятора під назвою G95, котрий сам бере початок з 2000 року завдяки намаганням написати компілятор, що підтримує стандарт Fortran 95 (ISO/IEC 1539:1997). Основною причиною форку були непорозуміння з розробником та адміністратором проекту Ендрю Ват (Andrew Vaught), котрий вирішив обмежити інших розробників у доступі на внесення змін до системи контролю версій CVS проекту. Серед інших причин брунькування проекту були названі бажання додати та розробляти джерельний код в сховищі GCC (а не окремо), бажання використовувати та розвивати можливості вже наявної кодової бази синтаксичного аналізатора проекту GCC, ввести більш гнучку і зрозумілу політику додавання змін в сховище проекту, бажання очистити і удосконалити код згідно рекомендацій GNU Coding Standard та ширше використання DejaGnu для набору внутрішніх тестів[8]. Компілятор GNU Fortran дуже активно розвивається, і хоча багато вже зроблено і завершено, попереду ще чимало роботи щодо виправлення помилок та оптимізації згенерованих інструкцій, особливо для коду, що використовує парадигму ООП[9]

Історія[ред. | ред. код]

Після появи і публікації стандарту Fortran 95 (ISO/IEC 1539:1997) склалася неприємна багаторічна ситуація внаслідок відсутності вільного чи безкоштовного компілятора для мови програмування фортран з підтримкою останнього стандарту, оскільки незважаючи на відносну популярність (на той час) мови в академічному та науковому середовищі, задовольнити потребу могли тільки комерційні компілятори, що для навчальних закладів не завжди було можливо, зважаючи на високу ціну таких компіляторів, та кількість необхідних ліцензій, а наявний компілятор g77 підтримував тільки щонайбільше елементи стандарту Fortran 90. Тому появу проекту G95 в березні 2000 році за ініціативи від Ендрю Ват (Andrew Vaught)[10] та FSF, щодо розробки відкритого та вільного компілятора для мови стандарту Fortran 95 під GPL ліцензією та з використанням кодової бази GCC дуже прихильно зустріли[11]. Доволі швидко, після дворічної успішної суспільної розробки, компілятор g95 здобув широку популярність. Однак в кінці 2002 року виникли деякі непорозуміння між розробниками щодо темпів і напрямку розробки і Ендрю Ват вирішив стати самостійним і єдиним розробником G95, тому після згаданого форку в 2003 році виник проект GNU Fortran у вигляді експериментальної версії 4.0.X як елемент набору компіляторів GNU (номери версій було синхронізовано з версією GCC). Починаючи з того часу шляхи та кодова база двох проектів GFortran та G95 розійшлися[12], хоча Ендрю також продовжував активно розвивати та виправляти помилки в G95 компіляторі аж до 2010 року включно[13]

Наступні стабільні випуски компілятора 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 для простих випадків та додали кілька нових інформаційних повідомлень компілятора. [14]

У версії 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.

Архітектури[ред. | ред. код]

Компілятор GFortran працює щонайменше на таких апаратних архітектурах[2]

  • 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)[15][16], та багато нововведень з стандарту Fortran 2008 (ISO/IEC 1539-1:2010), а також додаткові технічні специфікації (напр. ISO/IEC TS 29113:2012 чи ISO/IEC NP TS 18508)[17][5][6][18][19][20]

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

G95

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