Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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

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
现代Fortran与现代C++;? 我试图在FORTRAN和C++之间进行一个科学计算应用的决定。我不清楚Fortran在性能方面是否仍优于其他语言。例如,我相信由于Fortran强制执行严格的别名,与C99之前的C相比,编译器可以进行更好的优化。我不确定C++是如何适应的。_C++_Fortran_Language Comparisons - Fatal编程技术网

现代Fortran与现代C++;? 我试图在FORTRAN和C++之间进行一个科学计算应用的决定。我不清楚Fortran在性能方面是否仍优于其他语言。例如,我相信由于Fortran强制执行严格的别名,与C99之前的C相比,编译器可以进行更好的优化。我不确定C++是如何适应的。

现代Fortran与现代C++;? 我试图在FORTRAN和C++之间进行一个科学计算应用的决定。我不清楚Fortran在性能方面是否仍优于其他语言。例如,我相信由于Fortran强制执行严格的别名,与C99之前的C相比,编译器可以进行更好的优化。我不确定C++是如何适应的。,c++,fortran,language-comparisons,C++,Fortran,Language Comparisons,任何指导?Fortran已经针对数学(尤其是矩阵)类操作进行了高度优化 C++已经针对对象使用进行了高度优化 哪个对你更重要 下面C++中有一个优化的矩阵库。 但是Fortran的全部目的是优化数学过程(尤其是矩阵运算)。事实上,这些优化是建立在语言(而不是库)的基础上的,并且在C++研究上有二十年的开端,我怀疑(但不知道事实)FORTRAN在这方面会取得成功。 < P>给出了像LAPACK ++这样的科学计算包的存在,现代Fortran已经高度优化,甚至没有性能优势。C++可能有其缺点,但性能

任何指导?

Fortran已经针对数学(尤其是矩阵)类操作进行了高度优化

C++已经针对对象使用进行了高度优化

哪个对你更重要

下面C++中有一个优化的矩阵库。


但是Fortran的全部目的是优化数学过程(尤其是矩阵运算)。事实上,这些优化是建立在语言(而不是库)的基础上的,并且在C++研究上有二十年的开端,我怀疑(但不知道事实)FORTRAN在这方面会取得成功。

< P>给出了像LAPACK ++这样的科学计算包的存在,现代Fortran已经高度优化,甚至没有性能优势。C++可能有其缺点,但性能不是其中之一。

IMRO,唯一重要的真正重要的是编程FORTRAN允许您更容易重用大量现有的FORTRAN代码和库。如果你手头有50个Fortran程序员,他们的项目和时间有限,你会先教他们所有的C++,还是接受他们使用他们喜欢的语言?

< P>我看了一下,坦白地说,我印象深刻。20年前我对这门语言的许多憎恨现在都消失了。不再有行号和特殊列(愿它们在地狱中燃烧)

Fortran在工程界已经大量使用了50年了。如果你在这些圈子里工作,这会给你带来两个好处。首先,这些人非常关心优化。这意味着Fortran编译器往往拥有最好的优化器。由于缺少别名,该语言本身也比Cish语言更易于优化

第二个优点是Fortran对数字运算的库支持是无与伦比的。最好的代码几乎总是经过良好调试的代码,您不必编写这些代码


<>如果你的应用程序一般不属于科学、工程或数字处理,那么上述两个都不会对你来说是个大问题,所以你最好别处看看。

< P>随着模板元编程的出现,特别是C++在数值计算中达到FORTRAN联盟的目的。因此,速度不再是一个问题。然而,关于其他问题,还有一些事情要说:

<强> Pro FORTRAN < /Str> >:老年人可能比C++更了解它。 Contra-FORTRAN:这是一种令人厌恶的、陈旧的、基本上被废弃的语言,从你开始项目的那一刻起,它就已经过时了。无论谁现在学习编程,都不太可能学习FORTRAN,因此您可能会在以后为项目寻找程序员时遇到问题

Pro C++:它相对现代,编译器仍在大幅改进。它允许您编写非常有表现力的代码

Contra C++:一些模板错误消息会让你哭泣
  • B'DB是
    matmul(matmul(转置(B),D),B)
  • 向量的L2范数是
    norm2(x)
  • 使用LAPACK的矩阵SVD是
    调用gesvd(a、S、u、vt)
Fortran还具有指针、动态内存、用户定义的数据类型等

它得到了主要供应商(Intel/Sun/IBM/Cray/PGI/NAG等)、开源社区(gfortan/g95)以及数字库/API(如PETSc、MPI等)开发人员的良好支持

新标准(Fortran 2008)甚至有用于执行并行编程的联合数组,而不需要MPI/OpenMP,一些Fortran编译器已经支持它(g95和Cray)

基本上,它具有数值计算所需的所有优良品质,比MATLAB更简单,标准化、免费、可扩展(使用MPI/OpenMP和co阵列),生成速度极快/并行代码


对于数字来说,没有什么能比得上Fortran,但不幸的是,对于其他任何东西,一切都比Fortan强。因此,如果你是一个科学家,有一个安全的工作,并且只做数值/ HPC计算,那么坚持FORTRAN,否则学习和使用C++,因为它被广泛地用于非数值软件。

< P> FORTRAN允许整个数组操作和对数组部分的操作。有一些C++类用于数组,但是我不认为你可以像Fortran那样轻松地引用一个像X(2,1:N3:2)这样的切片。这让我们可以非常简洁地表达一些算法

Fortran数组操作的便利性扩展到派生类型的数组。假设您有一个日期数组:

键入日期
整数:月、日、年
结束日期

类型(日期):x(1000)

然后x表示日期数组,x%month表示月份数组,pack(x,x%month==1)表示1月份的所有日期。有多少其他编程语言提供了这种便利


早期关于Fortran的一些评论——“陈旧而令人厌恶”——是有偏见的,应该相应地予以打折。让我提出相反的论点。在我看来,Fortran 90的自由格式看起来比C和C++的语法好,带有花键和分号。把它们放在外面或错误地放入它们会导致C和C++中的错误,FORTRAN中没有对应的。