Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Разнообразие языков программирования. Изучим их все. Фортран - первый язык программирования


Здравствуйте! Сегодня, как и обещал вам в первом выпуске, я расскажу о Фортране.

Как вы знаете, это первый "настоящий" язык программирования. Название Fortran является аббревиатурой от FORmula TRANslator, то есть, переводчик формул. Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана — большое количество написанных на нём программ и библиотек подпрограмм. Современный Фортран (Fortran 95 и Fortran 2003) приобрёл черты, необходимые для эффективного программирования для новых вычислительных архитектур; позволяет применять современные технологии программирования, в частности, ООП.

Фортран — жёстко стандартизированный язык, именно поэтому он легко переносится на различные платформы. Существует несколько международных стандартов языка:

  • FORTRAN IV (он же — FORTRAN 66) (1966)
  • FORTRAN 77 (1978)
    Множество улучшений: строковый тип данных и функции для его обработки, блочные операторы IF, ELSE IF, ELSE, END IF, оператор включения фрагмента программы INCLUDE и т. д.
  • Fortran 90 (1991)
    Значительно переработан стандарт языка. Введён свободный формат написания кода. Появились дополнтельные описания IMPLICIT NONE, TYPE, ALLOCATABLE, POINTER, TARGET, NAMELIST; управляющие конструкции DO … END DO, DO WHILE, CYCLE, SELECT CASE, WHERE; работа с динамической памятью (ALLOCATE, DEALLOCATE, NULLIFY); программные компоненты MODULE, PRIVATE, PUBLIC, CONTAINS, INTERFACE, USE, INTENT. Появились новые встроенные функции, в первую очередь, для работы с массивами.
    В языке появились элементы ООП.
    Отдельно объявлен список устаревших черт языка, предназначенных для удаления в будущем.
  • Fortran 95 (1997)
    Коррекция предыдущего стандарта.
  • Fortran 2003 (2004)
    Дальнейшее развитие поддержки ООП в языке. Взаимодействие с операционной системой.
До 1997 основным производителем компиляторов Фортрана для IBM PC совместимых компьютеров была корпорация "Майкрософт". Впоследствии она отказалась от их разработки в связи с низкой прибыльностью. На данный момент компиляторы поставляет фирма  "DEC", вошедшая в 1998 г. в состав "Compaq" и вместе с последней в 2002 г. слившаяся с "HP". Компания "DEC" поставляет компилятор, интегрированный в среду разработки Digital Visual Fortran, основанную на Microsoft Visual Studio. Наиболее известными продуктами этой линейки являются FPS 4.0 (Microsoft Fortran Power Station), DVF 5.0 и 6.0. Каждый компилятор может поддерживать несколько стандартов Фортрана. Слияния компаний явились причиной того, что последующие продукты появлялась на рынке под торговыми марками Compaq и HP. В настоящее время HP продаёт среду разработки версии 6.6 для Intel/win32. Поддержка Фортрана реализована также для всех высокопроизводительных платформ HP. Другим крупным поставщиком систем разработки на Фортране является фирма  "Lahey", предлагающая интегрированные решения для Windows и Linux. Долгое время лучшим компилятором Фортрана считался компилятор фирмы "Watcom", который был выделен в отдельный проект Opan Watcom развивающий компилятор на открытой основе. Известен и развивается также компилятор фирмы Intel - Intel Fortran Compiler, который позволяет оптимизировать код под платформу Intel ia32 и ia64.

Фонд свободного программного обеспечения GNU выпускает открытый компилятор Фортрана-77 g77, доступный практически для любой платформы и полностью совместимый с GCC, но не поддерживающий всех языковых конструкций современных стандартов Фортрана. Также существует проект g95 по созданию на основе GCC компилятора Fortran-95.

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

Именно поэтому в стандарт Фортрана, начиная с Fortran 90, в добавление к фиксированному формату исходного текста появился свободный формат, который не регламентирует позиции строки, а также позволяет записывать более одного оператора на строку. Введение свободного формата позволило создавать код, читабельность и ясность которого не уступает коду, созданному при помощи других современных языков программирования, таких как C или Java.

Своего рода «визитной карточкой» старого Фортрана является огромное количество меток, которые использовались как в операторах безусловного перехода GOTO , так и в операторах циклов, и в операторах описания форматного ввода/вывода FORMAT. Большое количества меток и операторов GOTO часто делало программы на Фортране трудными для понимания.

Именно этот негативный опыт стал причиной, по которой в ряде современных языков программирования (например, Java) метки и связанные с ними операторы безусловного перехода вообще отсутствуют.

Однако современный Фортран избавлен от избытка меток за счет введения таких операторов, как DO … END DO, DO WHILE, SELECT CASE

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

 


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.
Выбор прописных или строчных букв для написания операторов программы произволен. С точки зрения современных стандартов языка Фортран, множество прописных букв и множество строчных букв при написании операторов языка совпадают.

Пример простой программы на фортране (со свободной формой записи).

В примере демонстрируется использование модулей и внешних функций.

Функция CALC_AVERAGE содержится в отдельном файле и зависит от модуля ARRAY_CALCULATOR как объявленная в нем.

Оператор USE  обеспечивает доступ к ARRAY_CALCULATOR. Этот модуль содержит объявление функции CALC_AVERAGE.
Массив из 5-ти элементов передается функции CALC_AVERAGE, которая возвращает значение AVERAGE для вывода на экран.
Листинг основной программы:

 


! Файл: main.f90
! Эта программа вычисляет среднее арифметическое 5ти чисел
PROGRAM MAIN
USE ARRAY_CALCULATOR
REAL, DIMENSION(5) :: A = 0
REAL :: AVERAGE
PRINT *, 'Введите 5 чисел: '
READ (*,'(F10.3)') A
AVERAGE = CALC_AVERAGE(A)
PRINT *, 'Среднее арифметическое 5ти чисел: ', AVERAGE
END PROGRAM MAIN

 


Ниже приведен листинг модуля, на который ссылается основная программа. Он демонстрирует некоторые возможности Фортрана 90/95(интерфейсный блок и объявление массива).


! Файл: array_calc.f90.
! Модуль содержит различные вычисления над массивами.
MODULE ARRAY_CALCULATOR
INTERFACE
FUNCTION CALC_AVERAGE(D)
REAL :: CALC_AVERAGE
REAL, INTENT(IN) :: D(:)
END FUNCTION CALC_AVERAGE
END INTERFACE
! другие интерфейсы подпрограмм...
END MODULE ARRAY_CALCULATOR


Ниже листинг объявленной функции, вызываемой из основной программы


! Файл: calc_aver.f90.
! Внешняя функция, возвращающая среднее арифметическое значений массива.
FUNCTION CALC_AVERAGE(D)
REAL :: CALC_AVERAGE
REAL, INTENT(IN) :: D(:)
CALC_AVERAGE = SUM(D) / UBOUND(D, DIM = 1)
END FUNCTION CALC_AVERAGE


Файлы, содержащие приведенные выше строки, можно отдельно скомпилировать а затем слинковать друг с другом используя следующие команды:
ifort -c array_calc.f90
ifort -c calc_aver.f90
ifort -c main.f90
ifort -o calc main.o array_calc.o calc_aver.o
В этом наборе команд:
 Опция -c предотвращает сборку и оставляет .o файлы.
 Первая команда создает файлы array_calculator.mod и
array_calc.o (имя в операторе MODULE определяет название файла модуля array_calculator.mod). Файл модуля записывается в текущую директорию.
 Вторая команда создает файл calc_aver.o.
 Третья команда создает файл main.o и использует модульный файл array_calculator.mod.
 Последняя команда собирает все объектные файлы в исполняемую программу с названием calc. Для линковки используется ifort вместо команды ld.

Порядок, в котором приведены файлы, важен.В данной команде ifort:
 Компилируем array_calc.f90, который содержит описание модуля, и создаем его объектный файл и файл array_calculator.mod.
 Компилируем calc_aver.f90, в котором содержится внешняя функция
CALC_AVERAGE.
 Компилируем main.f90 (основная/главная программа). Оператор USE
ссылается на файл array_calculator.mod.
 Используем ld для сборки основной программы и всех объектных файлов в исполняемый файл с именем calc.
Запуск программы
Если прописан путь в директорию, содержащую прграмму calc, то для запуски достаточно ввести ее имя:
calc
При запуске операторы PRINT и READ из основной программы приведут в результате к следующему диалогу между пользователем и программой:


Введите 5 чисел:
55.5
4.5
3.9
9.0
5.6
Среднее арифметическое 5ти чисел: 15.70000

 


 

Ссылки на полезные материалы по языку: 

Компиляторы ФОРТРАН, распространяемые бесплатно

 Краткое описание основных команд компилятора и линкера Microsoft-Фортрана (версии 4.01-4.10)

Небольшое руководство по Fortran 

Книги на продажу 

Вопросы программирования на Фортран (Форум) 

Ещё одно хорошее место по Фортрану (Форум)

На этом мой выпуск окончен. Надеюсь он вам понравился. В следующий раз мы поговорим с вами о языке программирования D.

До встречи через неделю! 


В избранное