<div dir="ltr">In principle, I think we should treat the GHC API like any other library, and try not to break code unnecessarily.  However, my impression is that the GHC API grew somewhat organically, so we may want to put some additional work before we stabilize things too much.  It's been a while since I used it, so I might be out of date, but last I looked the GHC API was a module exporting some high-level functions from GHC.   I think that a single module is too small of an API for a project as large as GHC.  In fact, it probably makes sense to define more than one API.  For example, each plugin point should probably have its own API, and that's likely different to the GHC API that exposes functionality such as "load and type check this module here", or "parse and evaluate this string".<div><br></div><div>-Iavor</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 27, 2020 at 4:05 AM Simon Peyton Jones via ghc-devs <<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-GB">
<div class="gmail-m_-536799373076202599WordSection1">
<p class="MsoNormal"><span>What I’m after is a clear opportunity for informed debate, and a clear yes/no decision.  That need not be high overhead.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>It means paying some upfront cost for design changes.  But that’s better than the legacy cost of dealing with things that turn out, in retrospect, to be less well designed than they could be.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>We tend to think of APIs as implementation details.  But they are deeply significant, and express key abstractions, just like language designs do.  I think we should treat them just as seriously.<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<p class="MsoNormal"><span>Simon<u></u><u></u></span></p>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div style="border-top:none;border-right:none;border-bottom:none;border-left:1.5pt solid blue;padding:0cm 0cm 0cm 4pt">
<div>
<div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Mathieu Boespflug <<a href="mailto:m@tweag.io" target="_blank">m@tweag.io</a>>
<br>
<b>Sent:</b> 27 July 2020 11:11<br>
<b>To:</b> Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>><br>
<b>Cc:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a> Devs <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>><br>
<b>Subject:</b> Re: How should we treat changes to the GHC API?<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">I would just point out that decision by committee, and in particular the GHC Proposals process, has a high cost in terms of both total human brain cycles and latency. The cost is entirely justified when it comes to things that are a) hard
 to revert and b) extremely hard to get right the first time, like new extensions to the language, or c) very sensitive (like governance, say). For things like breaking changes to API's, it's worth writing out what the current problems are. Are users complaining
 that the API churn is too high? Are they concerned about endemic quality problems with the API?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">It may be enough to make sure to know who the main users of the API are and tag them as reviewers on these types of changes in GitLab. Or to avoid extra process but enshrine principles that might be necessary to adopt, like saying that
 existing API functions should always be kept as-is during some deprecation period and new functionality should be exposed in new additions to the API. Principles to be upheld by reviewers.<u></u><u></u></p>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Jul 27, 2020 at 10:45:50, Simon Peyton Jones <<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a>> wrote:<u></u><u></u></p>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div id="gmail-m_-536799373076202599null">
<div>
<p class="MsoNormal">A
<a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2F-%2Fmerge_requests%2F3758&data=02%7C01%7Csimonpj%40microsoft.com%7C730e52088cb64dcebe1408d8321567e1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637314414803966186&sdata=GCGrNinXtNxPcJfEu%2F%2BifrJJ22BB2bkIy4E9d5IWOuo%3D&reserved=0" target="_blank">
recent MR for GHC</a> (adding machinery for plugins to write data to extensible interface files) made me wonder: 
<u></u><u></u></p>
<p class="MsoNormal" style="margin-left:36pt">
how we should treat significant changes to the GHC API?<u></u><u></u></p>
<p class="MsoNormal">Changes to the GHC API, especially to bits used by plugins or by IDEs, are clearly user-visible to an important class of users – they are not just internal to GHC itself.   So,
 how should we review them?  Should they perhaps be part of the GHC proposals process?  Or some other similar process?   (The collection of experts on the GHC API, plugins, IDEs etc, is rather different to the membership of the GHC steering group.)<u></u><u></u></p>
<p class="MsoNormal">I'm asking, not to be obstructive, but because the GHC API deserves to be thought of as a whole; in the past it has grown incrementally, without much discussion, and that has not
 served us well.  But at the moment there is no process, no group to consult.<u></u><u></u></p>
<p class="MsoNormal">Any views?<u></u><u></u></p>
<p class="MsoNormal">Simon<u></u><u></u></p>
</div>
<p class="MsoNormal">_______________________________________________
<br>
ghc-devs mailing list <br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a> <br>
<a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-devs&data=02%7C01%7Csimonpj%40microsoft.com%7C730e52088cb64dcebe1408d8321567e1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637314414803966186&sdata=2TwuVzxKm88aevbTooLG3sLeakrSYZziFPNDozFCvHo%3D&reserved=0" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>

_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>