现代Fortran相比现代C++有哪些优势?
现代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(但具有可怕的语法和复杂的实现语义)
现代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月起已经开始支持共数组。
现代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帮助你保持安全!