Subject: [boost] The C++ Post-Processor
From: Christian Schladetsch (christian.schladetsch_at_[hidden])
Date: 2009-10-18 06:49:54
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++ ?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk