РУКОВОДСВО ПОЛЬЗОВАТЕЛЯ

Linux Edition. Revision B
перевод Балуева А. Н.

Оглавление

  • ГЛАВА 6.Сервисные программы
  • Приложение A. Рекомендации по программированию

    ГЛАВА 6.Сервисные программы

    В начало страницы
    
    
    В этой главе описываются следующие сервисные программы:
           * fot
           * hdrstrip.f90
           * sequnf.f90
           * tryblk.f90
    
    
    fot
           Обращение к fot:
                         fot [file1] [file2]
     fot есть программа, которая конвертирует файлы, созданные программой  LF95 и
    открытые как CARRIAGECONTROL='FORTRAN', в форму, удобную для печати.
    fot интерпретирует каждый первый символ каждой строки файла  file1 как
    используемый для печати символ  Fortran управления кареткой и выдает файл
    file2 в формате Linux.  Первый символ каждой строки файла file1 претерпевает
    следующие изменения:
           пусто: символ убирается, что приводит к печати строки с простым шагом
    (single spacing). Строка из всех пустышек конвертируется в строку без символов.
           0:  Символ заменяется символом новой строки, что вызывает печать
     строки  с двойным шагом.
           1:  Символ заменяется на символ новой страницы, что приводит к печати
    строки с начала новой страницы.
           +:  Если это первая строка файла, символ убирается.  В противном случае
    он заменяется символом возврата каретки, что приводит к печати строки поверх
    предыдущей.
           Примеры
           1. fot < infile > outfile
           2. a.out | fot | lpr
           3. fot infile outfile
    
    

    Диагностики

    В начало страницы

    Если первый символ строки отличен от всех, перечисленных выше, то строка остается без изменений. После завершения команды выдается диагностическое сообщение в стандартный файл ошибок, указывающее количество строк, не содержащих правильные Fortran-символы управления кареткой. Например: invalid n lines carriage control conventions in file1 (нарушено соглашение об управлении кареткой в n строках файла file1)

    hdrstrip.f90 hdrstrip.f90 есть исходный файл Fortran, который можно компилировать, компоновать и выполнять с помощью LF95. Он конвертирует файлы прямого доступа LF90 к стилю LF95.

    sequnf.f90 sequnf.f90 есть исходный файл Fortran, который можно компилировать, компоновать и исполнять с LF95. Он конвертирует неформатированные последовательные файлы LF90 к стилю LF95.

    tryblk.f90 tryblk.f90 есть исходный файл Fortran, который можно построить с LF95. Он проверяет диапазон BLOCKSIZE и выдает требуемое время для каждого случая. Результаты можно использовать для определения оптимального значения для вашей системы, указываемого в ваших программах. Заметим, что некоторый BLOCKSIZE может не быть хорошим для других систем.

    Приложение A. Рекомендации по программированию

    В начало страницы

    Это приложение содержит информацию, которая может помочь создавать улучшенные программы на LF95.

    Вопросы эффективности

    В начало страницы

    В большинстве случаев наиболее эффективным решением задачи программирования является то, которое просто и естественно. Редко приходится приносить в жертву ясность и элегантность, чтобы сделать программу более эффективной.

    Следующие наблюдения, которые неприложимы к другим реализациям, можно принимать во внимание, когда эффективность программы критична:

    * Для фиктивных аргументов используйте в качестве нижней границы измерений ноль (а не единицу, которая устанавливается по умолчанию). Так, объявляйте массив A как A(0:99), а не как A(100).

    * Одномерные массивы более эффективны, чем двумерные, двумерные более эффективны чем трехмерные, и т.д.

    * Выбирайте длину записи файла прямого доступа равной степени двойки.

    * Неформатированный ввод/вывод для чисел работает быстрее.

     * Форматированный символьный ввод/вывод работает ,быстрее при
                        CHARACTER*256 C
               чем при
                        CHARACTER*1 C(256)
    

    Побочные эффекты

    В начало страницы

    В LF95 аргументы передаются в подпрограммы по адресу, и подпрограммы ссылаются на эти аргументы так, как они определены в вызванной подпрограмме. Из-за способа передачи аргументов могут появиться следующие побочные эффекты:

    * Объявление фиктивных аргументов с числовым типом, отличным от типа, объявленного в вызывающей программной единице может привести к непредсказуемым результатам и абортированию по ошибке NDP.

    * Объявление фиктивных аргументов в вызываемой программной единице более обширными (larger) чем в вызывающей программной единице может привести к модификации кода в других переменных и частях программы и к непредсказуемым результатам.

    * Если некоторая переменная фигурирует дважды как фактический аргумент в отдельном операторе CALL или ссылке на функцию, то соответствующие фиктивные аргументы в подпрограмме будут ссылаться на одну и ту же ячейку. При каждом изменении одного из этих фиктивных аргументов будет изменяться и другой. В соответствии со стандартами Fortran, компилятор и/или исполнительная программа во время исполнения не должны замечать такие изменения; это разрешает производить оптимизацию (например, держать второй фиктивный аргумент, или его элементы, в регистрах).

    * Аргументы функций передаются таким же самым образом, как аргументы подрутин, так что изменение какого-нибудь фиктивного аргумента в функции будет также изменять соответствующий аргумент при вызове функции:

    y = x + f(x)

    Результат приведенного выше оператора будет неопределенным, если функция f изменяет фиктивный аргумент x.

    Форматы файлов

    Форматированный последовательный файловый формат

    В начало страницы

    Файлы, управляемые форматированными последовательными операторами ввода/вывода, имеют записи неопределенной длины. Одна запись Fortran соответствует одной логической записи. Длина записи формата с неопределенной длиной зависит от обрабатываемой записи Fortran. Максимальная длина может быть определена в операторе OPEN в RECL= specifier. Символ перехода к новой строке оканчивает логическую запись. Описатели редактирования $ или \ для формата указаны в форматирующем последовательном операторе вывода, запись Fortran не содержит символа продвижения строки.

    Неформатированный последовательный файловый формат

    В начало страницы

    Файлы, обрабатываемые с использованием неформатированных последовательных операторов ввода/вывода, имеют формат с записями неопределенной длины. Одна запись Fortran соответствует одной логической записи. Длина такой записи зависит от длины записи Fortran. Запись Fortran включает 4 байта, добавленные к началу и концу логической записи. Максимальная длина может быть указана в операторе OPEN с RECL= specifier. Начальная область используется, когда исполняется бесформатный последовательный оператор READ. Конечная область используется оператором BACKSPACE.

    Прямой файловый формат (Форматированный)

    В начало страницы

    Файлы, обрабатываемые форматированными прямыми операторами ввода/вывода, имеют формат с записями фиксированной длины. Одна запись Fortran соответствует одной логической записи. Длина логической записи определяется оператором OPEN в RECL= specifier. Если запись Fortran короче чем логическая запись, оставшаяся часть заполняется пробелами. Длина записи Fortran не должна превышать длину логической записи. Такой формат записи фиксированной длины единствен в Fortran.

    Прямой файловый формат (Бесформатный)

    В начало страницы

    Файлы, обрабатываемые бесформатными операторами ввода/вывода прямого доступа, имеют записи фиксированной длины. Одна запись Fortran может соответствовать более чем одной логической записи. Длина записи должна определяться в операторе OPEN с RECL= specifier. Если запись Fortran оканчивается внутри логической записи, оставшаяся часть заполняется двоичными нулями. Если длина записи Fortran превышает длину логической записи, оставшиеся данные переходят в следующую запись.

    Двоичный файловый формат

    В начало страницы

    Файлы, открытые с FORM='BINARY' (или ACCESS='TRANSPARENT'), обрабатываются как поток байтов без разделителей записей. Хотя файлы любого формата могут обрабатываться как двоичные, нужно знать их формат для правильной обработки. Заметим, что хотя ACCESS='TRANSPARENT' поддерживается в LF95, FORM='BINARY' есть предпочтительный метод открывать такие файлы. Заметим также, что эти спецификаторы в настоящее время не входят в стандарт Fortran и могут изменяться от одного компилятора к другому; однако, это может измениться в будущих версиях стандартов Fortran.

    Записи Endfile

    В начало страницы

    Запись endfile должна быть последней записью последовательного файла. Такая запись не имеет атрибута длины. Оператор ENDFILE записывает ее в последовательный файл. После по крайней мере, одного исполнения оператора WRITE запись конца файла производится при следующих условиях:

    * Выполнен оператор REWIND.
    * Выполнен оператор BACKSPACE.
    * Выполнен оператор CLOSE.
    

    Перенос бесформатных файлов

    В начало страницы

    Бесформатные файлы, созданные на других платформах, могут адаптироваться с помощь некоторых параметров времени исполнения. Числовые данные с порядком байтов, начиная со старшего ("big-endian format") (целые, логические и IEEE с плавающей точкой) могут адаптироваться с параметром времени исполнения T и числа с плавающей точкой в формате IBM370 могут адаптироваться с параметрами времени исполнения C и M (см. "Параметры времени исполнения на стр. 111). По умолчанию LF95 читает и пишет числовые данные в "little-endian" формате (начиная с младшего байта).

    Создание файлов: имена по умолчанию

    В начало страницы

    Если файл открывается без указания его имени, предполагается, что он получает имя fort.unit, где unit есть номер устройства, указанного в операторе OPEN. Если файл открывается как STATUS='SCRATCH' и FILE= не указано, то файлу присваивается случайное имя и он создается во временном каталоге системы. Если же FILE= указано, то файл создается в текущем рабочем каталоге. В обоих случаях файл уничтожается после окончания программы, даже если он закрывается с STATUS='KEEP' (см. "Промежуточные файлы" на стр. 11). При нормальном завершении программы все файлы закрываются.

    Время компоновки

    В начало страницы
    
    Можно сократить время компоновки, сократив количество именованных блоков
    COMMON.  Вместо кода:
                              common /a1/ i
                              common /a2/ j
                              common /a3/ k
                              ...
                              common /a1000/ k1000
    
              пишите:
    
                          common /a/ i,j,k, ..., k1000
    
    
    

    Проблема Year 2000

    В начало страницы

    Проблема "Год 2000" возникает, когда компьютерная программа использует только две цифры для представления текущего года и предполагает, что текущий век есть 1900. Компилятор может искать признаки того, что это может случиться в программе и выдавать предостережение, но он не может предвидеть все случаи этой проблемы. В конечном счете, это -- обязанность программиста исправить положение модификацией программы. Наиболее вероятный источник трудностей в программах на Fortran состоит в использовании устаревшей подрутины DATE(). Хотя LF95 компилирует и компонует программы, использующие DATE(), такие действия крайне нежелательны; рекомендуется использовать вместо нее подрутину DATE_AND_TIME(), которая возвращает четыре цифры.

    LF95 может быть настроен на выдачу предупреждений во время исполнения при
    вызовах  DATE(). Это можно сделать, использовав параметры времени исполнения
    -Wl,Ry,li, например:
            myprog.exe -Wl,-Ry,-li
    Дополнительную информацию о параметрах времени исполнения см. в " Параметры
    времени исполнения" на стр. 113.
    

    Предельные возможности операций

    В начало страницы
    
                                                                   
                           Таблица 11: Пределы в операциях LF95
     .........................................................................
                   Объект                             Maximum
    ..........................................................................
             Размер программы              Доступное количество памяти (включая
                                           виртуальную), но не более 4 Гигабайт.
    
    Колич. одновременно открытых файлов    Зависит от системы (см пределы команд
                                           csh; нужно вычесть три из системных
                                           пределов для устройств Fortran 0, 5
                                           и 6)                
     Длина данных типа CHARACTER           65,000 байт
    
     Размер блока в I/O                    65,000 байт
    
     Длина записи в I/O                    2,147,483,647 байт
    
     Размер файла I/O                      2,147,483,647 байт
    
    Макс. количество I/O записей          2,147,483,647 разделить на значение
    (файлы прямого доступа )               RECL= спецификатор
    
    Глубина вложения функций, секций
    массивов, элементов массивов и                       255
    ссылок на подцепочки
    
    Глубина вложений DO, CASE  и
    операторов IF                                         50
    
    Глубина вложения неявных циклов DO                    25
    
    Глубина вложения файлов INCLUDE                       16
    
    Количество измерений массивов                          7
    
    ..............................................................................
                                T, где абсолютное значение T, полученное
                                по приведенной ниже формулы, не должно
                                 превышать 2147483647:
    
                                      n      i     
                                        i
      Размер массива             T = l1xs + Е {lix{П(dm-1)xs}}
      							 %                   & -
                                  i=2    m=2      
                                       )
    
                                           Здесь:        
                                            н + $
                                                    ,
                                                     (
                                           n: номер измерения
                                           s: длина элемента массива
                                           l: нижние границы измерений
                                           d: размеры измерений
                                           T: размер массива согласно определению
    
         (Русская буква Е означает сумму по i от 2 до n)
    ..............................................................................
    
    
В начало страницы

<<< Оглавление Страницы: 6  7 >>>