Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Interface 通过参数大小解析相同的泛型名称函数_Interface_Fortran - Fatal编程技术网

Interface 通过参数大小解析相同的泛型名称函数

Interface 通过参数大小解析相同的泛型名称函数,interface,fortran,Interface,Fortran,我希望有一个函数接口,根据数组参数的大小来解析要使用的特定过程。例如,我可以用一个程序处理少于或正好N个元素的向量,用另一个程序处理更长的向量。据我所知,Fortran只使用参数的类型、秩和关键字进行解析。为什么呢?编译器是否具有足够的智能来区分不同大小的数组,或者说编写一个这样的编译器本质上是不可能的 是否有一个解决方案来实现所需的功能?我当然知道,我可以编写一个带有if子句的子程序,以确定对哪个数组大小使用哪个过程。但是,这不会花费更多的CPU时间吗?特定过程的解析被设计为可以在编译时完成。

我希望有一个函数接口,根据数组参数的大小来解析要使用的特定过程。例如,我可以用一个程序处理少于或正好N个元素的向量,用另一个程序处理更长的向量。据我所知,Fortran只使用参数的类型、秩和关键字进行解析。为什么呢?编译器是否具有足够的智能来区分不同大小的数组,或者说编写一个这样的编译器本质上是不可能的


是否有一个解决方案来实现所需的功能?我当然知道,我可以编写一个带有if子句的子程序,以确定对哪个数组大小使用哪个过程。但是,这不会花费更多的CPU时间吗?

特定过程的解析被设计为可以在编译时完成。在一般情况下,数组的大小是一个运行时概念

如果您在编译时知道某个特定过程更适合于某个输入,那么您可以直接调用该特定过程


否则,使用IF来测试和分支大小(如果语言有这种魔力,那么不管怎样,它在幕后都会这么做)。不管怎样,该测试和分支可能比在运行时调用Reformate要快得多。

特定过程的解析已经设计好,可以在编译时完成。在一般情况下,数组的大小是一个运行时概念

如果您在编译时知道某个特定过程更适合于某个输入,那么您可以直接调用该特定过程


否则,使用IF来测试和分支大小(如果语言有这种魔力,那么不管怎样,它在幕后都会这么做)。无论如何,该测试和分支可能比在运行时调用restrape要快得多。

我找到了一个解决方法,即
将实际的N元素向量重塑为列大小为1的秩N数组。如果伪参数是
INTENT(IN)
,则可以动态执行此操作。任何比这个黑客更好的建议都是受欢迎的。为什么你需要写if子句一百万次呢?难道你不能编写一个包装程序来检查大小,然后调用相应的低级子程序吗?我在这里表达错误了。我的意思是if子句将被重复执行,因此会占用CPU时间。我可能误解了这一点,但我认为拥有一个解决大小为1的秩-1数组和较大大小的秩-1数组之间差异的接口会更快。。。。尽管我现在看到了IanH在下面所做的工作:因为我希望例程能够处理所有大小的秩-1数组(假设为单一类型),我可以看出这可能相当于if。我找到了一个解决方法,即将实际的N元素向量重塑为列大小为1的秩-N数组。如果伪参数是
INTENT(IN)
,则可以动态执行此操作。任何比这个黑客更好的建议都是受欢迎的。为什么你需要写if子句一百万次呢?难道你不能编写一个包装程序来检查大小,然后调用相应的低级子程序吗?我在这里表达错误了。我的意思是if子句将被重复执行,因此会占用CPU时间。我可能误解了这一点,但我认为拥有一个解决大小为1的秩-1数组和较大大小的秩-1数组之间差异的接口会更快。。。。尽管我现在看到了IanH在下面提出的观点:因为我希望例程处理所有大小的秩1数组(假设为单一类型),所以我可以看到这可能相当于if。即使我声明虚拟数组具有特定的
维度
,它的大小是否也是一个运行时概念?若有,原因为何?维度是硬编码的。为什么Fortran编译器对它不可知?要使它成为编译时,需要同时保持伪参数大小和实际参数大小不变,这在很大程度上不是一般情况。从语言标准的角度来看,编写(然后程序员理解)消歧需求规范以及如何解决特定过程将是一场噩梦。需要付出大量的努力才能获得微薄的收益。编译器很可能会考虑恒定的显式形状维度规范,以发出关于大小不匹配等的警告;但这与语言设计无关。即使我声明虚拟数组具有特定的
维度
,它的大小是否也是一个运行时概念?若有,原因为何?维度是硬编码的。为什么Fortran编译器对它不可知?要使它成为编译时,需要同时保持伪参数大小和实际参数大小不变,这在很大程度上不是一般情况。从语言标准的角度来看,编写(然后程序员理解)消歧需求规范以及如何解决特定过程将是一场噩梦。需要付出大量的努力才能获得微薄的收益。编译器很可能会考虑恒定的显式形状维度规范,以发出关于大小不匹配等的警告;但这和语言设计是分开的。