[Numpy-discussion] Fortran was dead ... [was Re: rewriting NumPy code in C or C++ or similar]
lists_ravi at lavabit.com
Wed Mar 16 15:10:25 EDT 2011
On Monday 14 March 2011 15:02:32 Sebastian Haase wrote:
> Sturla has been writing so much about Fortran recently, and Ondrej now
> says he has done the move from C/C++ to Fortran -- I thought Fortran
> was dead ... !? ;-)
> What am I missing here ?
Comparing Fortran with C++ is like comparing Matlab with Python. Fortran is
very good at what it does but it does not serve the same audience as C++. The
typical comparisons work like this:
1. C++ does not have a standard array type but Fortran does. Python does not
have a standard numerical array type either; numpy is nice, but, it is an
external package. The point is that you pick the external array type that
works well for you in Python/C++ but you use the built-in array type in
Matlab/Fortran. Whether the flexibility is a problem or a god-send is entirely
up to you. For modeling high-performance algorithms in silicon, usually in
fixed-point, Fortran/Matlab are worthless, but C++ (and to some extent,
python) works very well.
2. C++ (resp. python+numpy) does not perform as well as Fortran (resp.
Matlab). The issue with C++ is that aliasing is allowed, but virtually all
compilers will allow you to use "restrict" to get almost the same benefits as
Fortran. The analogous python+numpy issue is that it is very hard to create a
good JIT (unladen-swallow was, at best, a partial success) for python while
Matlab has a very nice JIT (and an even better integration with the java
3. "Template metaprogramming makes my head hurt." (Equivalently, "python
generators and decorators make my head hurt".) Neither template
metaprogramming nor python generators/decorators are *required* for most
scientific programming tasks, especially when you use libraries designed to
shield you from such details. However, knowledge and use of those techniques
makes one much more productive in those corner cases where they are useful.
4. "I do not need all the extra stuff that C++ (resp. python) provides
compared to Fortran (resp. Matlab)". C++/python are industrial strength
programming languages which serve a large audience, where each interested
niche group can create efficient libraries unhindered by the orientation of
the language itself. Fortran/Matlab are numerical languages with extra general
purpose stuff tacked on. Building large scale Fortran/Matlab programs are
possible (see the Joint Strike Fighter models in Matlab or any large-scale
Fortran application), but the lack of a real programming language is a pain
whose intensity increases exponentially with the size of the codebase.
Another way it is usually phrased: "I will use Fortran's (resp. Matlab's)
integration with Python (resp. Java) when I need a real programming language."
5. "OOP/generic programming are useless for most scientific programming." This
is usually just elitism. (While I personally do not believe that OO is worth
one percent of the hype, I do believe that generic programming, as practiced
in Python & C++, are pretty much our primary hope for reusable software.) When
not elitism, it is a measure of the immaturity of computational science (some
would say scientists), where large repositories of reusable code are few and
far between. OO, generic programming, and functional programming are the only
techniques of which I am aware for building large scale programs with
I would take any Fortran hype with large grains of salt.
More information about the NumPy-Discussion