Scientific computing with D
Lars Kyllingstad
public at kyllingen.NOSPAMnet
Fri Jan 30 05:23:03 PST 2009
I think D is, or at least could be, the scientific programming language
of the future. Here's why -- and possibly how:
A couple of years ago, I took a university class called Numerical
Physics. After finishing the course, I was left with the impression that
numerical computing was all about squeezing every last bit of
performance out of the computer -- that unnecessary operations and
function calls should be avoided at any cost, even if the resulting code
is full of nasty hacks and tricks, making it completely illegible and
utterly unmaintainable. And of course, in many cases this is true.
Now, however, I have a bit more experience in the field and I know that
it is not always so. In numerics, as in other areas of programming, it
is a trade-off between development time and execution time.
Traditionally, if one has a desperate need for speed (sorry), one uses
FORTRAN, C or C++. The programs run very fast, but can be hard to
develop, debug and maintain. For less processor-intensive tasks one uses
Matlab, Mathematica, etc. which have a lot of built-in functionality and
make for rapid development, but programs run at a snail's pace.
With D one has the best of both worlds. I've used both C++ and
Mathematica for numerics in the past, but now I use D almost
exclusively. I find it a lot easier (and more fun) to code in than C++,
and I spend a LOT less time debugging my programs. On the other hand,
calculations that would take an entire day in Mathematica are finished
in a matter of minutes using D.
It's a fact that D programs don't have the performance of C(++) ones,
but that, I think, is just a matter of time (pun not intended). It's a
relatively new language, and the compilers are still somewhat immature.
The one thing I miss the most, however, and which I think is necessary
for D to "take off" as a scientific language, is a native D scientific
library.
Searching dsource, I find that many nice modules and libraries have been
made already:
- MultiArray (Bill, Fawzi)
- dstat (dsimcha)
- blip (Fawzi)
- MathExtra, BLADE (Don)
- Scrapple/backmath (BCS)
- Scrapple/units (BCS)
- bindings to GSL, BLAS, etc.
- ...and probably more
Myself, I've written/ported some routines for numerical differentiation
and integration, one- and multi-dimensional root-finding and some very
basic linear algebra, but so far only for personal use. Currently, I'm
thinking of porting QUADPACK to D.
I think it would be really nice if many or all of the above mentioned
things could be collected in a single library, together with all kinds
of other stuff. Something like the GSL, only written in D. (In my head
it's called SciD. At first I thought of DSL - D Scientific Library - but
that acronym is used all over the place.) I haven't the time, nor the
skills, to write an entire such library myself, but I'd be happy to
contribute where I can.
Here are some design goals I find important:
- sensible, logical and tidy package hierarchy
- access to high-level functionality for rapid development
- access to low-level functionality for performance
- make use of D's awesome compile-time functionality
- reusability, pluggability and extensibility
(By the last point I mean that if one method doesn't work it should be
quickly and easily replaceable in code with something else. This is
achievable through the use of templates and interfaces, and ties in with
the second point.)
So, what do you think? Am I making any sense? Am I the only one
interested in these things?
All of the above are, of course, my personal opinions. What are yours?
-Lars
More information about the Digitalmars-d
mailing list