现代Fortran相比现代C++有哪些优势?

12 浏览
0 Comments

现代Fortran相比现代C++有哪些优势?

我正在考虑在科学计算应用中选择Fortran还是C++。对于性能方面,目前我不清楚Fortran是否仍然优于其他语言。例如,我相信由于Fortran强制执行严格的别名规定,与C语言(C99之前)相比,编译器可以进行更好的优化。我对C++在这方面的表现不确定。\n有什么指导吗?

0
0 Comments

现代Fortran相比现代C++有哪些优势?

Fortran允许进行整个数组操作,也允许对数组的部分进行操作。虽然C++有数组类,但我认为在C++中不像在Fortran中那样容易引用切片,比如x(:,2:,1:N3:2)。这使得某些算法的表达非常简洁。

Fortran的数组操作的便利性也适用于派生类型的数组。假设你有一个日期的数组:

type date

integer :: month,day,year

end type date

type(date) :: x(1000)

那么x表示日期的数组,x%month表示月份的数组,pack(x,x%month==1)表示一月份的所有日期。还有哪些编程语言能够提供这种便利?

关于Fortran的一些早期评论——“古老且令人讨厌”——是有偏见的,因此应该予以忽略。让我反驳这种观点。在我看来,Fortran 90的自由格式看起来比C和C++的语法更好,它们的花括号和分号。在C和C++中,忽略或错误地放置花括号和分号会导致错误,而在Fortran中却没有这样的问题。

PowerShell和Haskell的lens(但具有可怕的语法和复杂的实现语义)

0
0 Comments

现代Fortran相对于现代C++的优势是什么?

现代Fortran相对于现代C++具有以下优势:

1. 学习曲线较小:相比之下,C++的学习曲线非常陡峭,而Fortran的学习曲线相对较小。

2. 类似于MATLAB:Fortran类似于MATLAB,具有类似的操作,例如矩阵相乘可以使用matmul函数,向量的L2范数可以使用norm2函数,使用LAPACK进行矩阵的SVD可以使用gesvd函数。

3. 支持指针、动态内存、用户自定义数据类型等:Fortran也支持指针、动态内存、用户自定义数据类型等高级特性。

4. 得到主要供应商(Intel/Sun/IBM/Cray/PGI/NAG等)、开源社区(gfortan/g95)以及数值库/API(如PETSc、MPI等)的支持:Fortran得到了主要供应商和开源社区的广泛支持,同时也得到了数值库/API的开发者们的支持。

5. Fortran 2008标准支持共数组(co-arrays):Fortran 2008标准引入了共数组,可以进行并行编程,无需使用MPI/OpenMP,而一些Fortran编译器已经开始支持共数组。

6. 适用于数值计算:Fortran具备进行数值计算所需的所有优点,比MATLAB更容易上手,是一种标准化、免费、可扩展的语言(通过MPI/OpenMP和共数组),能够生成高性能/并行代码。

对于数值计算来说,没有什么能比得上Fortran,但是对于其他类型的软件,Fortran则不如其他语言(如C++)。

至于解决方法,如果你是一名科学家,从事安全工作,并且只进行数值/高性能计算,那么最好继续使用Fortran。否则,建议学习并使用C++,因为C++在非数值软件领域得到了广泛应用。

需要注意的是,Intel Fortran编译器自2011年1月起已经开始支持共数组。

0
0 Comments

现代Fortran相对于现代C++有哪些优势?

出现的原因:

- 作者查看了最新的Fortran标准,并对其印象深刻。

- Fortran在工程领域已经被广泛使用了50年,因此在这些领域工作的人有两个优势。

- 工程界非常关注优化,因此Fortran编译器的优化器通常是最好的。

- Fortran语言本身也比C系语言更容易优化,因为它没有别名问题。

- Fortran在数值计算方面的库支持是无可比拟的。

解决方法:

- 如果你的应用程序不属于科学、工程或数值计算范畴,那么以上两个优势对你来说可能不是很重要,所以你可能会更好地选择其他语言。

- C语言中的别名问题通过使用restrict关键字得到了解决。

- 可以很方便地在C++中使用Fortran库,而且C++库甚至可能比Fortran更快,因为C++更好地支持内联(特别是使用基于模板的表达式库)。

- 使用一种有助于高级问题的语言,不确定C++和Fortran是否符合要求。

文章内容如下:

现代Fortran相对于现代C++有哪些优势?

我查看了最新的Fortran标准,老实说我对其中的一些内容印象深刻。20年前我讨厌的很多东西现在都已经消失了,不再有行号和特殊列(愿它们下地狱)。

Fortran在工程界已经被广泛使用了50年。如果你在这些领域工作,这给你带来了两个优势。首先,这些人对优化非常在意。这意味着Fortran编译器往往拥有最好的优化器。由于缺乏别名问题,这种语言本身也更容易优化。

第二个优势是Fortran在数值计算方面的库支持无与伦比。最好的代码几乎总是那些经过良好调试的代码,你不需要自己编写。

如果你的应用程序不属于科学、工程或数值计算范畴,那么以上两个优势对你来说可能不是很重要,所以你可能会更好地选择其他语言。

在C语言中,别名问题并不像以前那么严重,因为可以使用restrict关键字解决。但还是有一点问题。

从C++中很容易使用Fortran库。而且由于C++更好地支持内联(特别是使用基于模板的表达式库),C++库甚至可能比Fortran更快。因此,总结一下,选择一种有助于高级问题的语言可能更好,不确定C++和Fortran是否符合要求。

值得一提的是,许多商用飞机系统的代码(例如FMC、导航系统等)仍然依赖Fortran进行导航计算。不确定这是否只是一种传统,或者是因为数值处理准确,或者是因为工程师们在FORTRAN上接受过培训,但这些系统通常非常保守,并且拥有多年的可靠性。这些安全关键系统的编译器也非常可靠,这是支持运行这些系统的另一个因素。这并不意味着你今天会选择Fortran,但当你飞行时,Fortran帮助你保持安全!

0