- •Управление векторами и матрицами
- •Компиляция и выполнение Компиляция
- •Связывание (редактирование связей )
- •Выполнение
- •Примеры
- •Соглашения о записи кода
- •Арифметические выражения
- •Операции отношения
- •Логические выражения
- •Сравнение символов
- •Переносимость результата
- •Спецификация массивов
- •Сечения массива Индивидуальные элементы
- •Сечения
- •Векторные указатели
- •Память для массива Физическая память:
- •Присваивание массива Присваивание всего массива
- •Присваивание секции (вырезки) массива
- •Повторная нумерация
- •Основные встроенные процедуры
- •Массивы нулевого размера
- •Массивы и производные типы
- •Инициализация массивов Конструкторы
- •Оператор data
- •Встроенные функции для массива
- •Пример упрощения
- •Пример исследования (запроса)
- •Пример конструирования
- •Пример локализации
- •Я Операторы управления
- •Вложения
- •Порядок операторов
- •Синтаксис программы Main
- •Формат представления программы
- •Программные единицы
- •Уровни доступа
- •Дополнения
- •Спецификация входных-выходных параметров
- •Использование модуля
- •Родовые подпрограммы
- •Интерактивный ввод-вывод
- •Простой Input и Output
- •Форматирование по умолчанию
- •Форматированный ввод-вывод I/o
- •Дескрипторы редактора
- •Вещественные - форма с фиксированной точкой
- •Вещественные - экспотенциальная форма
- •Символьные
- •Логические
- •Заполнение пробелами (пропуск символьных позиций)
- •Специальные символы
- •Списки ввода-вывода
- •Производные типы данных
- •Неявный цикл do
- •Ввод-вывод без продвижения
- •Файловый ввод-вывод
- •Номера устройств
- •Операторы read и write
- •Оператор write
- •Оператор open
- •Оператор close
- •Оператор inquirе
- •Динамический массив
- •Распределяемые массивы
- •Спецификация
- •Выделение и возвращение памяти
- •Статус распределяемых массивов
- •Потоки памяти (куча)
- •Что есть указатели?
- •Указатели и адресаты
- •Спецификации указателя Общая форма для операторов определения указателя и адресата такая:
- •Присваивание указателя
- •Разыменование (Dereferencing)
- •Статус (состояние) связи указателя
- •Динамическая память
- •Общие ошибки
- •Указатели в производных типах данных
- •Связанные списки
- •Параметры - указатели
- •Функции для указателей
Компиляция и выполнение Компиляция
После как программа на Fortran 90 спроектирована и ее исходный текст записан в файл (обычно с суффиксом .f90, а для Альфа с расширением .f), то следующим шагом является компиляция, инициализируемая командой
f90 <опции> filename.o filename.f <библиотеки> (для создания однопроцессорной программы)
или
vf90 <опции> filename.o filename.f <библиотеки> (для создания многопроцессорной программы)
типичный запуск такой
vf90 -O0 -o $1.o $1.f -lm
Каждая из этих команд вызывает компилятор, программу перевода исходного кода в промежуточный ассемблерный код и далее в машинный (объектный) код. Компилятор проверяет синтаксис операторов в соответствии со стандартом и семантикой операторов. Этот шаг генерирует версию объектного кода, которая сохраняется в другом файле, обычно с тем же именем, но с другим расширением (обычно .o в системе UNIX).
Связывание (редактирование связей )
Редактор связей инициализируется в системе Альфа командой
fld <опции> filename filename.o
Простой вариант такой
fld -o filename filename.o
Он выполняет включение некоторого кода, который требуется, из библиотек или других предваритеьно прокомпилиованных файлов. Он генерирует версию выполняемого кода, которая снова запоминается в файле, расширение которого не создается (в системе UNIX по умолчанию это имя a.out)
Для трансляции и загрузки можно создать bat. файл, например, такой vf90b.bat
vf90 -O0 -o $1.o $1.f -lm
fld -o $1 $1.o
Наличие такого файла вызова позволяет запускать компиляцию и редактирование связей командой
vf90b.bat filename
Выполнение
В однопроцессорном варианте инициализируется путем ввода имени выполняемого файла, что приводит к запуску программы.
Во время выполнения программа может потерпеть аварию, если происходят ошибки выполнения Как и в при использовании других компиляторов, логические ошибки не могут быть проверены компилятором и они зависят от программиста, находящего и удаляющего их. Единственный путь состоит в новых и новых тестированиях с данными, для которых известен результат. Нужно рассмотреть все возможные варианты исходных данных. Предварительная забота об этом должна быть осуществлена во время начального проектирования программы. Идентификация ошибок на фазе проектирования дешевле, чем на более поздних стадиях.
Для многопроцессорной задачи перед ее запуском должен быть создан паспорт с помощью команды madd. В паспорте задается имя файла, созданного загрузчиком, имя программы в program (его следует заканчивать символом "подчеркивание"), имена каталогов, где размещается абсолютный модуль, имя каталога, где размещаются файлы ввода-вывода. А также запрашиваются сведения о предполагаемом времени решения, числе требуемых процессоров и числе перезапусков задачи по аварии.
Все эти сведения вводятся в ответ на запросы системы, которые появляются после ввода команды.
madd <имя задачи>
Затем задача запускается командой run <имя задачи>
Примеры
Приведем примеры запусков компилятора f90 на Альфа
Команда
f90 ax.f
приводит к компиляции файла ax.f, созданию выполняемого файла a.out. Оптимизацию компилятор проводит по умролчанию по умолчанию (см. опиции компилятора).
Команда
f90 -o abc ax.f bx.f cx.f
использует флаг -o для именования выполняемого файла именем abc и компилирует файлы ax.f90, bx.f90, и cx.f90 как одну программу. Межпроцедурная оптимизация распространяется на ax, bx, и cx. Создается объектный файл abc.o и выполняемый файл *abc.
Команда
f90 -c ax.f bx.f cx.f
использует флаг -c для поддержания связи и изготовления индивидуальных объектных файлов ax.o, bx.o, и cx.o. Межпроцедурная оптимизация не проводится.
Команда
f90 -c -o abc.o ax.f bx.f cx.f
использует флаг -c для поддержания связи и флаг -o для создания единственного объектного файла abc.o. Межпроцедурная оптимизация проводится.
Сведения о трансляции с помощью vf90 и запуске многопроцессорных программ смотри в соответствующем разделе.
