One problem noted recently on the p5p list is that if you do

        #include <perl.h>

in your program, it exposes a *lot* of CPP #defines to your program,
whether you want them or not.  This is particularly a problem if you wish
to embed perl or use it with an extensive 3rd-party library.

For parrot, we'd ideally like to make it a lot safer to 

        #include <parrot/parrot.h>

Here's a status check on where we are currently:

#include <parrot/parrot.h> currently #defines 198 global CPP symbols.
If you take away the autoconf-ish HAS_HEADER_* and the
proabably-quite-safe PARROT_* entries, that leaves 107 entries.
Although it's impossible to predict what vendors and third-party
software writers will do with the CPP namespace, the following 5
entries seem particularly likely to cause mischief at some point
somewhere:

Very general names:
    UNUSED
    INVALID_CHARACTER
    IO_ERROR
    KEY_NOT_FOUND

Possible conflict with system headers:
    SSIZE_MAX
        This is #defined in parrot/io.h as 8192, but it's also
        possibly defined in the system headers as the maximum size of
        the Posix ssize_t type, typically INT_MAX or LONG_MAX.
        Since it's not used in parrot, I'm unsure of the intent.

I don't have a specific proposal at the moment, but would invite
others to think creatively about ways to minimize cpp pollution while
still keeping the source readable and maintainable.

-- 
    Andy Dougherty              [EMAIL PROTECTED]
    Dept. of Physics
    Lafayette College, Easton PA 18042

Reply via email to