我读过Fortran仍然大量用于科学计算.对于已经大量投资Fortran的代码,这对我来说很有意义.
但是有理由将Fortran用于其他现代语言的新项目吗?与更流行的语言(C++,Java,Python,Ruby等)相比,Fortran中的语言设计决策是否更适合科学计算?例如,与我提到的其他语言相比,Fortran的特定语言功能是否允许编译器中的数值优化程度更高?
Jon*_*rsi 86
无论好坏,Fortran是唯一专门为科学数值计算而设计的主要语言.它的数组处理很好,在整个数组和切片上都有简洁的数组操作,可与matlab或numpy相媲美但超快.该语言经过精心设计,使得很难意外编写慢速代码 - 指针受到限制,以至于如果可能存在别名就会立即显而易见,作为标准示例 - 因此优化器可以在您的城镇中使用码.目前的化身有像coarray fortran这样的东西,并且在语言中内置并发和forall,允许分布式内存和共享内存并行性和矢量化.
Fortran的缺点主要是上述一个上行空间的另一面; Fortran有着悠久的历史.好处:大量的图书馆.缺点:吨历史包袱.
如果你必须进行大量的数字运算,Fortran仍然是最佳选择之一,这就是为什么世界各地超级计算中心运行的许多最复杂的模拟代码都写在其中的原因.但是当然,编写一个Web浏览器会是一种糟糕的,可怕的语言.对每个任务来说都是它的工具.
lax*_*xxy 19
我的主要原因是很好的数组符号,以及许多其他设计决策,使编写和调试科学代码更容易.事实上它通常是相关任务(阵列操作)性能方面的最佳选择,也不会伤害:)
老实说,我不会认为大多数语言被引用为Fortran的真正竞争对手 - Java和Ruby在便利性和性能方面远远落后,而C++是一种过于复杂和棘手的语言,无法推荐给任何主要工作的人在过去的几年中,除了C++中的日常编程之外,其他任何事情都是如此.Python和numpy可能是一个选择.我个人并不是这种语言的忠实粉丝,但我知道很多人经常使用numpy并且看起来很满意.
我看到的真正的竞争不是来自这些,而是来自Matlab,R和类似的语言,它们提供了类似的便利,并结合了许多标准库.幸运的是,通常可以在R或Matlab中启动项目,然后在Fortran中编写性能关键部分.
Bru*_*uno 16
很少有项目是全新的项目.我不确定它是否特定于科学计算,但至少在这个领域,您倾向于基于现有(科学)模型构建您的应用程序,可能由其他团体/人员制作.无论您是否愿意,您都必须处理一些遗留代码.
Fortran是许多科学家所教授的,他们需要实现的许多库是什么.其中许多可能不是计算机科学家或IT人员,更多的计算科学家.他们的主要目标很少是计算,这是他们的科学第一.虽然大量程序员在有机会时(包括在业余时间内)倾向于学习新的编程语言或框架,但大多数科学家会利用这段时间探索有关其科学的新思路.
一位受过Fortran(或任何语言)培训并被处于类似情况的人所包围的领域专家将没有动力远离它.它不只是现在其他语言可以像Fortran语言在性能方面一样好,他们需要多好:需要有一个很好的理由从你所拥有的,而希望知道的.
它在某种程度上也是一个"恶性"循环.我总是发现Java和Fortran之间的比较有点困难,仅仅是因为许多Java科学应用程序没有以Java方式编程.一些Java Grande基准测试应用程序看起来很像Fortran程序转换成C程序,复制/粘贴/调整到Java程序中(在一个方法中,将数组的长度作为数组本身旁边的额外参数传递给出一个线索,如果我记得很清楚).正因为如此,Java(例如)在科学界并没有获得很高的声誉,尽管它的表现越来越好.其结果是HPC专家和Java专家之间几乎没有重叠.即使是来自硬件供应商或库实现者,用户的需求也很少导致提供的支持很少,这反过来又阻碍了可能有兴趣转向其他语言的用户.
请注意,这并不妨碍相同(或其他)科学家将其他语言用于其他目的(例如工作流管理,数据管理,使用Matlab,Numpy等进行更快速的建模).
| 归档时间: |
|
| 查看次数: |
45429 次 |
| 最近记录: |