Fortran 是一种多重调度编程语言吗?

wan*_*non 3 fortran multiple-dispatch

Fortran 中的声明是否使其成为正式实现多重分派的INTERFACE编程语言?(我问这个问题是因为链接的维基百科文章在其看似全面的支持相关范式的示例编程语言列表中并未包含 Fortran)。

Vla*_*r F 6

接口块(由关键字引入interface)通常用于通用接口。它们的工作方式类似于 C++ 泛型,没有动态调度。您必须区分静态调度和动态调度。Fortran 和 C++ 都仅通过使用类和继承/重载的多态性进行单一动态调度。

但是接口块本身在 Fortran 中有几种独立的用法,并且只有一些处理某种重载。通常它们就像 C++ 头文件中的函数声明一样工作。

以https://www.geeksforgeeks.org/function-overloading-c/为例:

void add(int a, int b)
{
  cout << "sum = " << (a + b);
}
 
void add(double a, double b)
{
    cout << endl << "sum = " << (a + b);
}
Run Code Online (Sandbox Code Playgroud)

在 Fortran 中,您可以执行相同的操作,但不是立即声明具有相同名称的两个子例程,而是定义两个具有不同名称的特定子例程,并为它们创建一个通用接口

interface add
  procedure add_ints
  procedure add_doubles
end interface

...

subroutine add_ints(a, b)
  integer :: a, b
  print *, "sum = ", (a + b)
end subroutine
 
subroutine add_doubles(a, b)
  double precision :: a, b
  print *, "sum = ", (a + b)
end subroutine
Run Code Online (Sandbox Code Playgroud)

这是古老的静态调度。