
On Sun, Oct 18, 2009 at 4:49 AM, Christian Schladetsch <christian.schladetsch@gmail.com> wrote:
Hello,
This is a general post about C++.
Why is it that the pre-processor (PP) is the source of so much disdain, and yet it is the first resource exploited to 'fix' problems with C++?
Why has the PP received so little attention over the years, from its early use as M4?
This is a message to the powers that be: the PP is a powerful tool. It provides a 'context-cutting' mechanism for creating and extending solutions. It is a true "meta-programming" system built right into C++. No other language I can think of has a PP. This is often viewed as being a good thing, but I wonder more and more as I get older that a good PP is in fact needed to span some otherwise very difficult boundaries.
Other languages are "dynamic" inasmuch as they reflect classes and allow for runtime changes to types and instances. I think we all here agree that this ability is counter to building firm, safe and efficient software.
But the PP is similar to that, allowing a degree of dynamicy not otherwise available. Specifically, by exposing concepts to the PP we can leverage reflection and synthesis while building on inheritance and conglomeration.
I don't have a point as such; I just wanted to raise the idea of developing M4 and the PP past where it is. There is a lot of low-hanging fruit there. This is evidenced by the fact that a lot of other languages are or can be transliterated to C++. Rather than thinking of C++ as the output, we could be thinking of C++ as the input.
Perhaps a way forward for C++ is a good PP and a standards-based implementation of C++ in C++ so it can embed itself.
I've written a number of languages, and in each I've had to address the issue of pre-processing. The latest attempts have resulted in a system where it parses and executes via AST input to produce an output that is then parsed by the same system to produce an AST that is then walked to eventually produce machine code. I think this model is best, and would be delighted to see some similar movements in the PP/C++.
We have Boost.Wave to start with... Why not give it real Expressions? Loops? Scopes? Classes? Templates? memory management? IO?
Is there any interest in a Boost.C++ ?
Have you looked at the D language, it did away with the C/C++ style pp, but buffed up the template capabilities to let it do just about anything the C/C++ PP can. Lisp/Scheme is also the perfect example of the language running itself, no PP needed. I wish C++ templates were like D templates...