Skip to content
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

Stabilization metabug: 1.0-alpha #19260

Closed
aturon opened this issue Nov 24, 2014 · 7 comments
Closed

Stabilization metabug: 1.0-alpha #19260

aturon opened this issue Nov 24, 2014 · 7 comments
Labels
metabug Issues about issues themselves ("bugs about bugs")

Comments

@aturon
Copy link
Member

aturon commented Nov 24, 2014

This is a tracking metabug for stabilization of both APIs and gated features.

API stabilization for libstd

First pass stabilization/reform

For simpler/mostly stable APIs (core types, iterators), stabilization is mostly a matter of aligning with conventions and deprecating marginal methods and takes place directly under the supervision of the core team. For deeper redesign, RFCs are needed. Where applicable, the list below points to the relevant RFC.

Most APIs with a chechmark are still #unstable, either due to developing conventions, lack of language features (e.g. unboxed closures), or some other problem. We plan to do a rapid second pass closer to the 1.0.0 beta.

(You can track the following list quantitatively, though the fact that trait impls count exaggerates the amount of #[experimental] items.)

Items are marked complete when a PR/RFC has been posted -- this is just tracking the design work.

Second pass stabilization: for alpha

The second pass is about actually moving APIs to #[stable] status; it may involve a bit of minor shuffling, but any major design work should have already taken place. In many cases APIs were blocked on language features (like unboxed closures) before moving to this status.

RFCs for reform

The following RFCs tackle deeper API redesigns:

Accepted

Pending

Non-std crates

See #18585 (comment)

Just need #[experimental]

We will ship these crates, but will they will participate in #![staged_api]
and will not be accessible in the stable channel.

  • alloc
  • arena
  • collections
  • core
  • flate
  • fmt_macros
  • graphviz
  • rand
  • rbml
  • rustc
  • rustc_back
  • rustc_llvm
  • rustc_trans
  • rustdoc
  • syntax
  • unicode

Need Cargo.toml and a publishing strategy

These crates will all be distributed, but participate in #![staged_api]. This
means they will not be accessible in the stable channel's standard
distribution, but they will all be available through crates.io.

Need cooperation with the standard library due to compiler internals

Removed or to remove

Feature stabilization

Ungating

Removal

  • Slicing syntax: should be removed in favor of ops reform

CLI Tooling

@aturon aturon added A-libs metabug Issues about issues themselves ("bugs about bugs") labels Nov 24, 2014
@aturon
Copy link
Member Author

aturon commented Nov 24, 2014

cc @alexcrichton @brson @nikomatsakis @huonw @pcwalton

@alexcrichton, can you populate the non-std crates section with status/plans?

Everyone: please help me fill in the "Feature stabilization" section.

@aturon
Copy link
Member Author

aturon commented Nov 24, 2014

A note about the 1.0.0 beta period: we are planning to run at least two beta cycles.

During the first cycle, we plan to turn on the stability lints, but not to add the #[staged_api] attribute. That will mean that the beta channel will allow you to use #[experimental] and #[unstable] features, but will warn you when you do so. This cycle will serve to discover gaps in stabilization -- important APIs/features that are not yet #[stable] for the initial beta -- and also give us a little bit more time on the trickiest #[unstable] APIs.

The second cycle will then add #[staged_api], so that the 1.0.0-beta2 will serve as a true release candidate.

By the time we release the first beta, we expect the bulk of std to be #[stable], with the possible exception of std::io, as the tracking above indicates.

By the second cycle, there should be very little large-scale API revision. Thus, the two cycles should serve as a period of relative calm (compared to today's very rapid breakage) during which the crates.io ecosystem can stabilize and grow before the stable 1.0 release.

@aturon
Copy link
Member Author

aturon commented Nov 24, 2014

@Gankra
Copy link
Contributor

Gankra commented Nov 24, 2014

cc me

alexcrichton added a commit to alexcrichton/rust that referenced this issue Dec 13, 2014
This commit deprecates a few more in-tree libs for their crates.io counterparts.
Note that this commit does not make use of the #[deprecated] tag to prevent
warnings from being generated for in-tree usage. Once #[unstable] warnings are
turned on then all external users will be warned to move.

These crates have all been duplicated in rust-lang/$crate repositories so
development can happen independently of the in-tree copies. We can explore at a
later date replacing the in-tree copies with the external copies, but at this
time the libraries have changed very little over the past few months so it's
unlikely for changes to be sent to both repos.

cc rust-lang#19260
alexcrichton added a commit to alexcrichton/rust that referenced this issue Dec 17, 2014
This commit deprecates a few more in-tree libs for their crates.io counterparts.
Note that this commit does not make use of the #[deprecated] tag to prevent
warnings from being generated for in-tree usage. Once #[unstable] warnings are
turned on then all external users will be warned to move.

These crates have all been duplicated in rust-lang/$crate repositories so
development can happen independently of the in-tree copies. We can explore at a
later date replacing the in-tree copies with the external copies, but at this
time the libraries have changed very little over the past few months so it's
unlikely for changes to be sent to both repos.

cc rust-lang#19260
@sanxiyn
Copy link
Member

sanxiyn commented Dec 30, 2014

Default type parameter (RFC 213) should be in the feature stabilization list.

@flaper87
Copy link
Contributor

I've updated the list and added optin_builtin_trait to the features list.

bors added a commit that referenced this issue Jan 5, 2015
cc #19260 

The casing transformations are left unstable (it is highly likely to be better to adopt the proper non-1-to-1 case mappings, per #20333) as are `is_xid_*`.

I've got a little todo list in the last commit of things I thought about/was told about that I haven't yet handled (I'd also like some feedback).
bors added a commit that referenced this issue Jan 6, 2015
cc #19260 

Open questions:

- I still feel weird about marking functions like `exp` as `#[stable]` in `core` since they're highly likely to call into libm which is theoretically something core is designed to avoid and so we may be forced/want to move it at some point in the future, and so it feels like a lie to call it `#[stable]` (I know `core` is `#[experimental]`, but still...)
- `abs_sub` is a horrible name IMO: it feels like it is `(a - b).abs()`, but it is actually `(a - b).max(0.)`. maybe something along the lines of `pos_diff` ("positive difference") is better.
- the associated-function nature of `Int::from_be` and `Int::from_le` feel strange to me, it feels like they should be methods, but I cannot think of a good name.

I'm also not hugely in favour of `ldexp` and `frexp` but the precedent from C is large. (e.g. AFAICT,  `ldexp` must mean "load exponent" which is essentially what it does... but only for a subset of its inputs.)
@aturon aturon changed the title Stabilization metabug Stabilization metabug: 1.0-alpha Jan 8, 2015
@aturon
Copy link
Member Author

aturon commented Jan 8, 2015

I've renamed this to stabilization for 1.0-alpha, which is complete. There's a new issue for 1.0-beta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
metabug Issues about issues themselves ("bugs about bugs")
Projects
None yet
Development

No branches or pull requests

4 participants