Spec-Zone.ru › Ada 2012
Справочник по Ada 2012

B.5 Интерфейс с Fortran

Средства, относящиеся к интерфейсу с языком Fortran, — это пакет Interfaces.Fortran и поддержка указания аспекта Convention с convention_идентификатор Fortran.
Пакет Interfaces.Fortran определяет типы Ada, представления которых идентичны стандартным представлениям встроенных типов Fortran Integer, Real, Double Precision, Complex, Logical и Character в поддерживаемой реализации Fortran. Эти типы Ada могут использоваться для передачи объектов между программами Ada и Fortran.

Статическая семантика

В библиотечном пакете Interfaces.Fortran имеется следующее объявление:
with Ada.Numerics.Generic_Complex_Types; -- см. G.1.1
pragma Elaborate_All(Ada.Numerics.Generic_Complex_Types);
package Interfaces.Fortran is
pragma Pure(Fortran);
type Fortran_Integer is range определяется реализацией;
type Real is digits определяется реализацией;
type Double_Precision is digits определяется реализацией;
type Logical is new Boolean;
package Single_Precision_Complex_Types is
new Ada.Numerics.Generic_Complex_Types (Real);
type Complex is new Single_Precision_Complex_Types.Complex;
subtype Imaginary is Single_Precision_Complex_Types.Imaginary;
i : Imaginary renames Single_Precision_Complex_Types.i;
j : Imaginary renames Single_Precision_Complex_Types.j;
type Character_Set is тип символов, определяется реализацией;
type Fortran_Character is array (Positive range <>) of Character_Set
with Pack;
function To_Fortran (Item : in Character) return Character_Set;
function To_Ada (Item : in Character_Set) return Character;
function To_Fortran (Item : in String) return Fortran_Character;
function To_Ada (Item : in Fortran_Character) return String;
procedure To_Fortran (Item : in String;
Target : out Fortran_Character;
Last : out Natural);
procedure To_Ada (Item : in Fortran_Character;
Target : out String;
Last : out Natural);
end Interfaces.Fortran;
Типы Fortran_Integer, Real, Double_Precision, Logical, Complex и Fortran_Character совместимы с Fortran.
Функции To_Fortran и To_Ada отображают соответствие между типом Ada Character и типом Fortran Character_Set, а также между типом Ada String и типом Fortran Fortran_Character. Процедуры To_Fortran и To_Ada выполняют аналогичные действия по преобразованию строк, как и подпрограммы преобразования строк в пакете Interfaces.COBOL.

Требования к реализации

Реализация должна поддерживать указание аспекта Convention с Fortran convention_идентификатор для типа, подходящего для Fortran (см. B.1).

Разрешения реализации

Реализация может добавлять дополнительные объявления в пакеты интерфейса Fortran. Например, пакет Fortran-интерфейса для реализации Fortran 77 (ANSI X3.9-1978), который определяет типы Integer*n, Real*n, Logical*n и Complex*n, может содержать объявления типов с именами Integer_Star_n, Real_Star_n, Logical_Star_n и Complex_Star_n. (Это соглашение не должно применяться к Character*n, для которого аналогом Ada является ограниченный подтип массива Fortran_Character (1..n).) Аналогично, пакет Fortran-интерфейса для реализации Fortran 90, предоставляющий несколько видов встроенных типов, например, Integer (Kind=n), Real (Kind=n), Logical (Kind=n), Complex (Kind=n) и Character (Kind=n), может содержать объявления типов с рекомендуемыми именами Integer_Kind_n, Real_Kind_n, Logical_Kind_n, Complex_Kind_n и Character_Kind_n.

Рекомендации по реализации

Реализация Ada должна поддерживать следующие соответствия интерфейса между Ada и Fortran:
  • Процедура Ada соответствует подпрограмме Fortran.
  • Функция Ada соответствует функции Fortran.
  • Параметр Ada элементарного, массива или записи типа T передается как аргумент TF в процедуру Fortran, где TF — тип Fortran, соответствующий типу Ada T, а атрибут INTENT соответствующего формального аргумента соответствует режиму формального параметра Ada; используются соглашения о передаче параметров реализации Fortran. Для элементарных типов, при необходимости, используется локальная копия для обеспечения семантики передачи по значению.
  • Параметр Ada типа доступа к подпрограмме передается как ссылка на процедуру Fortran, интерфейс которой соответствует спецификации указанной подпрограммы.
ПРИМЕЧАНИЯ
14 Объект типа записи, совместимого с Fortran, объявленный в библиотечном пакете или подпрограмме, может соответствовать блоку Fortran common; тип также соответствует “производному типу” Fortran.

Примеры

Пример Interfaces.Fortran:
with Interfaces.Fortran;
use Interfaces.Fortran;
procedure Ada_Application is
type Fortran_Matrix is array (Integer range <>,
Integer range <>) of Double_Precision
with Convention => Fortran; -- хранится в Fortran в порядке
-- столбцов
procedure Invert (Rank : in Fortran_Integer; X : in out Fortran_Matrix)
with Import => True, Convention => Fortran; -- подпрограмма Fortran
Rank : constant Fortran_Integer := 100;
My_Matrix : Fortran_Matrix (1 .. Rank, 1 .. Rank);
begin
...
My_Matrix := ...;
...
Invert (Rank, My_Matrix);
...
end Ada_Application;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API