Skip to content

stabilization template, docs #2219

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

Open
wants to merge 19 commits into
base: master
Choose a base branch
from

Conversation

nikomatsakis
Copy link
Contributor

This PR updates the stabilization docs and introduces a new stabilization template based on a series of questions.

cc @rust-lang/lang -- this is designed to help us get the information we need
cc @rust-lang/compiler -- this is designed to ask questions to help gauge implementation quality
cc @rust-lang/types -- this is designed to surface potential type system interactons
cc @rust-lang/style, @rust-lang/rust-analyzer, and @rust-lang/lang-docs -- I'd like advice on how to advice users about doing updates outside of rustc.

@nikomatsakis nikomatsakis force-pushed the stabilization-template branch from 8d2e702 to e4ee951 Compare January 23, 2025 20:27
Copy link
Member

@jackh726 jackh726 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I love this.

The rest of the team members will review the proposal. If the final
decision is to stabilize, we proceed to do the actual code modification.
The stabilization report is typically posted as the main comment on the stabilization PR (see the next section).
If you'd like to develop the stabilization report incrementally, we recommend adding it to
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

incomplete: "adding it to"...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh yeah, I never finished. I was going to suggest the practice of adding the stabilization report to the unsafe book and updating it incrementally (e.g., with a list of PRs, if nothing else).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dropped this partial sentence from the initial version

@@ -194,3 +164,23 @@ if something { /* XXX */ }
[Rust by Example]: https://github.com/rust-lang/rust-by-example
[`Unstable Book`]: https://doc.rust-lang.org/unstable-book/index.html
[`src/doc/unstable-book`]: https://github.com/rust-lang/rust/tree/master/src/doc/unstable-book

## Lang team nomination
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe just change this section to team nominations, and put the lang team as the first item (and emphasize)?

Also, a discussion for another place, but this made me think: Is it all that great to nominate things immediately? There are usually plenty of comments on things and it might be worth delaying the teams discussing things until those immediate comments get addressed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 to the more general title. I wondered the same thing about when to nominate. I don't know the right answer.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess saying "when comments die down, or if you don't get any comments, nominate"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed title, and tried to add a sentence to that effect.

When you feel the PR is ready for consideration by the lang team, you can [nominate the PR](https://lang-team.rust-lang.org/how_to/nominate.html) to get it on the list for discussion in the next meeting. You should also cc the other interacting teams to review the report:

* `@rust-lang/types`, to look for type system interactions
* `@rust-lang/compiler`, to vouch for implementation quality
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this should be an explicit step? For either the compiler team as a whole, or at least just the "owner" of the implementation to be on board with stabilization. Otherwise, "everything" should be compiler nominated?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is a good question. My feeling is that both compiler and types ought to have a process of assigning one person to prepare a summary for others to read, but I felt that needed more discussion before I wrote it in here. I should probably open a tracking issue on this overall topic.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be honest, lang should have that process too :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left this unaddressed, not for an initial version

- (Positive/negative) Interface tests? (e.g. compiler cli interface)
- Maybe link to test folders or individual tests (ui/codegen/assembly/run-make tests, etc.)
- Are there any (intentional/unintentional) gaps in test coverage?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Consider what the "edges" of this feature are. We're particularly interested in seeing tests that assure us about exactly what nearby things we're not stabilizing.

Copy link
Contributor

@traviscross traviscross Jan 25, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Going even further:

Suggested change
Consider what the "edges" of this feature are. We're particularly interested in seeing tests that assure us about exactly what nearby things we're not stabilizing.
Within each test, include a comment at the top describing the purpose of the test and what set of invariants it intends to demonstrate. This is a great help to those reviewing the tests at stabilization time.
Similarly, please consider including, when appropriate, `//@ reference:` annotations to connect each test with the corresponding item in the Reference.

In reviewing the tests for the arbitrary self types stabilization, I'm reminded how helpful it is for each test to describe at the top what it is intending to demonstrate, so it's worth mentioning that.

It's also probably worth mentioning here the utility of the Reference annotations, but that raises an interesting ordering question. We merge tests ahead of the stabilization, generally, but then we don't merge the Reference PR until after the stabilization. So we'd either need to merge the tests with dangling references (to identifiers in unmerged Reference PRs) or perhaps these references could be added to the tests in the stabilization PR itself. Or they could be added later, but then these helpful things aren't there when reviewing the stabilization.

(Another wilder option is that we merge the Reference into rust-lang/rust itself, as was recently done with the dev guide, and then the Reference PR becomes a part of the stabilization PR, though we're probably not yet ready to do that in general.)

@ehuss, @nikomatsakis, what do you think?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's often useful to us to directly push our own commits to a Reference PR branch rather than going back and forth with the author, but permissions on rust-lang/rust aren't currently set in a way that would enable that.)

AFAIK team members can push to PRs in rust-lang/rust as well, but individual PR authors can opt-out of that.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I must have hit the odd case before then. Edited to correct.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that for this initial version, I intentionally left off the

Similarly, please consider including, when appropriate, //@ reference: annotations to connect each test with the corresponding item in the Reference.

I don't even know how to do that logistically myself.

@jieyouxu jieyouxu added S-waiting-on-review Status: this PR is waiting for a reviewer to verify its content T-compiler Relevant to compiler team T-lang Relevant to lang team T-types Relevant to types team T-rust-analyzer Relevant to rust-analyzer team labels Jan 24, 2025
@jieyouxu jieyouxu self-assigned this Jan 24, 2025

## Type system and execution rules

### What compilation-time checks are done that are needed to prevent undefined behavior?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question: Does the feature's implementation need checks to prevent UB or is it sound by default and needs opt in in places to perform the dangerous/unsafe operations? If it is not sound by default, what is the rationale?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've been thinking about generalizing this question -- like, "what type system rules are enforced and what is their purpose"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added oli's question for the initial version

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file contains the following:

Once we have decided to stabilize a feature, we need to have
a PR that actually makes that stabilization happen. These kinds
of PRs are a great way to get involved in Rust, as they take
you on a little tour through the source code.

And I'm not sure how accurate this is.

First of all the "Once we have decided to stabilize a feature" part is too vague. How would a new contributor know which features we decided to stabilize? Additionally the decision and stabilization report need to be done by someone with a good knowledge of the feature, a new contributor just isn't suitable for that.

I feel like this paragraph is misguiding, as stabilization is usually an intertwined process involving multiple teams, sometimes confusing changes (like changing lints that don't make sense anymore), checking many components, etc. If for library features it might be the case that a novice can craft a stabilization PR, for language features, more often than not that's not the case.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For this initial template, I will drop that paragraph entirely, and refrain from making substantial wording additions to make this PR less contentious to land. I have some Thoughts:tm: on this matter as well.

Copy link
Member

@jieyouxu jieyouxu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working on this!

nikomatsakis and others added 3 commits January 28, 2025 10:52
Co-authored-by: lcnr <rust@lcnr.de>
Co-authored-by: Ralf Jung <post@ralfj.de>
Co-authored-by: waffle <waffle.lapkin@gmail.com>
@jieyouxu jieyouxu removed their assignment Apr 9, 2025
@jieyouxu
Copy link
Member

@nikomatsakis do you mind if I push some changes to this PR (to address some of the more trivial nits)?

This draft stabilization template is somewhat funny in that people are already using it for stabilization reports, but it's in an open PR xD Maybe we should merge an intermediate version? It obviously won't be perfect, but at least new stabilization reports would have something (live) to reference, and improvements to the template could be made in follow-ups following more feedback?

Or I guess, this could wait for more thorough discussions during All Hands?

@Noratrieb
Copy link
Member

people have been using this or have been asked to use this. We should really merge this now.

We should move it to the forge instead and also address all the feedback but should happen later.

@jieyouxu
Copy link
Member

I spoke with @nikomatsakis and @traviscross, and I'll try to address some outstanding feedback to push towards landing an initial imperfect version in rustc-dev-guide (with a lang team vibeck).

Later, I'll move this initial stabilization template to Forge which seems like a better home than rustc-dev-guide, and follow-up improvements can be done there.

@rustbot
Copy link
Collaborator

rustbot commented Jun 19, 2025

⚠️ Warning ⚠️

@jieyouxu jieyouxu removed the S-waiting-on-team Status: this PR is waiting on a team label Jun 19, 2025
@jieyouxu
Copy link
Member

(This should probably be squashed prior to merge, intermediate commits intended for review only)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: this PR is waiting for a reviewer to verify its content T-compiler Relevant to compiler team T-lang Relevant to lang team T-rust-analyzer Relevant to rust-analyzer team T-types Relevant to types team
Projects
None yet
Development

Successfully merging this pull request may close these issues.