But there is more: idealism vs realism?
Idealism strives for abstraction, expressiveness, productivity, portability, ....
Realism is driven by implementation, efficiency, performance, system programming.
The idealists love Mathematica, the realists C++?
There is a lot of pragmatism in Mathematica 8!
C/C++ interfaces:
- CCompilerDriver - invoke C compilers from within Mathematica
- SymbolicC - write and manipulate C syntax in Mathematica language, allows for programmable C code generation
- LibraryLink - load C functions as native Matematica functions that become part of Mathematica kernel, share data between kernel and C functions. In an integrated workflow the CCompilerDriver package generates LibraryLink compatible shared libraries.
Execution envirinments:
- Interpreter - includes everything but exclusively symbolic programming, arbitrary-preciasion calculation, heterogeneous expressions, ..
- Compiler --> Wolfram Virtual Machine - optimizes for machine-precision calculation, homogeneous expressions, numerical functions, procedural programming, functionals programming
- Compiler --> Native Code - transforming Mathematica function into a shared library using the above transformations
In certain applications speed ups can be 1:10 from Interpreter to Wolfram Virtual Machine and 1:10 from Wolfram Virtual Machine to Native Code (orthogonal to the support of grids and CUDA).
How to summarize and conclude?
Use Mathematica interpreter for productivity, compiler for performance. C language interface when necessary.
I have compiled this from a talk, our Senior Software Engineer, Sascha Kratky gave at the Austria Mathematica Conference recently.