为什么fortran用于科学计算?
我读过Fortran仍被大量用于科学计算。 对于已经在Fortran中投入很大的代码,这对我来说是有意义的。
但是有什么理由使用Fortran而不是其他现代语言来实现新项目? Fortran中的语言devise决策与其说是比较stream行的语言(C ++,Java,Python,Ruby等)相比,是否更适合科学计算? 例如,Fortran的特定语言特性是否可以使编译器中的数值优化与我提到的其他语言相比具有更高的程度?
Fortran是或多或less是唯一专门为科学数值计算devise的主要语言。 它的数组处理是很好的,在整个数组和片上都有简洁的数组操作,可以和matlab或numpy比较,但是速度很快。 该语言经过精心devise,使得意外编写慢代码变得非常困难 – 指针的使用方式受到限制,如果可能会出现别名,就像标准示例一样 – 这样优化器就可以在您的城市码。 目前的版本有像coarray fortran这样的东西,并且在语言中进行了并发和补充,允许分布式内存和共享内存并行和vector化。
Fortran的缺点主要是上面提到的其中一个上升的另一面; Fortran历史悠久。 上行:大量的图书馆。 缺点:历史行李吨数。
如果您需要进行大量的数字处理,Fortran仍然是最好的select之一,这就是为什么世界各地超级计算中心运行的许多最复杂的模拟代码都被写入其中。 但是编写一个网页浏览器当然是一种可怕的,可怕的语言。
我的主要原因是好的数组符号,以及许多其他的devise决定,使编写和debugging科学代码更容易。 通常在相关任务(arrays操作)方面的性能方面是最好的select这一事实也不会伤害:)
老实说,我不认为大多数语言被引用为Fortran的真正竞争对手 – Java和Ruby在便利性和性能方面远远落后,而C ++则是太复杂和棘手的语言,推荐给主要工作的任何人在过去的几年里,除了用C ++进行日常编程外, Python与numpy可能是一个选项,但。 我个人不是这个语言的狂热粉丝,但是我知道一些经常使用numpy的人,看起来很满意。
我看到的真正的竞争不是来自这些,而是来自Matlab,R和类似的语言,提供了类似的便利,结合了许多标准库。 幸运的是,通常可以在R或Matlab中启动一个项目,然后在Fortran中写入性能关键部分。
很less有项目是全新的项目。 我不确定它是否是科学计算专用的,但至less在这个领域,您倾向于基于现有(科学)模型来构build您的应用程序,或许由其他团队/人员生成。 无论您是否需要,您都将不得不处理一些遗留代码。
Fortran是许多科学家的教育内容,他们需要的图书馆很多都是实施的。其中一些可能不是计算机科学家或IT人员,也不是计算科学家。 他们的主要目标是很less计算,这是他们的科学第一。 虽然大量的程序员有机会学习一门新的编程语言或框架(包括闲暇时间),但大多数科学家会利用这段时间来探索关于他们科学的新观点。
在Fortran(或任何语言)培训的领域专家,以及处于类似情况的人员围绕的领域专家将没有动力离开它。 不仅如此,现在其他语言在性能方面可以和Fortran一样好,它们需要好得多:需要有一个很好的理由来摆脱已有的知识。
这也是一个“恶性”的程度。 我总是发现Java和Fortran之间的比较有点困难,只是因为一些Java科学应用程序没有以Java方式编程。 一些Java Grande基准应用程序看起来很像Fortran程序转换成C程序,复制/粘贴/调整到Java程序中(在一个方法中,将数组的长度作为数组旁边的一个额外parameter passing给了一个线索,如果我记得很清楚)。 正因为如此,Java(例如)在科学界还没有很好的声誉,尽pipe它的性能正在变得越来越好 。 其结果是,例如,HPC专家和Java专家之间几乎没有重叠。 即使从硬件供应商或库的实现者,用户的需求很less导致提供的支持很less,这反过来阻碍了可能有兴趣转移到其他语言的用户。
请注意,这并不排除相同(或其他)科学家将其他语言用于其他目的(例如工作streampipe理,数据pipe理,使用Matlab,Numpy进行更快速build模等)。
据我所知,有些库是他们algorithm的最有效的实现,这使得Fortran在这种工作中受到欢迎,尽pipe语言有局限性。
其中一个原因是arrays的构build。 与大多数其他语言不同,它们是专栏。 这为他们的计算提供了更快的计算。