fortran - Fortran 是多调度编程语言吗?

标签 fortran multiple-dispatch

Fortran 中的INTERFACE 语句是否使其成为正式实现multiple dispatch 的编程语言? ? (我问是因为所链接的维基百科文章在其看似全面的支持相关范式的示例编程语言列表中并未包含 Fortran)。

最佳答案

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

但是接口(interface) block 本身在 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);
}

在 Fortran 中,你可以做同样的事情,但不是直接声明两个具有相同名称的子程序,而是定义两个具有不同名称的特定子程序,并为它们创建一个通用接口(interface)

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

这是很好的旧静态调度。

关于fortran - Fortran 是多调度编程语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72756262/

相关文章:

compiler-errors - 为什么我的代码无法在fortran中编译?

function - 初学者阅读 Fortran 代码但无法理解这一点

julia - 在两个文件中重载一个函数(在 Julia 中)

methods - Julia 用了什么方法?

python - 在 Cython 中使用 Fortran NumPy 运算和 NOGIL,什么是相当于 NumPy 乘法的 Fortran 库?

c++ - 是否可以将指针的 C++ vector 传递给 Fortran?

不同模块上的 Fortran 扩展类型

julia - 是否可以在 NOT-a-type 上进行多次调度?

c++ - Loki 的多重方法是否进入了 C++11?