[ghc-steering-committee] Plugin recompilation avoidance interface (#108)

Ben Gamari ben at well-typed.com
Tue Feb 20 03:04:22 UTC 2018


Hello everyone,

I have been assigned as the shepard for proposal #108. This proposes a
change in GHC's plugin interface allowing plugins greater control over
recompilation, significantly improving compilation times for projects
relying on compiler plugins.


Summary:

The proposal suggests that the existing fields of the `ghc` package's
Plugin.Plugin type be wrapped with a type capturing a function computing
the plugin's recompilation desired behavior,

   data PluginRecompile = ForceRecompile
                        | NoForceRecompile
                        | MaybeRecompile Fingerprint

GHC can then use this recompilation information to decide whether
evaluating the plugin (and consequently invalidating any existing
compilation artifacts) is necessary.


Opinion & recommendation:

The proposal addresses a long-standing limitation (#7414) of the GHC
plugin interface which has become increasingly visible to users in
recent years. While the particular approach proposed breaks existing
plugin users, it is expressive enough to allow GHC to perform more
aggressive recompilation avoidance in the future [1]. Moreover, the
smart constructors proposed should make for a reasonably smooth
migration path.

Given that the plugins appears to have buy-in from a few notable plugin
authors, I recommend that we accept this proposal.

Cheers,

- Ben
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20180219/0356ad3a/attachment.sig>


More information about the ghc-steering-committee mailing list