Prof David West wrote:
If you are trying to emulate a "machine" - i.e. solve a problem with a
known, formal, solution - use C or C++. That is what the language was
created to do, and nothing will be as 'machinelike' as a well-crafted
C++ program.
It's limiting that C is the primary language for high performance
computing, because of its literal nature. For example, with C, even
just mapping matrix manipulation to vector hardware is often impossible
for compilers to do. Without careful qualification, pointers make it
difficult to deduce that a memory location is used in only one way. And
data alignment and relative structure ordering is implied and not open
for reinterpretation (to better map to execution units). The result is
we now have decades of code written for inherently scalar, serial
hardware architectures. And, unfortunately, performance can only now
come from using parallel, vectorized hardware.
Efforts to improve the situation have been made over the years (the
POOMA C++ library comes to mind), but it seems to me the problem is in
large part a social one: If a problem is hard to solve with current
technology its easier to hire someone else to futz with it (e.g. one of
a billion `Java programmers') than it is to change the technology or the
techniques. The incompetence is self-reinforcing. Much easier to feel
good about the lines of code that are written, than the lines of code spent.
Marcus
============================================================
FRIAM Applied Complexity Group listserv
Meets Fridays 9a-11:30 at cafe at St. John's College
lectures, archives, unsubscribe, maps at http://www.friam.org