Most of these points really fail to convince. For example:
Fortran is fast, in cases faster than C
Which implementation of Fortran against which implementation of C? Speed is a property of a language implementation not of a language. There are some things in Fortran that make it easier for a compiler to optimise, such as stronger support for unalised objects, but C99 has had restrict and often Fortran compilers now use the same support from the mid-level optimisers down.
Parallelism – Performance necessitates parallelism, and Fortran was doing that before other languages even knew what it was
Which means that it got to make all of the mistakes that other languages learned from.
Arrays – Fortran treats arrays with the respect they should have. It supports multi-dimensional arrays, slicing, reduction, reshaping, and many optimizations for array based calculations like vectorization.
And in C++ there are a lot of tensor libraries that do the same.
Effort – Do you know how much effort would be involved in re-engineering a model? New languages are problematic.
Why is Fortran better here? How much does it cost and how easy is it to hire a competent Fortan programmer compared to an equally competent C, C++, or Rust programmer?
MPI – The message passing Interface (MPI) is the gateway to high-performance computing, and Fortran handles it very well.
MPI is explicitly a language-agnostic standard. There are multiple implementations in most HPC languages, including several for Fortran.
I’m a researcher who works on moving a gigantic Fortran project to C++, mostly for the reason that it has so many restrictions in terms of gpu acceleration and that we are starting to have lacking amounts of Fortran devs.
More and more people have problems getting student assistants in those areas. Also Memory leaks and UBs are persistent problems as well though the last point is always a controversial argument.
Compared to C++ we have a substantial set of simple features like templates missing in Fortran which make our lifes way easier if we want to abstract the device the code is running / saved on.
In HPC you want more control over array structures anyway, so I don’t understand why multidimensional arrays are helpful in the scientific HPC context. You can easily implement multidimensional operators in C++ with way more control over the data structure.
I’d agree with every point while adding that gpu frameworks usually have no or horrible Fortran support towards newer frameworks. There are also some ambiguous things in the CFI descriptors which results in different behaviour when passing those between C and Fortran. Though they are in the pipeline for clarification, the committee pipeline takes a lot of time and compilers have different interpretations of the current Fortran standard.
Edit: Ah. And llvm based Fortran Compilers are veeeeeery unpolished right now.
As far as I like to see some Fortran propaganda, the arguments : Because it was here and it does its jobs does not help to communicate about why we could have new models developed in Fortran and how it have updated (and its ISO cert along the way) since the good ol’days. Initiative to Fortran au goût du jour as https://fortran-lang.org/en/ are nice, will see how long they can get some exposure.
MPI – The message passing Interface (MPI) is the gateway to high-performance computing, and Fortran handles it very well.
MPI is is a 30 year old library for message passing across server nodes. Certainly a building block of a distributed calculation, albeit one that makes a mathematician or physicist into a distsys architect rather than letting them stay in the domain of their problem, but not exactly the one true gateway to HPC.
People often are surprised to find out how prevalent Fortran is in the real world
Not just any Fortran, but Fortran 77. Besides its limitations e.g. in terms of memory management I saw people implementing virtual machines and scripting languages in it.
Most of these points really fail to convince. For example:
Which implementation of Fortran against which implementation of C? Speed is a property of a language implementation not of a language. There are some things in Fortran that make it easier for a compiler to optimise, such as stronger support for unalised objects, but C99 has had
restrict
and often Fortran compilers now use the same support from the mid-level optimisers down.Which means that it got to make all of the mistakes that other languages learned from.
And in C++ there are a lot of tensor libraries that do the same.
Why is Fortran better here? How much does it cost and how easy is it to hire a competent Fortan programmer compared to an equally competent C, C++, or Rust programmer?
MPI is explicitly a language-agnostic standard. There are multiple implementations in most HPC languages, including several for Fortran.
I’m a researcher who works on moving a gigantic Fortran project to C++, mostly for the reason that it has so many restrictions in terms of gpu acceleration and that we are starting to have lacking amounts of Fortran devs. More and more people have problems getting student assistants in those areas. Also Memory leaks and UBs are persistent problems as well though the last point is always a controversial argument.
Compared to C++ we have a substantial set of simple features like templates missing in Fortran which make our lifes way easier if we want to abstract the device the code is running / saved on.
In HPC you want more control over array structures anyway, so I don’t understand why multidimensional arrays are helpful in the scientific HPC context. You can easily implement multidimensional operators in C++ with way more control over the data structure.
I’d agree with every point while adding that gpu frameworks usually have no or horrible Fortran support towards newer frameworks. There are also some ambiguous things in the CFI descriptors which results in different behaviour when passing those between C and Fortran. Though they are in the pipeline for clarification, the committee pipeline takes a lot of time and compilers have different interpretations of the current Fortran standard.
Edit: Ah. And llvm based Fortran Compilers are veeeeeery unpolished right now.
I’m hoping that eventually Chapel becomes the “better Fortran”, in the same way that Rust became a sort of “better C++”.
As far as I like to see some Fortran propaganda, the arguments : Because it was here and it does its jobs does not help to communicate about why we could have new models developed in Fortran and how it have updated (and its ISO cert along the way) since the good ol’days. Initiative to Fortran au goût du jour as https://fortran-lang.org/en/ are nice, will see how long they can get some exposure.
MPI is is a 30 year old library for message passing across server nodes. Certainly a building block of a distributed calculation, albeit one that makes a mathematician or physicist into a distsys architect rather than letting them stay in the domain of their problem, but not exactly the one true gateway to HPC.
Not just any Fortran, but Fortran 77. Besides its limitations e.g. in terms of memory management I saw people implementing virtual machines and scripting languages in it.