Мова фортеця. Ходячі мерці. Фортран

  • gfortran
    • gfortran 4.5.0
  • Мова програмування

    Фортран (Fortran) – перша реалізована мова програмування високого рівня(після ), правда, з одним невеликим застереженням - для машин, побудованих по класичній схеміфон Неймана. Створено в період з 1954 по 1957 групою програмістів під керівництвом Джона Бекуса (John Backus) в корпорації IBM. За кілька років почалися його комерційні поставки. До цього програмування велося безпосередньо у машинних кодах, або на символічних асемблерах. Назва Fortran є абревіатурою від FORmula TRANslator, тобто перекладач формул.

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

    Більшість таких бібліотек є фактично надбанням людства: вони доступні у вихідних кодах, добре документовані, налагоджені та дуже ефективні. Тому змінювати, а тим більше переписувати їх іншими мовами програмування невигідно, незважаючи на те, що регулярно робляться спроби автоматичного конвертування FORTRAN-коду на сучасні мови програмування.

    Свого роду «візитною карткою» старого Fortran є величезна кількість міток, які використовувалися як в операторах безумовного переходу GOTO, так і в операторах циклів, і в операторах опису форматного вводу/виводу FORMAT. Велика кількість міток та операторів GOTO часто робила програми на Фортрані важкими для розуміння.

    Саме цей негативний досвід став причиною, через яку в ряді сучасних мовпрограмування (наприклад, Java) мітки та пов'язані з ними оператори безумовного переходу взагалі відсутні.

    Однак сучасний Fortran позбавлений надлишку міток за рахунок введення таких операторів, як DO ... END DO, DO WHILE, SELECT CASE. Також до позитивних рис сучасного Fortran варто віднести велику кількість вбудованих операцій з масивами та гнучку підтримкумасивів із незвичайною індексацією.

    Взаємодія з іншими мовами

    Багато систем програмування дозволяють компонувати отримані в результаті трансляції програми на Fortran об'єктні файли з об'єктними файлами, отриманими від компіляторів з інших мов, що дозволяє створювати більш гнучкі та багатофункціональні програми. Для мови Фортран також є велика кількість бібліотек, що містять як підпрограми вирішення класичних обчислювальних завдань (LAPACK, IMSL, BLAS), задач організації розподілених обчислень (MPI, pvm), так і задач побудови графічних інтерфейсів (Quickwin, FORTRAN/TK) або доступу до СУБД (Oracle).

    Спадщина Fortran

    Fortran використовувався понад п'ятдесят років і існує величезна частина, що належить йому і до цього дня. Fortran - основна мова для деяких завдань, що потребують величезних обчислень, таких як моделювання погоди та клімату, гідрогазодинаміка, обчислювальна хімія, квантова хромодинаміка, моделювання динаміки сонячної системи, обчислення орбіт штучних супутниківта багато інших завдань.

    Переносність

    Спочатку переносимість для Fortran була дуже нагальною проблемою, тому що не існувало жодного єдиного стандартуі навіть довідкової інформаціївід IBM. І комп'ютерні фірми змагалися між собою, забезпечуючи несумісність для різних компіляторів. Виправила справу поява стандартів. Стандарт 1966 року встановлював синтаксис та семантику, але продавці продовжували впроваджувати несумісні розширення. Обережні програмісти розуміли, що використання несумісних розширень викликає проблеми переносимості і часто використовували програми на зразок The PFORT Verifier для виявлення несумісних розширень.

    Несумісні розширення були єдиною проблемою. Існувала низка проблем із чисельними обчисленнями. Пізніше була розвинена та впроваджена практично універсальна ідея двійкової арифметикиз плаваючою комою.

    Доступ до виконуваному середовищі(наприклад, до командному рядку, змінним середовища) був дуже скрутним, поки на це не звернули на це увагу в стандарті 2003 року.

    Зараз відносно просто реалізувати програму, що повністю переноситься, на Fortran.

    Елементи синтаксису:

    Коментар до кінця рядка ! або * у першому символі рядка
    Реєстрозалежність Ні
    Регулярний вираз ідентифікатора змінної [_a-zA-Z0-9](0-n)
    Привласнення значення змінної =
    Оголошення змінної type:: variable
    Оголошення змінної із наданням значення type:: variable = value
    Угруповання виразів ()
    Блок do ... end do
    Рівність = або.
    Нерівність /= чи.NE.
    Порівняння == < > <= >= <>або.LT. .GT. .LE. .GE.
    Виклик функції CALL f(a,b...)
    Виклик функції без параметрів CALL f
    Послідовність кінець рядка
    Якщо то if condition then ... end if
    Якщо - то - інакше if condition then ... else ... endif
    Цикл із постумовою DO ... WHILE (condition)
    Цикл for - next для діапазону цілих чисел з інкрементом на 1 do label i = 1, 10
    Цикл for - next для діапазону цілих чисел із декрементом на 1 do label i = 10, 1, -1

    Приклади:

    Hello, World!:

    Приклад для версій Intel Visual Fortran 11.1, g95 0.93, gfortran 4.5.0

    Цей приклад написаний у вільному форматі, який підтримується Fortran 90 і наступними стандартами, а також діалектом .

    Fortran 90-style comment program HelloWorld print * , "Hello, World!" end program HelloWorld

    Факторіал:

    Приклад для версій Intel Visual Fortran 11.1, g95 0.93, gfortran 4.5.0

    Використовується ітеративне визначення факторіалу та вільний формат програми. Специфікації формату I та A використовуються для виведення чисел у десятковому форматі та рядків, відповідно. При обчисленні факторіалів 13-16 виникає арифметичне переповнення, викликає помилкутому виводяться неправильні значення:

    13! = 1932053504
    14! = 1278945280
    15! = 2004310016
    16! = 2004189184

    program Factorial integer :: f , n f = 1 n = 0 do print "(I2, A, I10)" , n , "! = " , f n = n + 1 f = f * n if (n == 17 ) exit end if end do end program Factorial

    Числа Фібоначчі:

    Приклад для версій Intel Visual Fortran 11.1, g95 0.93, gfortran 4.5.0

    Використовується ітеративне визначення чисел Фібоначчі. Найскладніше в цьому прикладі - виведення обчислених значень у потрібному форматі, в один рядок і без зайвих прогалин. Специфікація формату (I3, A, $) означає, що спочатку виводиться ціле число в десятковому форматі, шириною рівно три символи, потім виводиться рядок, і нарешті, $ пригнічує переклад рядка, який використовується командою print за замовчуванням, так що все виводиться в один рядок . Зазначимо, що у діалекті специфікатор формату $ не є стандартним; Програма працює, але при компіляції виводить попередження про це.

    program Fibonacci integer :: f1, f2, f3, i i = 1 f1 = 0 f2 = 1 do f3 = f2 + f1 f1 = f2 f2 = f3 i = i + 1 if (f1< 10 ) then print "(I1, A, $)" , f1 , ", " elseif (f1 < 100 ) then print "(I2, A, $)" , f1 , ", " else print "(I3, A, $)" , f1 , ", " end if if (i == 17 ) then exit end if end do print * , "..." end program Fibonacci

    Квадратне рівняння:

    Приклад для версій g95 0.93, gfortran 4.5.0

    У прикладі використовується вбудований тип даних complex. // - Оператор конкатенації рядків. Число перед дужками в описі формату означає кількість разів, які повторюється формат у дужках (у даному випадкудвічі - для першого та другого коренів).

    program Quadratic integer :: a , b , c real :: d , p1 , p2 complex :: cp2 read (* , * ), a if (a == 0 ) then write (* , * ) "Not a quadratic equation" stop end if read (* , * ) b read (* , * ) c d = b * b - 4 * a * c p1 = - b / 2.0 / a if (abs (d )< 1.0e-9 ) then write (* , "(A, F8.3)" ) "x = " , p1 elseif (d >0 ) then p2 = sqrt (d ) / 2.0 / a write (* , "(2(A, F8.3))" ) "x1 = " , p1 + p2 , char (13 ) // char (10 ) / / "x2 = ", p1 - p2 else cp2 = sqrt (cmplx (d)) / 2.0 / a write (*, "(2(A, F8.3, F8.3), A)") "x1 = ( ", p1 + cp2, ")" // char (13) // char (10) // "x2 = (", p1 - cp2, ")" end if end

    Hello, World!:

    Приклад для версій f2c 20090411, g95 0.93, gfortran 4.5.0

    FORTRAN 77); перші шість символів кожного рядка зарезервовані під службову інформацію - позначки про те, що рядок є коментарем або продовженням попереднього, мітки та номери рядків. Стандартний набірсимволів Fortran не містить символів нижнього регіструтому всі програми пишуться у верхньому регістрі. Винятком із цього правила є символьні константи— вони можуть містити символи, які підтримуються системою.

    Перший рядок дає цьому фрагменту коду ім'я HELLO і вказує на те, що він є основною програмою. Ім'я програми підпорядковується тим самим правилам, як і будь-які імена ідентифікаторів, тобто. повинно починатися з літери та містити не більше 6 символів.

    Команда WRITE реалізує виведення на друк. У дужках передається список керуючих параметрів, що налаштовують висновок: UNIT вибирає файл виводу (за умовчанням консоль), FMT формат виведення. Зірочки означають стандартні параметри. Імена параметрів передавати не обов'язково, скорочено ця команда виглядала б як WRITE (*, *) ... .

    У більшості реалізацій рядкова константа може полягати як у одинарні лапки, і в подвійні.

    A simple Hello, World! program PROGRAM HELLO WRITE (UNIT =* , FMT =* ) "Hello, World!" END

    Факторіал:

    Приклад для версій f2c 20090411, g95 0.93, gfortran 4.5.0

    Цей приклад написаний у фіксованому форматі (стиль FORTRAN 77) та використовує ітеративне обчислення факторіалу.

    Fortran дозволяє пропускати оголошення змінних; у разі він виводить їх типи сам, але, на відміну пізніших мов, за контекстом використання змінної, а, по її імені — якщо перша літера назви I..N, вибирається тип INTEGER, інакше - REAL. В даному випадку обидві змінні цілі.

    Цикл DO у разі відповідає циклу FORпізніших мов: лічильник циклу N послідовно пробігає всі значення від 0 до 16. Тіло циклу закінчується на рядку з міткою 1, яка вказана в заголовку циклу.

    Команда PRINT використовує стандартний формат виводу, який варіюється в залежності від компілятора, що використовується.

    PROGRAM) C . Через це після посимвольного заповнення рядка CC містить результат, залишок рядка доводиться заповнювати пробілами вручну.

    Перевірка того, що черговий символ вихідного рядка є літерою, занадто довга, щоб поміститися в один рядок (усі символи рядка програми, починаючи з 73 позиції, ігноруються), тому його доводиться розбивати на два рядки і відзначати другий як продовження першого (будь-яким символом у 6 позиції).

    Оператори порівняння в FORTRAN 77 записуються як LE. , .GE. і т.д. через те, що символи > і< не входят в набор символов языка; они были добавлены только в Fortran 90.

    PROGRAM CAMELC CHARACTER TEXT * 30 , CC * 30 LOGICAL LSPACE READ (* , "(A)" ) TEXT NCC = 0 LSPACE = .TRUE. DO 1, I = 1, LEN (TEXT) NC = ICHAR (TEXT (I : I)) IF (NC .GE. 65 .AND. NC .LE. 90 .OR. > NC .GE. 97 .AND. NC .LE.122) THEN IF (LSPACE) THEN IF (NC.GE. 90 ) THEN NC = NC + 32 END IF END IF NCC = NCC + 1 CC (NCC : NCC ) = CHAR (NC ) LSPACE = .FALSE. ELSE LSPACE = .TRUE. END IF 1 CONTINUE DO 2 , I = NCC + 1 , LEN (CC ) 2 CC (I : I ) = " " WRITE (* , * ) CC END



    Серед вчених, наприклад, ходить така приказка, що будь-яке математичне завдання вже має рішення на Фортрані, і, дійсно, можна знайти серед тисяч фортранівських пакетів і пакет для перемноження матриць, і пакет для вирішення складних інтегральних рівнянь, і багато інших. Ряд таких пакетів створювався протягом десятиліть і популярний у науковому середовищі до сьогодні, наприклад - IMSL ( англ.).

    Більшість таких бібліотек є фактично надбанням людства: вони доступні у вихідних кодах, добре документовані, налагоджені та дуже ефективні. Тому змінювати, а тим більше переписувати їх іншими мовами програмування невигідно, незважаючи на те, що регулярно робляться спроби автоматичного конвертування FORTRAN-коду на сучасні мови програмування.

    Сучасний Фортран (Fortran 95 і Fortran 2003) набув рис, необхідних для ефективного програмуваннядля нових обчислювальних архітектур, дозволяє застосовувати сучасні технології програмування, зокрема ООП.

    Еволюція стандартів мови

    Фортран - жорстко стандартизована мова, саме тому вона легко переноситься на різні платформи. Нові стандарти мови значною мірою зберігають наступність із старішими, що дозволяє використовувати коди раніше написаних програм та їх модифікувати.

    FORTRAN 66 (1972) На базі стандарту фірми IBM FORTRAN IV FORTRAN 77 (1980) Введено безліч покращень: Fortran 90 (1991) Значно перероблено стандарт мови. Fortran 95 (1997) Коригування попереднього стандарту. Введений оператор і конструкція FORALL, що дозволяють гнучкіше, ніж оператор і конструкція WHERE, привласнювати масиви та замінювати громіздкі цикли. FORALL дозволяє замінити будь-яке присвоєння перерізів або оператора та конструкцію WHERE, зокрема, забезпечує доступ до діагоналі матриці. Цей операторвважається перспективним у паралельних обчисленнях, сприяючи більш ефективному, ніж цикли, здійсненню розпаралелювання. Fortran 2003 (2004) Подальший розвиток підтримки ООП у мові. Взаємодія з операційною системою. Додані також такі можливості: Fortran 2008 (2010) Стандартом передбачається підтримка засобами мови паралельних обчислень (Co-Arrays Fortran). Також передбачається збільшити максимальну розмірність масивів до 15, додати спеціальні математичні функції і ін.

    Компілятори

    З моменту початкової розробки мови компілятори Фортрана виробляє фірма IBM. В даний час фірмою IBM постачається компілятор VS Fortran для мейнфреймів IBM System z, що оптимізує, історія розвитку різних версійякого сходить ще до 1964 року, а також компілятор XL Fortran для платформ на базі архітектури PowerPC - AIX, Linux та суперкомп'ютера Blue Gene (випускалася також версія для Mac OS X, коли комп'ютери Macintosh використовували процесори PowerPC). Обидва компілятори містять дуже складні оптимізатори, які є результатом безперервної наукової роботи фахівців IBM протягом півстоліття. На базі компілятора IBM Fortran XL фірмою Absoft, бізнес-партнером IBM, створено та поставляється компілятор Absoft Pro Fortran для систем на базі процесорів PowerPC (Linux, Mac OS X) та Intel (Linux, Mac OS X, Windows).

    Фонд вільного програмного забезпечення GNU випускав відкритий компілятор Фортрана-77 g77, доступний практично для будь-якої платформи і повністю сумісний із GCC. Зараз йому на зміну прийшов компілятор GFortran, в якому реалізовані практично всі конструкції стандарту Фортран-95 та багато конструкцій стандартів Фортран-2003 та Фортран-2008. Він також повністю зворотно сумісний з Фортран-77. Також існує незалежний проект g95 створення на основі GCC компілятора Фортран-95.

    Можливості та структура програми

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

    Перфокарта з розміткою стовпчиків для Фортрана.

    Структура програм спочатку була орієнтована на введення з перфокарт і мала ряд зручних для цього випадку властивостей. Так, перша колонка служила для маркування тексту як коментаря (символом C), з 1-ї по 5-ту розташовувалася область міток, а з 7-ї по 72-ю розташовувався власне текст оператора або коментаря. Колонки з 73-ї по 80-у могли служити для нумерації карт (щоб відновити колоду, що випадково розсипалася) або для короткого коментаря, транслятором вони ігнорувалися. Якщо текст оператора не вписувався у відведений простір (з 7-ї по 72-ю колонку), у 6-й колонці наступної карти ставився ознака продовження, і потім оператор продовжувався на ній. Розташувати два або більше операторів в одному рядку (карті) було неможливо. Коли перфокарти пішли в історію, ці переваги перетворилися на серйозні незручності.

    Саме тому до стандарту Фортрана, починаючи з Fortran 90, на додаток до фіксованого формату вихідного текстуз'явився вільний формат, який не регламентує позиції рядка, а також дозволяє записувати більше одного оператора на рядок. Введення вільного формату дозволило створювати код, читання та ясність якого не поступається коду, створеному за допомогою інших сучасних мов програмування, таких як Java.

    Свого роду «візитною карткою» старого Фортрана є величезна кількість міток, які використовувалися як в операторах безумовного переходу GOTO, так і в операторах циклів, і в операторах форматного введення/виводу FORMAT. Велика кількість міток та операторів GOTO часто робила програми на Фортрані важкими для розуміння.

    Саме цей негативний досвід став причиною, через яку у низці сучасних мов програмування (наприклад, Java) мітки та пов'язані з ними оператори безумовного переходу сильно видозмінені.

    Однак сучасний Фортран позбавлений надлишку міток за рахунок введення таких операторів, як DO ... END DO, DO WHILE, SELECT CASE. Більше того, в сучасних стандартах мови залишено лише класичний оператор GOTO, який застосовується у багатьох мовах і досі. Оператор GOTO, що обчислюється, а також конструкція ENTRY - множинного входу в процедури, були виключені.

    Також до позитивних рис сучасного Фортрану варто віднести велику кількість вбудованих операцій з масивами та гнучку підтримку масивів із незвичайною індексацією. Приклад:

    Real ,dimension (: ,: ) :: V ... allocate (V(- 2 : 2 ,0 : 10 ) ) ! Виділити пам'ять під масив, індекси якого можуть ! змінюватись у межах від -2 до 2 (перший індекс) ! та від 0 до 10 - другий... V (2,2:3) = V(- 1:0,1) ! Повернути шматочок масиву write(* ,* ) V(1 ,: ) ! Друкувати всі елементи масиву V, перший індекс яких дорівнює 1. deallocate (V)

    Hello, World!

    Фіксований формат (символами «␣» виділено прогалини у позиціях рядка з 1 по 6):

    ␣␣␣␣␣␣PROGRAM hello ␣␣␣␣␣␣PRINT* , "Hello, World!" ␣␣␣␣␣␣END

    Вільний формат:

    Program hello print *, "Hello, World!" end

    Зауваження.

    • Оператор PROGRAM не обов'язковий. Строго кажучи, єдиний обов'язковий оператор Фортран-програми – оператор END.
    • Вибір великих чи малих літер для написання операторів програми довільний. З точки зору сучасних стандартівмови Фортран, безліч великих літері безліч малих літер під час написання операторів мови збігаються.

    Взаємодія з іншими мовами

    Багато систем програмування дозволяють компонувати отримані в результаті трансляції фортранівської програми об'єктні файли з об'єктними файлами, отриманими від компіляторів з інших мов, що дозволяє створювати більш гнучкі та багатофункціональні програми. Для мови Фортран також доступна велика кількість бібліотек, що містять як підпрограми вирішення класичних обчислювальних завдань (LAPACK, IMSL, BLAS), задач організації розподілених обчислень (MPI, pvm), так і задач побудови графічних інтерфейсів (Quickwin, FORTRAN/TK) або доступу до СУБД (Oracle).

    Фортран у СРСР

    Примітки

    1. наприклад, Netlib Repository at UTK and ORNL
    2. А. М. Горелік. Еволюція мови програмування Фортран (1957-2007) та перспективи її розвитку//Обчислювальні методи та програмування, 2008, Т. 9, с. 53-71
    3. Бартеньєв О.В.Сучасний Фортран. – М.: Діалог МІФІ, 2005. – ISBN 5-86404-113-0
    4. А. М. Горелік. об'єктно-орієнтоване програмування на сучасному Фортрані
    5. С. Д. Алгазін, В. В. Кондратьєв.Програмування Visual Fortran. – М.: «Діалог МІФІ», 2008. – 448 с. - ISBN 5-8243-0759-8
    6. Горєлік А. М.
    7. VS FORTRAN
    8. XL Fortran for Linux
    9. Absoft Pro Fortran Compiler Suites General Overview
    10. Sun Studio - Benchmarks
    11. Нарис Олександра Расторгуєва про появу Фортрана в Дубні
    12. Історія комп'ютерної графіки у Росії

    Література

    • Fortran. Programmer's Reference Manual. Fortran Automatic Coding System для IBM 704 EDPM. - IBM Corp., 1956. - 51 с.
    • ISO/IEC 1539-2:2000 Інформація технології - Programming languages ​​- Fortran - Part 2: Varying length character strings
    • Роберт У. Собеста. 2.3. Комп'ютер IBM 704 та мова Фортран // Основні концепції мов програмування = Concepts of Programming Languages/Пер. з англ. - 5-те вид. – М.: Вільямс, 2001. – С. 63-69. – 672 с. - 5000 екз. - ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.)

    Посилання

    • gfortran - Компілятор Фортрана 95/2003/2008, частина Колекції компіляторів GNU
    • в Прогопедії – енциклопедії мов програмування (рус.)

    Спробувати написати тут свій перший пост мене підштовхнула, де пропонує використовувати для навчання C++. Так, на цю темубуло зламано безліч копій.

    Я, як і напевно більшість школярів на просторах нашої неосяжної Батьківщини, починав осягати ази через синій екран, але не смерті, а Turbo Pascal 7.0. Був, звичайно, і Basic, з яким я вперше зіткнувся в дошкільному віці на радянському комп'ютері «Електроніка». Тоді він здавався дивним текстовим редактором, адже комп'ютер очима дитини створено для ігор. Проте вже в інституті я познайомився з мовою Fortran, пізнавши яку, я досі дивуюся, чому вона не використовується для навчання.

    Так, багато хто скаже, що мова мертва, не відповідає сучасним реаліям, а підручники з назвою, як на картинці, викликають лише посмішку. Я спробую пояснити, чим така чудова ця мова і чому я її рекомендую як першу мову. Якщо зацікавило, ласкаво просимо під кат.

    Я вважаю, що базис з основ програмування має закладатися ще у шкільні роки, хоч би у старших класах. Навіть якщо в житті комп'ютер буде використовуватися тільки для набору тексту в Word або для спілкування в соціальних мережах, мінімальні знання про те, що таке алгоритм і як структурувати послідовність дій, щоб отримати потрібний результат, за Крайній міріне зашкодять молодому юнакові в дорослому житті, а швидше за все допоможуть сформувати особливий склад розуму.

    Для того, щоб уроки інформатики були в радість, а не снилися в кошмарних снах, той, хто навчається, повинен розуміти, що він робить, як він це робить і чому виходить так, а не інакше. Адже по суті потрібно правильно донести інформацію про цикл та умовному операторіщоб людина могла писати програми самостійно. При цьому чим простіше синтаксис мови, тим легше зрозуміти логіку написання коду. Якщо ж людина навчиться складати правильний алгоритм, то для програмування іншими мовами, йому знадобиться тільки дізнатися синтаксис цієї мови, а базис вже буде закладено.

    Чим же чудовий Фортран?

    Звернемося до історії створення цієї мови. З'явився він у далекі 50-ті роки минулого століття, коли комп'ютери ще були більшими, програмістів було мало, а інформатика не викладалася в школі, та й взагалі вважалася лженаукою. Потрібна була проста мова, яка б допомагала інженерам і вченим «годувати» ЕОМ формули, написані на папері, нехай навіть через перфокарти.

    Звідси і назва мови: For mula Tran slator або «перекладач формул». Тобто. Спочатку мова була орієнтована на людей без спеціальної підготовки, а отже повинна була бути максимально простою.

    Що ж, простота творцям вдалася. Класична перша програма виглядає так:

    Program hw write(*,*) "Hello, World!" end
    Синтаксис навіть трохи простіше Паскалянемає необхідності ставити в кінці рядка " ; " або " : перед знаком рівності. Більше того, людям, які володіють мінімальним знанням англійської мови, Зрозуміти зміст найпростішої програми не складе труднощів.

    Тут хочу відзначити, що Фортран має кілька ревізій стандартів, основними з яких є 77 і 90 (при цьому зберігається наступність). 77 Фортран справді архаїчний, є обмеження на довжину рядка, і необхідно робити відступ на початку рядка, що може викликати у молодого кандидата у програмісти культурний шок. Недарма програми, написані на 77 Фортрані, отримали з вуст мого знайомого ємну назву «Брежнєвський код». Тому весь мій текст відноситься до стандарту мови 90 і більше.

    Наприклад, наведу код для обчислення суми невід'ємних цілих чисел від 1 до n, що вводиться з клавіатури, написаний моєю дипломницею під час навчання її програмування з нуля. Саме на ній я випробував викладання Фортрана як першу мову. Сподіваюся, що для неї це пішло на користь, а мій експеримент вдався. Принаймні основи вона засвоїла за пару занять, перша з яких пішла на лекцію про мову.

    Program chisla implicit none! Variables integer n,i,s! Body of chisla s=0 write (*,*) "Введіть n" read (*,*) n if (n.le.0) then write (*,*) "Негативне або нуль" else do i=1,n s =s+i end do write (*,*) "Сума=", s end if end
    Неважко помітити, що, як ми думаємо, так і записуємо код. Жодних складнощів у учня не може виникнути в принципі. Уважний читач, звичайно ж, запитає, що за implicit none і дві зірочки в дужках через кому. implicit none говорить нам, що ми явно вказуємо тип змінних, тоді як без цього запису компілятор сам вгадуватиме тип. Перша зірочка означає, що введення та виведення відбуваються на екран, а друга говорить про те, що формат введення-виводу визначається автоматично. Власне, програми на Фортрані виглядає не складніше, ніж написаний вище шматок коду.

    А що щодо програмного середовища?

    У школах та й у будь-яких держустановах часто постає питання про програмне забезпечення, зокрема про його ліцензійність. Бо гроші на ці потреби особливо не виділяються. Принаймні в мій час, з цим була проблема, може зараз ситуація змінилася на краще.

    Для написання програм на Фортрані підійде будь-який текстовий редактор. Якщо хочеться підсвічування синтаксису, можна використовувати Notepad++ (підтримує синтаксис лише 77 стандарту) чи SublimeText. Програму написали, чим компілюватимемо? Тут все просто можна використовувати вільний GNU Fotran. Якщо використання планується некомерційне, то можна замахнутися і на компілятор від Intel, який добре оптимізований під однойменні процесори і поставляється з мінімально необхідним IDE. Тобто. поріг входження дуже пільговий.

    Найкращим середовищем розробки під Фортран на думку багатьох користувачів залишається Compaq Visual Fortran 6.6, остання версія якого побачила світ на початку 2000-х. Чому ж так склалося, що середовище, засноване на Visual Studio 6.0, яка без танців з бубном заводиться максимум на Windows XP 32 bit, і має обмеження на пам'ять, що використовувалася, здобула таку популярність серед фортранщиків. Відповідь наведено на малюнку нижче.

    Це Compaq Array Visualizer, який є дуже зручним інструментом для візуалізації 1, 2 і 3-х мірних масивів у процесі налагодження програми безпосередньо з дебаггера. Як кажуть, спробувавши раз, їм і зараз. Справа в тому, що Фортран зараз використовується в основному в науці (про що буде сказано пізніше), зокрема в галузі, з якою я маю справу, а саме у фізиці атмосфери. При налагодженні програм масиви є різні метеорологічні поля, такі як температура, тиск, швидкість вітру. Шукати помилку в графічних полях набагато простіше, ніж у наборі цифр, тим більше зазвичай відомо, як приблизно має виглядати поле, тому очевидні помилки відсікаються моментально.

    На жаль, всі напрацювання компілятором перейшли від Compaq до Intel. Intel спочатку підтримувала Array Visualizer, щоправда, ті версії були блідим відображенням продукту від Compaq, працювати з ними було не так зручно, як раніше, але хоча б мінімальна працездатність підтримувалася. На жаль, Intel перестала розробляти нові версії Array Visualizer, поставивши хрест на цьому зручному інструменті. Саме тому фортранівська спільнота в основному пише програми і займається їх налагодженням під Compaq Visual Fortran на Windows, а бойові розрахунки запускає на серверах під Linux, використовуючи Intel-івські компілятори. Інтел, будь ласка, почуй благання користувачів, поверни нормальний інструмент для візуалізації масивів у свій дебаггер!

    Місце Фортрана у світі

    А зараз ми підійшли до тієї самої теми, яка зазвичай викликає бурхливу дискусію з моїми колегами, які використовують Matlab, які стверджують, що описана в даному пості раритетна мова ні на що не годиться. Тут я з ними не погоджусь. Справа в тому, що Фортран історично використовувався в інженерних чи наукових розрахунках, а тому згодом обростав безліччю готових бібліотек та кодами програм вирішення того чи іншого завдання.

    Код буквально передається з покоління в покоління, та ще й добре документується. Можна знайти безліч готових рішеньрівнянь математичної фізики, лінійної алгебри (тут слід зазначити вдалу реалізацію роботи з матрицями), інтегральних та диференціальних рівняньі багато чого іншого. Напевно важко знайти завдання з галузі фізмат наук, для якої не було б реалізовано алгоритм мовою Фортран. А якщо врахувати відмінну оптимізацію інтелівських компіляторів під інтелівські процесори, підтримку паралельних обчислень на високопродуктивних кластерах, то стає зрозуміло чому в науковому середовищі ця мова займає заслужене перше місце. Думаю, на будь-якому суперкомп'ютері можна знайти встановлений фортранівський компілятор.

    Більшість серйозних моделей, принаймні в галузі фізики атмосфери, написані саме на Фортрані. Так-так, прогноз погоди, яким кожен цікавиться час від часу, виходить під час розрахунків моделей, написаних цією мовою. Більше того, мова не перебуває у стагнації, а постійно вдосконалюється. Так, після описаних раніше стандартів 77 і 90, з'явилися нові редакції 95, 2003, 2008, підтримка яких впроваджена в актуальні компілятори. Останні версії Фортрана дещо освіжили стару перевірену часом мову, привівши підтримку сучасного стилю, додавши об'єктно-орієнтоване програмування, відсутність якого була чи не найголовнішим козирем противників цієї мови. Більш того, The Portland Group випустила PGI CUDA Fortran Compiler, що дозволяє проводити високопаралельні розрахунки на відеокартах. Таким чином, пацієнт більш ніж живий, а значить, програмісти на Фортран залишаються затребуваними досі.

    Замість післямови

    А тепер я хотів би повернутися до спочатку порушеної теми про навчання програмування, і спробувати тезово сформулювати основні плюси Фортрана при виборі його як першу мову.
    • Фортран дуже простий у навчанні, синтаксис зрозумілий непідготовленій людині. Пізнавши основи, легко перевчитися будь-якою іншою мовою.
    • Безкоштовний набір коштів дозволяє не одержувати зайвих питань від правовласників.
    • Мова знайома викладачам, оскільки існує давно, а вчителі у нас в основному представники старшого покоління.
    • Широко поширений по всьому світу і є джерелом різноманітних бібліотек.
    • Стандартизований, кросплатформенний і сумісний з раніше ревізіями.
    • Корисний для студентів технічних, а особливо фізмат спеціальностей, зважаючи на орієнтацію на наукові та інженерні обчислення.
    • Актуальний і затребуваний і сьогодні.
    То чому ж не Фортран?

    Алфавіт - у програмуванні - система нерозкладних, впевнено відрізняються один від одного символів (літер, цифр, розділових знаків та ін символів), що використовуються для побудови мов програмування.

    Синтаксис – сторона мови програмування, яка описує структуру програм як наборів символів. Синтаксису мови протиставляється його семантика. Синтаксис мови описує «чисту» мову, водночас семантика приписує значення різним синтаксичним конструкціям.

    Семантика - у програмуванні - система правил визначення поведінки окремих мовних конструкцій. Семантика визначає смислове значення речень алгоритмічної мови.

    Мови програмування низького рівня – Автокод, Асемблер,

    Мови програмування високого рівня -Фортран, Алгол, Кобол, Паскаль, Бейсік, Сі++, Пролог

    Мови програмування надвисокого рівня – APL, Алгол-68

    Обчислювальні мови програмування - Фортран, Паскаль, Алгол, Бейсік, Сі

    Мови символьної обробки - Лісп, Пролог, Снобол та ін.

    Мови першого покоління:

    Машинні коди були мовою програмування першого покоління

    Мови другого покоління:

    Асемблер

    Мови третього покоління:

    ці мови часто позначаються як мови високого рівня.

    Мови четвертого покоління:

    Бейсик, Кобол, Сі та Паскаль

    Мови програмування п'ятого покоління:

    Пролог, ЛІСП, Сі ++, Visual Basic, Delphi.

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

    Перша мова програмування високого рівня має транслятор. Створений у період із 1954 по 1957 рік групою програмістів під керівництвом Джона Бекуса в корпорації IBM. Назва Fortran є акронімом від FORmula TRANslator (перекладач формул). Фортран широко використовується в першу чергу для наукових та інженерних обчислень. Одна з переваг сучасного Фортрану – велика кількість написаних на ньому програм та бібліотек підпрограм. Більшість таких бібліотек є фактично надбанням людства: вони доступні у вихідних кодах, добре документовані, налагоджені та дуже ефективні. Тому змінювати, а тим більше переписувати їх іншими мовами програмування невигідно, незважаючи на те, що регулярно робляться спроби автоматичного конвертування FORTRAN-коду на сучасні мови програмування.

    Сучасний Фортран (Fortran 95 і Fortran 2003) набув рис, необхідних ефективного програмування нових обчислювальних архітектур, дозволяє застосовувати сучасні технології програмування, зокрема, ООП.

    Еволюція стандартів мови

    Фортран – жорстко стандартизована мова, саме тому він легко переноситься на різні платформи. Нові стандарти мови значною мірою зберігають наступність із старішими, що дозволяє використовувати коди раніше написаних програм та їх модифікувати.

    FORTRAN 77 (1980)

    Введено безліч покращень:

    Введені оператори відкриття та закриття файлу (OPEN, CLOSE) та виведення на стандартний пристрій – PRINT.

    Додані рядковий типданих та функції для його обробки.

    Введено блоковий оператор IF та конструкція IF THEN – ELSE IF THEN – END IF, а також оператор включення фрагмента програми INCLUDE.

    Введено можливість роботи із файлами прямого доступу.

    Збільшено максимальну розмірність масиву з 3 до 7. Знято обмеження на індекси масиву.

    Удосконалено та розширено можливості роботи з процедурами.

    Введено поняття внутрішнього файлу (якими є масиви, числові та рядкові змінні). Внутрішні файли дозволяють, зокрема, здійснювати перетворення число-рядок і рядок-число стандартним операторами читання та запису READ та WRITЕ.

    Fortran 90 (1991)

    Значно перероблено стандарт мови.

    Введено вільний формат написання коду. З'явилися додаткові описи IMPLICIT NONE, TYPE, ALLOCATABLE, POINTER, TARGET, NAMELIST.

    Введені керуючі оператори та конструкції. Додано DO … END DO (замість завершення циклу міткою), DO WHILE, оператор передачі управління на початок циклу CYCLE, конструкція вибору SELECT CASE (для заміни громіздких конструкцій IF та операторів GOTO), а також заключний оператор програмної одиниці, модульної чи внутрішньої процедури END .

    Введено інструментарій покажчиків та функції для роботи з оперативною пам'яттю (за аналогією з мовою С).

    Введено операторів роботи з динамічною пам'яттю (ALLOCATE, DEALLOCATE, NULLIFY).

    Додано програмні компоненти MODULE, PRIVATE, PUBLIC, CONTAINS, INTERFACE, USE, INTENT.

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

    Стандартні операції присвоєння, складання, віднімання, і навіть поділу і множення число поширені на масиви та його секції, зумовлені перерізами. І тут здійснюється поэлементное присвоювання.

    З'явилися нові вбудовані функції, насамперед до роботи з масивами. Функції для обчислень у масивах: ALL (лог. твір) та MASK (логічне додавання), COUNT (число істинних елементів), PRODUCТ (твір елементів масиву), SUM (складання елементів масиву), DOT_PRODUCT (скалярний твір), MATMUL (множення матриць) ). Додалися довідкові функції, а також функції переформування та згортки масивів.

    У мові виникли елементи ООП. Введено похідні типи даних. Окремо оголошено список застарілих характеристик мови, призначених для видалення в майбутньому.

    Додані додаткові функціїдля роботи з рядковими даними, зокрема, функції TRIM (видалення завершальних прогалин) та REPEAT (кратне копіювання рядка) та функції вирівнювання по лівій та правій межах.

    Fortran 95 (1997)

    Коригування попереднього стандарту. Введений оператор і конструкція FORALL, що дозволяють гнучкіше, ніж оператор і конструкція WHERE, привласнювати масиви та замінювати громіздкі цикли. FORALL дозволяє замінити будь-яке присвоєння перерізів або оператора та конструкцію WHERE, зокрема, забезпечує доступ до діагоналі матриці. Цей оператор вважається перспективним у паралельних обчисленнях, сприяючи ефективнішому, ніж цикли, здійсненню розпаралелювання.

    Fortran 2003 (2004)

    Подальший розвиток підтримки ОВП у мові. Взаємодія із операційною системою. Додані також такі можливості:

    Асинхронне введення-виведення даних.

    Засоби взаємодії з мовою C

    Удосконалення динамічного розміщення даних

    Стандартом передбачається підтримка засобами мови паралельних обчислень (Co-Arrays Fortran). Також передбачається збільшити максимальну розмірність масивів до 15, додати спеціальні математичні функції і ін.

    Fortran(також FORTRAN) це мова програмування, розроблений на початку 1950-х років і використовуваний досі. Назва є скороченням від "FORmula TRANslator". Ранні версії мови були відомі як FORTRAN, але літери перестали бути великими, починаючи з версії Fortran 90. Офіційні стандарти мови тепер називають мову як "FORTRAN".

    >Fortran в основному використовується для наукових розрахунків та чисельного аналізу. Хоча спочатку це була процедурна мова, але в останні версії Fortran включили деякі функції підтримки об'єктно-орієнтованого програмування для початківців.

    Перший компілятор FORTRAN був розроблений для IBM 704 у 1954-57 в команді IBM під керівництвом Джона Бекуса (John W. Backus). Це було оптимізуючим компілятором, тому що автори розсудили, що ніхто не використовуватиме мову, навіть при вивченні програмування для чайників, якщо його продуктивність не буде порівняна з асемблером.

    Мова набула широкого поширення серед учених і використовувалася для написання програм з інтенсивними чисельними операціями, які змушували творців компіляторів Фортрана старанно переписувати код компіляторів, щоб ті генерували швидший код. Сьогодні існує основа постачальників високопродуктивних компіляторів для Fortran. Багато досягнень у галузі теорії та конструювання компіляторів були мотивовані необхідністю генерувати гарний коддля Fortran програм як належить для основ програмування.

    Відомо кілька версій мови, у тому числі відомі FORTRAN IV (також відомий як FORTRAN 66), Fortran 77 та Fortran 90. Останній формальний стандарт для мови, опублікований у 1997 році, відомий як Fortran 95. Версії мови від IBM ніколи не були такі популярні , Як, розроблені іншими компаніями, і це особливо стосується FORTRAN IV - WATFOR, версія FORTRAN IV, розроблена в Університеті Ватерлоо в Канаді, була найбільш затребуваною, оскільки виводила краще за інших виводила повідомлення про помилки компіляції. Так само, програмне забезпеченнядля автоматичної генерації блок-схем із FORTRAN програм було розроблено за межами IBM

    Спочатку, мова спирався на точність форматування вихідного коду та інтенсивне використання числові стани та оператор GOTO. Ці чудасії були видалені з нових версій мови. Наступні версії також представили "сучасні" концепції програмування, такі як коментарі вихідний кодта виведення тексту, оператори IF-THEN-ELSE (у FORTRAN 77), рекурсія (у Fortran 90), та паралельні обчислення, в той же час намагаючись зберегти в Fortran "пісний" профіль та високу продуктивність. Серед найпопулярніших заснованих на Fortran мовах можна виділити SAS, призначений для отримання статистичних звітів, і SIMSCRIPT, для моделювання процесів масового обслуговування.

    Продавці високопродуктивних наукових комп'ютерів (Burroughs, CDC, Cray, IBM, Texas Instruments) додали розширення для Fortran, щоб включити використання спеціальних апаратних особливостей, таких як: кеш інструкцій, процесор pipe-з'єднань, векторних масивів тощо. машинного кодутримати кілька внутрішніх арифметичних блоків зайнятими весь час. Іншим прикладом є CFD, особливий "варіант" Фортран, розроблений спеціально для суперкомп'ютера ILLIAC IV, який працює в дослідному центрі NASA Ames. Ці розширення або зникли з часом або ці елементи були включені в основний стандарт; основним розширенням є OpenMP, яке є крос-платформним розширенням для доступу до спільної пам'яті. Ще одне з нових розширень, CoArray Fortran, покликаний сприяти розвитку паралельного програмування та .

    Перша спроба розробки на Erlang новачка може дуже засмутити тому, що синтаксис цієї мови вважається тайнописом багатьма програмістами, які починали вивчення з сучасних мов. Важко писати лексичний аналізатор, коли лише один помилковий символ може призвести до помилки часу виконання, а чи не помилки компіляції, якщо зазначені конструкції не використовуються. У деяких ранніх версіях, не було об'єктів (ООП), які розглядаються як корисні атрибути програмування в сучасних умовах, або, наприклад, не було динамічний розподілпам'яті. У той же час, синтаксис мови Фортран був застосовний до наукових робіт і обчислень, пов'язаних операціями над числами, а багато його недоліків були враховані в більш пізніх версіях. Наприклад, Fortran 95 має дуже короткі командидля виконання математичних операцій з матрицями та масивами, які не тільки значно покращує читаність програми, але також дає корисну інформаціюдля компілятора, щоб вона могла векторизувати операції. З цих причин, Fortran не часто використовується за межами наукових та інженерних обчислень, він залишається мовою для високої продуктивностічисельних обчислень.