Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2. Fortran.doc
Скачиваний:
6
Добавлен:
05.12.2018
Размер:
121.34 Кб
Скачать

Компиляторы

С момента первоначальной разработки языка, компиляторы Фортрана производит фирма IBM. В настоящее время фирмой IBM поставляется оптимизирующий компилятор VS Fortran для мэйнфреймов IBM System z, история развития различных версий которого восходит ещё к 1964 году, а также компилятор XL Fortran для платформ на базе архитектуры PowerPC — AIXLinux и суперкомпьютера 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).

До 1997 основным производителем компиляторов Фортрана для IBM PC совместимых компьютеров была корпорация «Microsoft». Впоследствии она отказалась от их разработки в связи с низкой прибыльностью. На данный момент компиляторы поставляет фирма «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.

Долгое время лучшим компилятором Фортрана для PC считался компилятор фирмы «Watcom», который был выделен в отдельный проект Open Watcomразвивающий компилятор на открытой основе.

Известен и развивается также компилятор фирмы Intel — Intel Fortran Compiler, который позволяет оптимизировать код под платформы Intel IA-32, x86_64 и IA-64.

Среди бесплатных компиляторов Фортран следует выделить компилятор от бывшей Sun Microsystems (сейчас Oracle), входящий в состав Sun Studio, который генерирует эффективный код под SPARCx86 и x86-64[11] и доступен для ОС SolarisOpenSolaris и GNU/Linux.

Фонд свободного программного обеспечения GNU выпускал открытый компилятор Фортрана-77 g77, доступный практически для любой платформы и полностью совместимый с GCC. Сейчас ему на смену пришел компилятор GFortran, в котором реализованы практически все конструкции стандарта Фортран-95 и многие конструкции стандартов Фортран-2003 и Фортран-2008. Он также полностью обратно совместим с Фортран-77. Также существует независимый проект g95 по созданию на основе GCC компилятора Фортран-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. Более того, в современных стандартах языка оставлен лишь классический оператор 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)