RFC: "Native -XCPP" Proposal
Stephen Paul Weber
singpolyma at singpolyma.net
Wed May 6 15:36:05 UTC 2015
>As you may be aware, GHC's `{-# LANGUAGE CPP #-}` language extension
>currently relies on the system's C-compiler bundled `cpp` program to
>provide a "traditional mode" c-preprocessor.
Yes. This is one of my favourite things in GHC-land -- that an existing,
good-enough, standardised, and widely-deployed solution was chosen over
a NiH reinvention of preprocessing. This allows other Haskell compilers to
support CPP on basically any system (since cpp is so standard) without much
effort, or even if the compiler does not support {-# LANGUAGE CPP -#} the
user can easily run `cpp` over the source files themselves before feeding
the source into the compiler.
Because it is a real `cpp` being used, the developmer must take care to
follow the CPP syntax in the file that will then be transformed into Haskell
by `cpp` in the same way that C, C++, and other developers have to take
extra care (especially around use of # and end-of-line \) when using `cpp`,
but this is the normal state of affairs for a secondary preprocessor step.
As a benefit, the source code will be processable by standard `cpp`
implementations available for virtually every platform.
In short, the current solution provides a very robust and portable way to do
pre-compile preprocessing, and I like it very much.
More information about the ghc-devs
mailing list