Мова програмування Fortran

Автор работы: Пользователь скрыл имя, 28 Декабря 2012 в 05:41, реферат

Краткое описание

Фортран (Fortran) (раніше FORTRAN — скорочення від «The IBM Mathematical Formula Translating System», тобто «Система трансляції математичних формул IBM») — це імперативна мова програмування загального призначення, яка особливо підходить для інтенсивних чисельних та наукових обчислень. Розроблена корпорацією IBM в 1950-х роках в університетському містечку на півдні Сан-Хосе, штат Каліфорнія для потреб наукових та інженерних проектів.

Прикрепленные файлы: 1 файл

Fortran.docx

— 51.05 Кб (Скачать документ)

Важливим доповненням  до 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 та ін.)

Фортран також має дуже низький рівень входження для  початківців:

  • інтуїтивно простa в використанні, небагатослівнa, стандартизованa мова (граматика і синтаксис сучасного фортрану наближені до англійської мови та математичних формул)
  • багато загальних операцій організовано на вищому рівні, ніж це зроблено в 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$.

Информация о работе Мова програмування Fortran