我读到Fortran仍然被大量用于科学计算。对于已经在Fortran中投入巨资的代码,这对我来说是有意义的。
但是,在一个新的项目中使用Fortran而不是其他现代语言有什么理由吗?与更流行的语言(C++、Java、Python、Ruby等)相比,Fortran中是否有使其更适合科学计算的语言设计决策?例如,与我提到的其他语言相比,Fortran是否有特定的语言功能可以在编译器中实现更高程度的数值优化?
发布于 2012-01-25 10:50:19
无论好坏,Fortran是唯一一种专门为科学数值计算设计的主要语言。它的数组处理很好,在整个数组和切片上都有简洁的数组操作,可与matlab或numpy相媲美,但速度超级快。这种语言经过精心设计,使得很难意外编写速度较慢的代码--指针受到这样的限制,如果可能出现别名,就会立即显现出来,就像标准示例一样--因此优化器可以在代码上大显身手。当前的实例有像coarray fortran这样的东西,并且在语言中内置了并发和forall,允许分布式内存和共享内存并行以及向量化。
Fortran的缺点主要是上面提到的优点之一的另一面;Fortran有着悠久的历史。好处:大量优秀的图书馆。缺点:成吨的历史包涵。
如果你必须做大量的数字运算,Fortran仍然是首选之一,这就是为什么在世界各地的超级计算中心运行的许多最复杂的模拟代码都是用它编写的。但当然,用它来编写web浏览器将是一种非常糟糕的语言。每项任务都有它的工具。
发布于 2012-01-25 11:17:47
很少有项目是全新的项目。我不确定它是否特定于科学计算,但至少在这个领域,您倾向于基于现有的(科学)模型来构建您的应用程序,这些模型可能是由其他团队/人员创建的。无论你想不想要,你总是要处理一些遗留代码。
Fortran是许多科学家所学到的,也是他们所需要的许多库的实现。他们中的许多人可能不是计算机科学家或IT人员,而是更多的计算科学家。他们的主要目标很少是计算,这是他们的科学第一。虽然许多程序员有学习新的编程语言或框架的倾向,但只要有机会(包括在业余时间),大多数科学家都会利用这些时间探索关于他们的科学的新想法。
一个受过Fortran (或任何语言)培训的领域专家,周围都是处于类似情况的人,他不会有离开它的动力。这不仅仅是因为现在其他语言在性能方面可以和Fortran一样好,它们还需要更好:需要有一个很好的理由来改变你所拥有和知道的东西。
在某种程度上,这也是一个“恶性”循环。我总是发现Java和Fortran之间的比较有点困难,原因很简单,因为许多Java科学应用程序不是用Java方式编写的。一些Java Grande基准测试应用程序看起来很像变成C程序的Fortran程序,然后被复制/粘贴/调整成Java程序(在一种方法中,将数组的长度作为额外的参数传递到数组本身旁边,如果我没记错的话,这给出了一个线索)。正因为如此,Java (例如)在科学界并没有得到很好的声誉,即使是its performance is getting better。例如,其结果是HPC专家和Java专家之间几乎没有重叠。即使来自硬件供应商或库实现者,用户的需求很少导致提供的支持也很少,这反过来又阻止了可能有兴趣迁移到其他语言的用户。
请注意,这并不排除相同(或其他)科学家将其他语言用于其他目的(例如,工作流管理、数据管理、更快的Matlab建模、Numpy等)。
发布于 2012-01-26 06:40:30
对我来说,主要原因是良好的数组表示法,以及许多其他设计决策,使编写和调试科学代码变得更容易。就相关任务(数组操作)的性能而言,它通常是最佳选择,这一事实也不会有任何影响:)
老实说,我不认为大多数被引用为Fortran的真正竞争对手的语言-- Java和Ruby在方便性和性能方面都远远落后,而C++是一种太复杂和棘手的语言,不能推荐给过去几年来主要工作不是用C++进行日常编程的任何人。不过,可以选择使用numpy的Python。我个人并不是这种语言的狂热粉丝,但我认识一些经常使用numpy的人,他们似乎对它很满意。
我看到的真正的竞争不是来自这些,而是来自Matlab、R和类似的语言,它们提供了类似的便利,并结合了许多标准库。幸运的是,通常可以在R或Matlab中开始一个项目,然后用Fortran编写性能关键的部分。
https://stackoverflow.com/questions/8997039
复制相似问题