T-lang meeting agenda

  • Meeting date: 2023-10-10

Attendance

  • Team members: tmandry, pnkfelix, scottmcm
  • Others: TC, eholk, Lokathor, Urgau

Meeting roles

  • Minutes, driver: TC

Scheduled meetings

  • 2023-10-11: "Meeting proposal: Unsafe extern blocks" #223
  • 2023-10-18: "Design meeting: Decide about the future for consts in patterns" #220
  • 2023-10-25: "Design meeting: Implementable trait aliases" #224

Edit the schedule here: https://github.com/orgs/rust-lang/projects/31/views/7.

Announcements or custom items

(Meeting attendees, feel free to add items here!)

Rust Survey

https://github.com/rust-lang/surveys/pull/243

TC: @scottmcm proposed that we discuss the questions to be asked on the Rust Survey, particularly about the features that people may want added to the language.

pnkfelix: These are phrased as lists of features, but maybe it would be better to phrase it as problems areas to solve.

TC: The challenge with problem areas is that people tend to want all problems solved.

tmandry: Maybe we could ask people to do a ranking.

pnkfelix: There's a difference between features that affect the API that people can provide from features that let people write the kind of code they want to write.

eholk: Looking at the list of features, would people even know what things like higher-kinded types are? Maybe we should say what kind of code features like that would let you write.

TC: There's tension between that and the compression needed for a survey. Macroexpanding each feature would probably make the length untenable. Also, if a lot of people see "HKT" and say, "yes, I want that", the fact that those people even know about it provides non-zero information.

tmandry: We should ask a survey expert.

scottmcm: Thinking out loud:

Which of these is causing you the most trouble these days?:

  • Implementing things on tuples
  • Splitting things across crates
  • Having to do iterator implementations manually
  • Not being able to do enough in const fn
  • Needing to drop down to C ABI for rust plugins

scottmcm: What's the timeline here?

tmandry: It usually happens in the fall.

Lokathor: We could discuss on Zulip.

Consensus: Let's discuss on Zulip.

Nominated RFCs, PRs, and issues

"document ABI compatibility" rust#115476

Link: https://github.com/rust-lang/rust/pull/115476

TC: RalfJ is asking for us to remove a concern that was filed to check that T-opsem had looked at this. They have now.

pnkfelix: I'll resolve the concern.

Concensus: We'll resolve the concern and this will go into FCP.

"const-eval: make misalignment a hard error" rust#115524

Link: https://github.com/rust-lang/rust/pull/115524

TC: This is in FCP. Any objections to unnominating?

Consensus: Let's unnominate.

"const_eval: allow function pointer signatures containing &mut T in const contexts" rust#116015

Link: https://github.com/rust-lang/rust/pull/116015

TC: This is in FCP. Any objections to unnominating?

Consensus: Let's unnominate.

"Reserve gen keyword for gen {} blocks and gen fn in 2024 edition" rust#116447

Link: https://github.com/rust-lang/rust/pull/116447

TC: @oli raised this issue:

gen fn foo() {} already did not parse on any edition, so I just added a custom (slightly incorrect) error message for it, when the 2024 edition is enabled.

gen {} blocks are technically able to exist, as someone could name a struct gen and then try to initialize its fields. With this PR this will be forbidden in 2024. I could start linting it on older editions.

Historically (async blocks, dyn traits) we've first linted on one edition, then errored in the follow up edition. That would be to lint in 2024 and hard error in 2027. I guess we could go with k#gen for 2024 edition.

Generators tracking issue #43122

The semantics of gen blocks and gen fn are deliberately omitted from this PR. While I have opinions on those, development on them should follow the usual T-lang path for new features

r? lang

TC: @scottmcm nominated:

Note that since rust-lang/rfcs#2441 (comment) lang has said that we're not pre-reserving keywords for features that haven't been RFC'd.

Thus the default expectation here is that this will be written using the syntax space reserved in https://rust-lang.github.io/rfcs/3101-reserved_prefixes.html for now, and keyword reservations will happen along with the semantic RFC.

I think that gen fn could probably happen without that, though, by having gen there be a contextual keyword. But in expressions, it would be k#gen { ... } (or do gen { ... } or whatever) for now, even in a future edition.

(Nominated for lang meeting discussion regardless.)

eholk: Do we want to RFC this before 2024?

pnkfelix: There is an RFC linked from the issue.

https://github.com/rust-lang/rfcs/pull/2033

(Discussion that it being an experimental RFC is good enough for reserving a keyword.)

Lokathor: Perhaps we should do a quick RFC to reserve the keyword based on the earlier RFC. Then we're policy compliant.

tmandry: Is that the policy?

scottmcm: I notice the RFC doesn't contain generator blocks.

Lokathor: Right.

tmandry: It needs an RFC, but it could be a small one.

eholk: Do we think that gen is a common variable name?

scottmcm: But the RFC can deal with that.

pnkfelix: We shouldn't block the experiment on the RFC.

scottmcm: The experiment should move forward with k#gen.

pnkfelix: I'm concerned about the semantics holding up getting the keyword into 2024.

scottmcm: The RFC about not reserving covered this case, e.g. not repeating the experience of throw.

eholk: This seems distinguishable. We're much closer here.

tmandry: I'm in favor of reserving the keyword on the basis of the fact that this is a feature that we want.

TC: What if we proposed an RFC that says that we're going to write a later RFC to pin down the semantics (on the basis of the experiment being run), but we're going to reserve the keyword now.

scottmcm: It sounds though, based on what eholk said, that we may have the semantics somewhat pinned down based on the async/await work.

eholk: That's true, but there are some open questions.

scottmcm: Maybe the RFC should say the semantics we know now, and leave open the questions that are open.

TC: Who has the most context on this?

eholk: Myself and tmandry.

tmandry: And we should ask @oli.

scottmcm: I'll write a comment on the thread.

Consensus: We'll try to find someone to write an RFC for this, and we'll leave a comment on the issue that we're looking for one.

"types team / lang team interaction" rust#116557

Link: https://github.com/rust-lang/rust/issues/116557

TC: nikomatsakis nominated this:

We had some discussion about types/lang team interaction. We concluded a few things:

  • Pinging the team like @rust-lang/lang is not an effective way to get attention. Nomination is the only official way to get attention.
  • It's ok to nominate things in an "advisory" capacity but not block (e.g., landing a PR), particularly as most any action can ultimately be reversed. But right now, triagebot doesn't track closed issues, so that's a bit risky.

Action items:

  • We should fix triagebot to track closed issues.

Consensus: Let's discuss this when nikomatsakis is available.

"Stabilize anonymous_lifetime_in_impl_trait" rust#107378

Link: https://github.com/rust-lang/rust/pull/107378

TC: This had been waiting on the author to answer some questions. Those have now been answered, and tmandry nominated this for further discussion.

tmandry: The answer to our questions on whether the lifetime should be higher-ranked is that we had accidentally stabilized this with async fn.

pnkfelix: If we think this is wrong, we shouldn't expand the amount of code affected.

tmandry: I'm not obvious what the correct behavior is. Maybe we want to have Niko to discuss.

scottmcm: I agree with tmandry that associated types are outputs https://github.com/rust-lang/rfcs/pull/2548, whereas Self and generics are inputs.

TC: We could ask for a document that does a de novo analysis. I.e., setting aside the accidental stabilization, we should have a write-up about the pros and cons for each choice.

tmandry: I'll leave some thoughts on the PR.

Consensus: We should think further about this and discuss with nikomatsakis. We'll ask for more analysis on the PR.

"Guarantee representation of None in NPO" rust#115333

Link: https://github.com/rust-lang/rust/pull/115333

TC: @tmandry nominated this:

I'll proxy @the8472's concern, to make sure we come to a resolution before merging. I'm also re-nominating for lang team discussion so the team has a chance to flag any concerns they have with this change.

Since the change would be more conservative than the original proposal, though, I don't think it requires a new FCP.

@rfcbot concern None-value of Option<fat-reference> @rustbot label I-lang-nominated

tmandry: I wanted people to be aware here. We don't need to redo the FCP since we're making it more conservative.

scottmcm: +1. Since we don't guarantee the representation of fat pointers in general, it would be strange to do here.

pnkfelix: +1.

tmandry: I'll leave a note.

Consensus: We'll reduce the PR to the more conservative variant and move forward with the proposed FCP.

"make matching on NaN a hard error" rust#116284

Link: https://github.com/rust-lang/rust/pull/116284

TC: In the 2023-10-03 meeting, we discussed and decided to ask Ralf what he thinks we should do. Ralf replied:

First, what is the motivation to eliminate NaN specifically?

NaN is by far the least well-behaved class of float values when it comes to comparison, since they don't even satisfy reflexivity. No matter the mental model for match, it seems very hard to justify a value not even matching itself.

Second, do we have a sense for the overall "plan" around the semantics of pattern matching and floating point values? At some point we expected to remove that, but now it seems like we are allowing floats, presumably with today's semantics, is that correct?

There was the plan to disallow floats entirely as part of the move to enforcing structural matching (this even got RFC'd). Then t-lang rejected #84045, which is a departure from that plan. If t-lang has a long-term plan here than you didn't tell us about it. :)

TC: There is some further discussion on the issue.

tmandry: We can unnominate; we have a design meeting next week on this.

Consensus: We'll discuss tomorrow.

"remove 'illegal_floating_point_literal_pattern' future-compat lint" rust#116098

Link: https://github.com/rust-lang/rust/pull/116098

TC: RalfJ raised this issue:

In #84045 the lang team rejected making this a hard error. So clearly we shouldn't have a lint saying "this will be a hard error in the future".

Fixes #41620

pnkfelix: Want to discuss this at the design meeting?

all: +1.

Consensus: We'll discuss this at the design meeting next week.

"Non-temporal stores (and _mm_stream operations in stdarch) break our memory model" rust#114582

Link: https://github.com/rust-lang/rust/issues/114582

TC: We discussed this on 2023-08-15.

@RalfJ points out that certain compiler intrinsics don't fit within the memory model of the Rust Abstract Machine. For this one in particular, in the time between doing a non-temporal store and before doing a store fence, things are a bit nuts. But this has a performance benefit as it bypasses the cache, so "fixing" it by eliminating the performance benefit isn't a good option. The meeting consensus was to table this while looking for ways to raise awareness. As @scottmcm said, "it wouldn't be the first thing you could do in unsafe that turns out to be sketchy."

TC: Some discussion followed about this issue after the meeting.

TC: Is there anything we want to do before unnominating this?

Lokathor: Ralf wants us to deprecate or mark as permanently unsound these intrinsics.

tmandry: That would seem a disappointing outcome. These are probably useful.

Lokathor: One problem is that you want to use these inside a loop, and you'd get bad codegen if you used assembly.

tmandry: It seems like we need some way to express this.

Lokathor: Ralf's position is that these don't fit in the Rust abstract machine, and that if you're using these, you're not writing Rust code.

TC: There is the option to extend the Rust memory model to allow expressing these. That's a big ask, of course.

tmandry: Perhaps we should lint/warn on their use. We could use the deprecation machinery.

Lokathor: The fastest path in terms of existing infrastructure is deprecating them.

tmandry: I'll write a comment that we should lint on this. We can discuss if there's a response next time. Otherwise, let's unnominate.

pnkfelix: A lint is a step. It needs serious investigation. Jubilee has been adding the SFENCE to people's code across GitHub.

TC: That's a great point. We need to suggest to people to add the SFENCE in the lint.

Consensus: We'll propose a lint for this, and we'll discuss it again.

(The meeting ended here.)

".await does not perform autoref or autoderef" rust#111546

Link: https://github.com/rust-lang/rust/issues/111546

TC: This was nominated for T-lang (and for T-types) by WG-async. @tmandry said:

We discussed this in a recent wg-async meeting (notes). The consensus was that we thought the change was well-motivated. At the same time, we want to be cautious about introducing problems (namely backwards compatibility).

There should probably be a crater run of this change, and we should also work through any problematic interactions that could be caused by this change. (@rust-lang/types should probably weigh in.)

The main motivation for the change is the analogy to .method(), as well as to wanting async and sync to feel similarly convenient in most cases.

Note that there is another analogy that works against this, the analogy to IntoIterator, where the lang-effect form (for _ in foo {}) does not do autoref/autoderef. However, given that this looks very different from foo.await, and taking a reference with that form is significantly more convenient (for x in &foo or for x in foo.iter() vs (&foo).await), it seemed the analogy was stretched pretty thin. So we elected to put more weight on the above two considerations.

That being said, this change would need lang team signoff. You can consider this comment wg-async's official recommendation to the lang team.

"Lifetime Capture Rules 2024" rfcs#3498

Link: https://github.com/rust-lang/rfcs/pull/3498

TC: FCP merge has been proposed. Some minor edits are in progress, but no serious concerns are outstanding.

"RFC: Syntax for embedding cargo-script manifests" rfcs#3503

Link: https://github.com/rust-lang/rfcs/pull/3503

TC: The following syntax is being proposed for addition to Rust:

#!/usr/bin/env cargo
```cargo
[dependencies]
clap = { version = "4.2", features = ["derive"] }
```

use clap::Parser;

"Implement PartialOrd and Ord for Discriminant" rust#106418

Link: https://github.com/rust-lang/rust/pull/106418

TC: We discussed in the 2023-09-26 meeting. We decided to simply let T-libs-api know about what we had discussed. Niko left a comment to the effect that "right now we seem to have no good options."

TC: There has since been further discussion on the issue.

"dyn Trait comparison should not include the vtable pointer" rust#106447

Link: https://github.com/rust-lang/rust/issues/106447

TC: The FCP to close this issue has been completed. However, @Amanieu is still looking for a way forward. There's been some discussion on Zulip about this.

TC: We discussed this in the 2023-09-26 triage meeting without a full resolution, but decided that adding ptr::addr_eq may be one small step forward. @pnkfelix proposed this in the ticket and then to T-libs-api. @dtolnay seconded the request and asked for a PR.

"Tracking Issue for the Rust specification" rust#113527

Link: https://github.com/rust-lang/rust/issues/113527

TC: We've created a new Zulip stream for this work.

TC: A job description for the editor has been discussed. There seems to be consensus to move forward on the hiring process.

TC: There is outstanding discussion on the appropriate name of this document.

TC: There is an outstanding discussion ongoing about the goals of the specification.

TC: Niko has proposed to create the team, with pnkfelix and Mara as the leads, and for that team to work to draft a new set of requirements.

"Disallow references to static mut [Edition Idea]" rust#114447

Link: https://github.com/rust-lang/rust/issues/114447

TC: We discussed on 2023-09-05 and the consensus was in favor of going in this direction. We left a comment with the path forward and labeled it E-help-wanted.

TC: Are there any particular people we might want to ping who we know might have an interest in this?

"Stabilize async fn and return-position impl Trait in trait" rust#115822

Link: https://github.com/rust-lang/rust/pull/115822

TC: This is in FCP.

"MaybeDangling" rfcs#3336

Link: https://github.com/rust-lang/rfcs/pull/3336

TC: We discussed this in an RFC read on 2023-09-27. @scottmcm said that he would propose FCP merge.

"RFC: Implementable trait aliases" rfcs#3437

Link: https://github.com/rust-lang/rfcs/pull/3437

TC: This RFC has also been proposed for a design meeting as an RFC read, but it has not yet been scheduled for one.

TC: We discussed this in the 2023-09-26 triage meeting. We decided that this needed more discussion and that we'd leave a comment about what was discussed in the issue. Niko has posted that comment.

"Report monomorphization time errors in dead code, too" rust#112879

Link: https://github.com/rust-lang/rust/pull/112879

TC: We're waiting on @oli to investigate an unexpected incremental build-time regression. I made sure that @oli knows that, and knows that we resolved the fundamental question that was blocking this earlier in RFC 3477.

"Support overriding warnings level for a specific lint via command line" rust#113307

Link: https://github.com/rust-lang/rust/pull/113307

TC: We discussed in the 2023-09-26 meeting, but were unsure of the question we were being asked. We've reiterated on the issue a request for clarification.

Action item review

Pending lang team project proposals

None.

PRs on the lang-team repo

"Add size != stride to frequently requested changes" lang-team#216

Link: https://github.com/rust-lang/lang-team/pull/216

"update membership rules" lang-team#225

Link: https://github.com/rust-lang/lang-team/pull/225

RFCs waiting to be merged

"RFC: Unicode and escape codes in literals" rfcs#3349

Link: https://github.com/rust-lang/rfcs/pull/3349

"Add f16 and f128 float types" rfcs#3453

Link: https://github.com/rust-lang/rfcs/pull/3453

S-waiting-on-team

"Tracking issue for dyn upcasting coercion" rust#65991

Link: https://github.com/rust-lang/rust/issues/65991

"Stabilize anonymous_lifetime_in_impl_trait" rust#107378

Link: https://github.com/rust-lang/rust/pull/107378

"document ABI compatibility" rust#115476

Link: https://github.com/rust-lang/rust/pull/115476

"const-eval: make misalignment a hard error" rust#115524

Link: https://github.com/rust-lang/rust/pull/115524

"Stabilize async fn and return-position impl Trait in trait" rust#115822

Link: https://github.com/rust-lang/rust/pull/115822

"remove 'illegal_floating_point_literal_pattern' future-compat lint" rust#116098

Link: https://github.com/rust-lang/rust/pull/116098

Proposed FCPs

Check your boxes!

"RFC: inherent trait implementation" rfcs#2375

Link: https://github.com/rust-lang/rfcs/pull/2375

"unsafe attributes" rfcs#3325

Link: https://github.com/rust-lang/rfcs/pull/3325

"Lifetime Capture Rules 2024" rfcs#3498

Link: https://github.com/rust-lang/rfcs/pull/3498

"Tracking issue for dyn upcasting coercion" rust#65991

Link: https://github.com/rust-lang/rust/issues/65991

"Tracking Issue for const mem::discriminant" rust#69821

Link: https://github.com/rust-lang/rust/issues/69821

"Stabilise inline_const" rust#104087

Link: https://github.com/rust-lang/rust/pull/104087

"Stabilize anonymous_lifetime_in_impl_trait" rust#107378

Link: https://github.com/rust-lang/rust/pull/107378

"TAIT defining scope options" rust#107645

Link: https://github.com/rust-lang/rust/issues/107645

"Report monomorphization time errors in dead code, too" rust#112879

Link: https://github.com/rust-lang/rust/pull/112879

"FCP process: Require 2/3 majority for FCP" rust#114986

Link: https://github.com/rust-lang/rust/issues/114986

"c_unwind full stabilization request: change in extern "C" behavior" rust#115285

Link: https://github.com/rust-lang/rust/issues/115285

"Guarantee representation of None in NPO" rust#115333

Link: https://github.com/rust-lang/rust/pull/115333

"document ABI compatibility" rust#115476

Link: https://github.com/rust-lang/rust/pull/115476

"Decision: semantics of the #[expect] attribute" rust#115980

Link: https://github.com/rust-lang/rust/issues/115980

"Stabilize const_maybe_uninit_zeroed and const_mem_zeroed" rust#116218

Link: https://github.com/rust-lang/rust/pull/116218

"Stabilize Ratified RISC-V Target Features" rust#116485

Link: https://github.com/rust-lang/rust/pull/116485

Active FCPs

"const-eval: make misalignment a hard error" rust#115524

Link: https://github.com/rust-lang/rust/pull/115524

"Stabilize async fn and return-position impl Trait in trait" rust#115822

Link: https://github.com/rust-lang/rust/pull/115822

"const_eval: allow function pointer signatures containing &mut T in const contexts" rust#116015

Link: https://github.com/rust-lang/rust/pull/116015

P-critical issues

None.

Select a repo