-
Notifications
You must be signed in to change notification settings - Fork 141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Time to fork bytestring
into a stable legacy and new feature releases unblocking progress.
#234
Comments
There is a lot of truth to what you are saying, but I disagree with the way forward, and I certainly disagree with a fork. At this point that ship has sailed. The first issue is that of forking bytestring: You will never get enough adoption. That is just a reality. I say this as someone who has spent a large portion of their time using an alternative ecosystem to bytestring written by @andrewad and me. Here is my take on supporting older GHCs: There is a reason it is useful. Mostly to track compiler regressions across a wide range of compilers. However, GHC 7 is very old. Not only in terms of the number of releases since, but also in years. It has been almost a decade since its release. When GHC 7 came out, I was a freshman in high school, and I still had a full head of hair. Why should we continue to support such old compilers? In my opinion, we shouldn't. Recently, primitive, random, and vector have all dropped support for anything pre-7.10. For bytestring, I can see doing that, but I do not think dropping anything post-7.10 is wise right now. (7.10 came out 5 years ago). Even if the lower bound is up for debate, there is no way a new version of bytestring should have 8.12 as a minimum version of base. The maintenance burden incurred by versions needing 8.12 is small; just some CPP that can eventually be removed, maybe some years down the road. What I think is preferable is to actually pool all of the changes that require a majour version bump into a branch, keep it rebased on top of master, and then release them all at once. Also, I think this issue comes with the very understandable frustration that there has been a lack of maintainership for too long. I have added 4 new maintainers just today, 5 if you count myself (though I probably won't be doing much in the way of PRs). So hopefully your stress will be alleviated by their efforts. Those maintainers are: @sjakobi, @hsyl20, @bgamari, @Bodigrim. EDIT: primitive has not done this yet, but it will soon. |
I don't actually mean forking the project, I mean maintaining multiple stable releases, with appropriate For example, I am a co-maintainer of Postfix (admittedly an MTA not an API), and we support four concurrent stable versions, each year one is retired, and a new one is released. Each version is supported for four years. |
What are the benefits of that over using CPP to provide the same benefits?
Now there are multiple source trees to keep in sync.
…On Wed, Jun 24, 2020, 11:16 PM Viktor Dukhovni ***@***.***> wrote:
I don't actually mean forking the project, I mean maintaining multiple
stable releases, with appropriate base constraints. So there's no issue
with adoption, the package is still bytestring, but there are multiple
actively supported versions, all compatible with the vast majority of
projects, but some able to take advantage of newer facilities in base, and
perhaps offer some new features.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#234 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEOIX2YTQJWLMQKVLLVO6Q3RYLTVBANCNFSM4OH4NVNQ>
.
|
CPP should be used exceedingly sparingly, mostly to import FFI constants and the like into modules that offer interfaces to kernel APIs. Otherwise, conditional compilation of features, and especially conditional selection of implementation of (fragments of) functions can make code really difficult to maintain. Thus, for example when introducing The bytestring library cannot make new major releases that conflict with the bundled boot library, because it causes massive "recompile the world" dependency churn. It makes a lot more sense to not introduce new bytestring versions except when users migrate to a new version of GHC. Then they recompile everything anyway. |
As to keeping source trees "in sync", the whole point is that the older branches are stable releases, barring significant bugs, they would not change much if at all, and would NOT be "kept in sync" with the evolving head branch. |
The main thing I'm really suggesting is to unblock making releases, by setting the minimum (or strict equality) constraint on This means releases of |
|
Putting aside the other suggestions for a moment, I would strongly advise against this. The fact that boot libraries are often essentially frozen in an install plan is currently a headache, but is at least can be avoided by not depending upon the
All-in-all, I'm unclear on what benefit we get in return for all of these issues. Yes, there are certainly ways in which While it's true that CPP does impose some overhead, this is simply the cost of maintaining such a central package. |
But a major side-effect of not tying So, while I understand your point, and it is in principle valid, in the specific case or |
I think dropping support of GHC < 7.10 is a right thing to do in 2020 and it will remove a lot of friction. It is insane to ignore all progress done and not to benefit from new features.
|
In that case, how about a follow-on |
Such a (0.11.x.y or 1.0.x.y) release would still cause build-cache churn for projects that don't set bounds on |
Let's continue the discussion on release planning in #241. |
This looks unlikely to go anywhere at present. |
The
bytestring
package has for some time been mired in a backwards-compatibility straitjacket. Support for GHC going back all the way to ~7.0 makes it difficult to release updates that take advantage of new GHC features.I propose that the after 0.10.10.1 is cut, the next
bytestring
version should be0.11.0.0
(or 1.0?), and should require the version of base included with GHC 8.12.1. This can merge #191, #174, and any other worthwhile PRS that are challenging to support with GHC 7.This would not mean that
bytestring
becomes unsupported with GHC 7.x, and early 8.x releases. Rather a separate stable branch can still be used to fix bugs or backport worthy features that would be released as new0.10.x
versions. Presumably, when cabal is choosing a version ofbytestring
to build with GHC 7.x and early 8.x, it would not choose one that requires base from 8.12.It might even make sense to make the base version constraint for the new
bytestring
be strict equality, rather than a floor, and cut a new version with each release ofbase
. This stops short of actually mergingbytestring
intobase
, but recognises that it has not really been possible to make independent updates anyway, becausebytestring
is a boot library bundled with GHC.One way or another, the current stasis should I think be resolved.
The text was updated successfully, but these errors were encountered: