Subject: bug#8076: PCH support

From: Stefano Lattarini <[email-masked]>
Date: Fri, 23 Dec 2011 22:10:32 +0100

On 12/23/2011 09:51 PM, Warren Young wrote:
> On 12/23/2011 9:46 AM, Stefano Lattarini wrote:
>>
>> I know basically nothing about PCH,
> 
> The only important thing to know is that it's a way to make the compiler dump
> its parse tree to disk during compilation so that it can simply reload that
> state from disk instead of rebuilding it from scratch for each module it builds.
> 
> You might think of PCH as a similar optimization to that of a bytecode compiler
> for a dynamic language: it doesn't get you native code, like you can get with a
> traditional static language, but you still get a speed benefit by avoiding
> reparsing.
> 
> PCH is most valuable with headers like STL which are commonly used across the
> program and are expensive to parse and reparse and re-reparse.
> 
>> and it seems to me that it is not
>> a feature many users would require or employ.
> 
> I think the idea is that if autoconf detects that PCH is available and
> automake generates the correct compiler commands to use it, it will be
> there "for free" to any user of the autotools.  Builds just get magically
> faster.
> 
> There's a monkey wrench, in that PCH doesn't work well if you don't 
> organize your header files to take advantage of it.  Say you have a
> program with 20 modules, and none of them have any commonality in their
> #include lines.  PCH might make such a build *slower*.  PCH gets its
> biggest benefit when you can make the includes as similar as possible
> across modules, at least up to a point.
> 
Thanks for the explanation.  With my present reply, I'm registering it in the
appropriate entry of the bug tracker, for future reference.

> Visual C++ avoids this trap by generating a header file for the project which
> you're supposed to #include in every module, and in which goes #includes for
> the most commonly used things.  (stdio.h, windows.h...) The project is
> configured to only generate PCH output for that one header, so there is none
> of the cache thrashing that happens in my 20-modules example.
> 
> I'm sure you care nothing for Visual C++,
>
Not personally, but the latest versions of automake are starting to provide
support to allow/facilitate compilation with MSVC on MSYS/MinGW (credit for
this mostly goes to Peter Rosin).  The NEWS entries from the latest 1.11.2
version of Automake contain:

  - The `compile' script now converts some options for MSVC for a better
    user experience.  Similarly, the new `ar-lib' script wraps Microsoft lib.

  - New macro AM_PROG_AR that looks for an archiver and wraps it in the new
    'ar-lib' auxiliary script if the selected archiver is Microsoft lib.

> but most of the people begging for PCH support are probably coming from
> this world.

> Bottom line, such a feature, if ever added, should probably be optional.
> 
Thanks for the tip.

Regards,
  Stefano