roy*_*yco 30 c++ fortran language-comparisons
我正在尝试在Fortran和C++之间决定科学计算中的应用程序.我不清楚Fortran在性能方面是否仍然优于其他语言.例如,我相信由于Fortran强制执行严格别名,因此与C99之前的C相比,编译器可以进行更好的优化.我不确定C++在这里是如何适应的.
任何指导?
T.E*_*.D. 48
我看了一下最新的Fortran标准中的一些内容,坦率地说,我印象深刻.我20年前对这种语言的厌恶现在已经消失了.没有更多的行号和特殊列(可能会在地狱中燃烧).
Fortran已经在工程界大量使用了50年.如果您在这些圈子中工作,这将为您带来两个好处.首先,这些人非常关心优化.这意味着Fortran编译器往往拥有最好的优化器.由于缺乏别名,语言本身比Cish语言更加优化.
第二个优点是Fortran的数字运算库支持简直无法击败.最好的代码几乎总是成为您不必编写的经过良好调试的代码.
如果您的应用程序一般不属于科学,工程或数字运算,那么上述任何一项都不会对您造成太大影响,因此您可能最好还是寻找其他地方.
小智 23
另一个主要问题是学习曲线对于C++而言非常巨大,而对于Fortran(90及更高版本)来说则非常小.Fortran就像MATLAB一样运算......
matmul( matmul(transpose(B), D), B )norm2(x)call gesvd(A,S,u,vt)Fortran还有指针,动态内存,用户定义的数据类型等.
它得到了主要供应商(Intel/Sun/IBM/Cray/PGI/NAG等),开源(gfortan/g95)社区以及数字图书馆/ API开发商的支持,如PETSc,MPI等.
Heck新标准(Fortran 2008)甚至还有用于进行并行编程的共同阵列,而不需要MPI/OpenMP,而且一些Fortran编译器已经支持它(g95和Cray).
基本上它具有数值计算所需的所有优良品质,比MATLAB更容易,标准化,免费,可扩展(使用MPI/OpenMP和共阵),产生超快速/并行代码.
对于数字而言,没有什么能比Fortran更胜一筹,但不幸的是,除了Fortan以外,其他任 因此,如果您是一名安全工作且只进行数值/ HPC计算的科学家,那么请坚持使用Fortran,否则学习和使用C++,因为它广泛用于非数值软件.
For*_*ner 14
Fortran允许整个数组操作以及对数组部分的操作.有数组的C++类,但我不认为你可以像在Fortran中那样容易地引用像x(:,2:,1:N3:2)这样的切片.这让我们可以非常简洁地表达一些算法.
Fortran的数组操作的便利性扩展到派生类型的数组.假设你有一个日期数组:
类型日期
整数::月,日,
年末类型日期
type(date):: x(1000)
然后x表示日期数组,x%month表示月份数组,pack(x,x%month == 1)表示1月份的所有日期.有多少其他编程语言提供这种便利?
关于Fortran的一些早期评论 - "古老而恶心" - 是有偏见的,应该相应打折.让我争论相反.在我看来,Fortran 90的自由格式看起来比C和C++的语法更好,带有花括号和分号.将它们丢弃或错误地放入它们会导致C和C++中的错误,这些错误在Fortran中没有对应物.
Mar*_*ork 12
Fortran已针对数学(尤其是矩阵)操作进行了高度优化.
C++已针对对象使用进行了高度优化.
哪个更重要.
如下所述,C++具有优化的矩阵库.
但Fortran的全部目的是优化数学过程(尤其是矩阵运算).事实上,这些优化是建立在语言的基础之上(而不是一个库)并且在C++研究方面有大约二十年的开端我怀疑(但不知道一个事实)在这个领域Fortran正在进行赢得胜利.
fortran95及以上版本优于c ++(2003):
简而言之,如果您的程序或应用程序纯粹是科学计算使用fortran 95及以上,如果计算一些数字只是故事的一部分使用C++(或任何你觉得更好)
小智 6
我对Fortran的体验是它易于学习,清理(高度模块化),因此非常适合非主程关注的高度优化数值计算的非程序员.虽然可以在c ++中执行相同的优化(甚至可能在更大程度上),但是实现这些优化级别需要很多内在的理解.在矩阵计算方面,Fortran编译器开箱即用,通常会胜过c ++编译器.我还要补充一点,Fortran的关键字专门用于帮助程序员从数值例程中挤出更多性能.C++也有这个,但没有达到Fortran的程度.
另一个优点是Fortran不是特定于操作系统或体系结构的.换句话说,您在一个操作系统或体系结构上编写的Fortran代码应该很容易移植到另一个有Fortran编译器的代码.
另一个优点是现代Fortran通常向后兼容Fortran的旧代码库.多年来在Fortran中构建的代码库非常庞大且非常复杂(主要由科学家和数学家完成).
另外,就个人而言,我非常喜欢内置的文件处理功能,这些功能允许人们几乎立即读取数据文件并对其执行操作.Fortran中的许多其他内置函数旨在提供这种便利.C++主要提供构建块来执行此操作,这需要稍微冒汗,只需读取数据文件b/c,您需要了解有关分隔符的内容(Fortran允许您指定分隔符).
除此之外,我无法想到优势.大多数事情都是字符串操作,或者基于算法的操作,c ++作为一种语言,而且通常它的编译器更适合,并且通常会表现得更好.一个知识渊博的程序员可能更喜欢c ++,因为他/他将理解如何以可能比Fortran编译的例程执行的方式优化数值例程.另外,良好可靠的Fortran编译器并不像可靠的C++编译器那样容易.
我是编程新手.我已经在有限元领域进行了大约一年的编程.经过对网络的一些研究后,我决定使用fortran 2003.通过研究Chapman书,我学习了大约十天的模块化风格.这是一年了,我已经用模块化格式(可维护,可重复使用和整洁的代码)编写了大约四千个代码行,并且根本没有使用任何字符变量.我不认为通过研究C++,matlab,python,java ......十天你就能编写与fortran一样高效的数字代码.Fortran 2003还拥有我现在正在学习的所有必要的OOP功能.因此,就数值方面的语言强度而言,fortan并不缺乏任何东西(模块化风格,OOP风格,强大的阵列功能,强大的库,免费和商业最新的编译器,非常容易学习,非常高效......).像python/numpy这样的语言具有大部分功能但缺乏效率.像C++这样的语言也具有fortran的大部分功能(虽然对于数组计算来说,你必须导入一些库,但是数组计算的主要核心!!),但也许像我这样的人在fortran编写的程序会比一个由一些具有10年以上经验的c ++程序员编写的.
最后,我用fortran(模块化或OOP格式)进行繁重的数值计算,并使用python \numpy进行小尺寸计算(如创建绘图,小尺寸数组计算......).
| 归档时间: |
|
| 查看次数: |
26870 次 |
| 最近记录: |