<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 14, 2017 at 12:27 PM, Boespflug, Mathieu <span dir="ltr"><<a href="mailto:m@tweag.io" target="_blank">m@tweag.io</a>></span> wrote:<br><div><br></div><div>[snip]</div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
* Or a middle ground: make feature freeze a thing. Meaning that for a<br>
couple of months before a major GHC release, the major new Cabal isn't<br>
technically released yet, but like GHC itself within this period, it's<br>
pretty staid, so not so much a moving target, and something downstream<br>
tooling authors can possibly adapt to even without any grace period on<br>
new metadata features. This assumes that the 2 months of feature<br>
freeze are enough time for downstream tooling. Thoughts from any of<br>
those maintainers?<br>
<div class="m_-8213444562787941547HOEnZb"><div class="m_-8213444562787941547h5"><br></div></div></blockquote><div><br></div><div>Short answer: if there's a clear idea in advance of when this feature freeze is going to happen, I think we can coordinate releases of downstream tooling (Stack being the most important, but stackage-curator playing in as well) so that 2 months is sufficient. I'll talk with the rest of the Stack team to see if there are any concerns.<br></div><div><br></div><div>Longer answer: Stack intentionally avoids depending on the internals of Cabal wherever possible. Instead of calling library functions directly from within Haskell code to perform builds, for example, it interacts with the Setup.hs files over their command line interface.[1] This has two results:</div><div><br></div><div>* Stack can usually start using new GHC/Cabal versions without a new Stack release, since it's just shelling out for the actual build</div><div>* There's not usually very much code churn needed in Stack to upgrade to a newer Cabal release</div><div><br></div><div>This past release was an exception because of all of the changes that landed, both the new cabal grammar to support the ^>= operator (making the old parser incapable of lossily parsing new files) and API changes (I think mostly around Backpack, though there was some code cleanup as well). In particular, the main interface we need from Cabal—the package description data types and parser—changed significantly enough that it took significant effort to upgrade. There were also new features added (like sub libraries and foreign libraries) that weren't immediately supported by the old Stack version, and had to be manually added in.<br></div><div><br></div><div>Tying this up: generally upgrading to a new Cabal release should be fine, and the only concern I'd have is fitting it into a release schedule with Stack. The complications that could slow that down are:</div><div><br></div><div>* Changes to the command line interface that Stack uses (hopefully those are exceedingly rare)</div><div>* Major overhauls to the Stack-facing API</div><div><br></div><div>Michael<br></div><div><br></div><div>[1] This allows for more reproducible builds of older snapshots, insuring that the exact same Cabal library is performing the builds<br></div></div></div></div>