Replies: 2 comments 2 replies
-
My vote is split:
I vote 1000x against this: semver and all it brings is distinctly useful. Only
This constraint is self-determined: it is for zerocopy to determine an acceptable level of churn. It is not any more expensive to increment a breaking version than it would be to break every user in a semver-incompatible way with a breaking patch version. I see all pre-1.0 libraries as containing zero stable elements - if you want to make a breaking change, increment the major version. A major version increase doesn't inherently require churn, it's the breaking changes from migrating between them that are really at issue. If you go this route, I expect to reach 0.20.0 or so before stabilization.
This is the way to publicly experiment with breaking changes on unstable features without incrementing a major version (whether that avoidance is misguided or not). All unstable features should be guarded by an optional |
Beta Was this translation helpful? Give feedback.
-
Discussed this offline with @djkoloski, and came to the following conclusions: There are fundamentally two axes here, and they can be handled orthogonally. Feature baking & rebase hellWe often want to design a feature or set of features that are too large to go in a single PR, and take a long time to develop. Currently, we attempt to develop in stacked PRs similar to Gerrit, but GitHub's support for these is atrocious. Even if GitHub supported stacked PRs seamlessly, we still run into rebase hell as multiple people land other changes. What we want is to treat zerocopy like a monorepo, and develop all features together to avoid stacked PRs and rebase hell. A solution would require:
There's a large design space here, with questions like:
This deserves its own separate discussion thread, which I'll open at some point. This roughly describes Rust's nightly feature concept - we need something similar for zerocopy. Features subject to rename & redesignSome features are fine as-is, but we expect we may rename them or remove them in favor of differently-shaped APIs at some point in the future. David convinced me that, for these, it's sufficient to just use normal semver rules. If we want to be extra nice to users, we can try to provide smooth upgrade paths. E.g., if we rename a method, we can leave the old method but mark it as |
Beta Was this translation helpful? Give feedback.
-
We frequently encounter two problems:
main
Proposal: We adopt Rust-style support for "unstable" features. We would either create one Cargo feature per feature, or alternatively create a single "unstable" or "experimental" Cargo feature behind which all such features are gated. There is a much lower quality and stability bar for introducing a new feature which is gated in this way. Once a feature has baked enough, we can un-gate it.
Open questions:
#[doc(hidden)]
), and we use the "normal semver rules" option for features which we expect users to use but whose exact shape we're not confident in (bytes-to-reference-type conversion is a good example of such a feature).cc @kupiakos @jswrenn @djkoloski
Beta Was this translation helpful? Give feedback.
All reactions