[SciPy-user] python (against java) advocacy for scientific projects
Sturla Molden
sturla at molden.no
Tue Jan 20 14:48:27 EST 2009
On 1/20/2009 7:33 PM, Matthieu Brucher wrote:
> You're wrong. Pointers are there since the begining. It's Fortran
> nasis. Fortran 77 code is full of pointers when using dynamic
> allocation.
Cray pointers are not standard Fortran. Apart from that, Fortran 77 does
not have pointers. There is no dynamic allocation with Fortran 77,
except if you use non-standard Cray pointers.
Fortran 90 (and later) have pointers, but pointers can only point to
variables declared as targets (or dynamically allocated memory). What
Fortran disallows is pointer aliasing, except for variables explicitly
declared as 'pointer' or 'target'. This way, a Fortran compiler always
knows what could be aliased and what is not.
Fortran 90 does not need pointers for dynamic allocation. Memory can
also be allocated to allocatable arrays, which may or may not be aliased
by pointers, depending on declaration.
If you don't use pointers, nothing can be aliased - and the compiler
will just assume this is true.
Fortran pointers are not simply memory adresses. They are 'doped array
structures', with dimensions, bounds and strides, very similar to
NumPy's view arrays. If you pass a C pointer to a Fortran method that
expects a Fortran pointer, it will usually fail.
ISO C (not ANSI C) has a 'restrict' keyword that informs the compiler it
can treat a pointer as unaliased. ANSI C and ISO C++ can be just as
efficient as Fortran. This is due to non-standard compiler pragmas,
which informs the compiler about pointer aliasing.
Speed differences within an order of magnitude seldom counts. This can
easily be solved by using more hardware or waiting a bit longer. The
time spent coding is much more important, at least for scientific
projects. Though for commercial work it will be different, as you have
customers and competitors to consider.
For code that involves arrays and loops, it will be easier to program in
Fortran than C++.
If you are going to make calls to the OS, C will easier than Fortran.
The OS was written in C, and you just have to include the header and
link the appropriate library.
Sturla Molden
More information about the SciPy-User
mailing list