Julia
seems to deliver much better on this "fast by default" promise, whereas Python is more like "fast if you have the right optimizations in place". Matlab
is a non-starter because of its proprietary license.
C
is a non-starter because it does almost nothing to "modernize" a Fortran codebase.
Go
is probably not sufficiently well-established for scientific computing?
Julia
could be a promising option because it combines the ease of Python with native performance.
Kotlin
might be interesting because it combines the strength of the JVM with the possibility to compile to native code.
Swift
would be a great language, but I am not sure whether it is sufficiently mature for my targeted domain.
C++20
and Rust
are additional options that might be interesting, but I fear the complexity of those languages (remember that this is for earth scientists, not computer scientists).
Which options would you prefer for a gradual Fortran replacement with NetCDF files?
Right now, I think that Julia
makes the cut, because it provides a great tradeoff between "fast scripting" and "high-performance scientific computing". But I am willing to hear other people's opinions, perhaps I have overlooked something.
Fortran has been a reliable lasting language for almost 3 quarters of a century and has excellent highly-optimized compiler support (Intel, GNU, NAG, IBM, PGI/NVIDIA, ...). If you want to write code that lasts decades, then port your FORTRAN77 code to modern Fortran with minimal effort and save yourself time, energy, money, and computational power.
A good start with modern parallel object-oriented Fortran is "Modern Fortran Explained: Incorporating Fortran 2018" by Metcalf et al.
If you decide to port your code effortlessly to modern Fortran, you can also get help from the official Fortran language website https://fortran-lang.org/ and the community of programmers on Fortran discourse: https://fortran-lang.discourse.group/
Update Nov 17, 2020
Just yesterday NVIDIA released a news post on its GPU implementation of the concurrent features of Fortran 2008 / 2018. Users can now write code in pure modern Fortran and let the compiler automatically offload it to GPUs for thousands-way parallelism.
What is the relevance and importance of this achievement? The same Fortran code that a user writes can now be parallelized via GPUs, distributed CPUs, OpenMP threads, or auto-parallelization features of the Fortran compiler depending on the user's platform and compiler choice. All of that complexity is hidden from the user. No need for preprocessing and conditional compilations anymore. This further enhances the excellent existing portability of Fortran programs across platforms and architectures.