C、C++ 和 Java 有哪些 Fortran 2003 没有的?

计算科学 C++ 模拟 正则 C 爪哇
2021-12-03 01:29:22

您可能知道,Fortran 在科学中被广泛而长期地使用(?)。我听到很多人说我们自然科学家都应该迁移到 C++ 或 Java。我看到越来越多的人也建议使用 Python,我认为它基本上是一种像 Bash 这样的脚本语言,但它支持浮点数运算(我只将 Python 用于此目的)。

然而,我认识的其他人一直在说,自 Fortran 2003 以来,C++ 和 Java 等语言的所有旧优势都已无关紧要,而 Fortran 仍然具有快速、健壮和已经编写了大量代码的优势。所有类型的科学计算。

我不得不放弃 Fortran 的另一个动机是,当我对一些从事计算机工作的非自然科学家说我使用 Fortran 时,他们笑着问“Fortran 了吗?”,但除此之外,还有充分的理由放弃 Fortran Fortran 2003 之后的科学?C++ 和 Java 有哪些 Fortran 没有的?

3个回答

C++包括Fortran没有的一件事是对通用编程编译时代码评估的广泛支持。现代Fortran允许人们使用面向对象的功能,例如C++(在一定程度上)。

我会争辩说,这些通用编程特性,连同C++'s 的面向对象模型和标准库,允许构建非常简洁的抽象数据结构、算法和编程模式,而没有任何运行时开销。

因此,如果您发现自己在科学编程中使用了大量计算机科学(即二叉搜索树、哈希表、优先级队列等),那么C++可能是一个不错的选择。更多非结构化类型的科学计算(基于非结构化网格、图、网络、稀疏矩阵等)通常属于此类。尽管这些 CS 类型的语言特性有点像一把双刃剑——虽然有些人喜欢它们,但有些人却非常讨厌它们,并且更喜欢像Fortran.

虽然我个人更喜欢C++大多数项目,但我认为这Fortran是一种很好的语言,而且它已经过时的事实没有理由考虑放弃它。如果您主要处理数组和结构化问题,那么不太可能有更好的语言选择。至少没有什么动力去改成像C++!

我认为这真的归结为您使用该语言所做的工作。如果您正在做大量的数值计算,Fortran 是一种很好的语言,我不知道 C++ 或 Java 相对于 Fortran 2003 是否真的有优势。

如果您开始深入研究纯粹数字运算之外的应用程序,例如构建 GUI、应用程序、游戏、网站后端等,我认为 C++ 和 Java 可能更适合这项工作。部分原因是这些语言中构建的所有框架和库都可以解决这些问题。现在显然,您可以在 Fortran 中执行一些数字运算代码,然后在 Python/C++/Java 中构建 GUI 代码,然后为 Fortran 代码编写一个包装器以使用它,然后您就可以两全其美。但它只是归结为最适合手头的任务和限制。

无论如何,这是我的 2 美分。

为了扩展达伦斯的回答:

首先,在科学编程方面,Java 与 Fortran 2003 相比没有优势。语法更冗长(x.add(y) 而不是 x+y)并且性能明显更差。其他一些 JVM 语言,如 Clojure 或 Scala,至少会给你一个合理的语法来使用。

与 C++ 相比,数值工作负载的性能大致相同。事实上,大多数 Fortran 编译器都是支持 C++ 的工具链的一部分,并且许多(大多数?)优化都是相同的。就像 Darren 所说,C++ 支持泛型编程,它以零开销的方式实现,这意味着您可以进行高级抽象而无需支付任何额外费用。例如,像 Armadillo 或 Eigen 这样的矩阵库为您提供了类似于 Matlab 的语法,而没有任何性能损失。

Fortran 的主要优点是处理数组。对于几乎其他任何事情,C++ 将更容易、更易于维护和更快。