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

Tracking issue for RFC 2229, "Closures Capture Disjoint Fields" #53488

Closed
4 tasks
Centril opened this issue Aug 19, 2018 · 19 comments
Closed
4 tasks

Tracking issue for RFC 2229, "Closures Capture Disjoint Fields" #53488

Centril opened this issue Aug 19, 2018 · 19 comments
Assignees
Labels
A-closures Area: closures (`|args| { .. }`) B-RFC-approved Feature: Approved by a merged RFC but not yet implemented. C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. T-lang Relevant to the language team, which will review and decide on the PR/issue.

Comments

@Centril
Copy link
Contributor

Centril commented Aug 19, 2018

This is a tracking issue for the RFC "Closures Capture Disjoint Fields" (rust-lang/rfcs#2229).

Status

This is under active development by the wg-rfc-2229 compiler-team working group. You can track their progress on the project-rfc-2229 repository.

Implementation plan and status

See the RFC 2229 project board and milestones.

Links, see also

Unresolved questions:

  • How to optimize pointers. Can borrows that all reference parts of the same object be stored as a single pointer? How should this optimization be implemented (e.g. a special repr, refinement typing)?
  • How to signal that a function is pure. Is this even needed/wanted? Any other places where the language could benefit?
  • Should Box be special?
  • Drop order can change as a result of this RFC, is this a real stability problem? How should this be resolved?

This issue has been assigned to @arora-aman via this comment.

@Centril Centril added B-RFC-approved Feature: Approved by a merged RFC but not yet implemented. T-lang Relevant to the language team, which will review and decide on the PR/issue. C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. labels Aug 19, 2018
@eddyb
Copy link
Member

eddyb commented Aug 19, 2018

IIRC, this needs to wait for the new MIR (NLL) borrow-checker to replace the old one.
cc @rust-lang/wg-compiler-nll

@samsartor
Copy link

I would love to follow this through and give the code a shot, but it's probably too big of a first contribution to the compiler. Maybe I'll take a swing at some starter issues and then come back if no one else has gotten it done.

@eddyb Yes, this definitely should be built on NLL.

@blitzerr blitzerr self-assigned this Oct 29, 2018
pietroalbini added a commit to pietroalbini/rust that referenced this issue Nov 16, 2018
kennytm added a commit to kennytm/rust that referenced this issue Nov 17, 2018
pietroalbini added a commit to pietroalbini/rust that referenced this issue Nov 18, 2018
bors added a commit that referenced this issue Nov 19, 2018
Rollup of 25 pull requests

Successful merges:

 - #55562 (Add powerpc- and powerpc64-unknown-linux-musl targets)
 - #55564 (test/linkage-visibility: Ignore on musl targets)
 - #55827 (A few tweaks to iterations/collecting)
 - #55834 (Forward the ABI of the non-zero sized fields of an union if they have the same ABI)
 - #55857 (remove unused dependency)
 - #55862 (in which the E0618 "expected function" diagnostic gets a makeover)
 - #55867 (do not panic just because cargo failed)
 - #55894 (miri enum discriminant handling: Fix treatment of pointers, better error when it is undef)
 - #55916 (Make miri value visitor usfeful for mutation)
 - #55919 (core/tests/num: Simplify `test_int_from_str_overflow()` test code)
 - #55923 (reword #[test] attribute error on fn items)
 - #55935 (appveyor: Use VS2017 for all our images)
 - #55949 (ty: return impl Iterator from Predicate::walk_tys)
 - #55952 (Update to Clang 7 on CI.)
 - #55953 (#53488 Refactoring UpvarId)
 - #55962 (rustdoc: properly calculate spans for intra-doc link resolution errors)
 - #55963 (Stress test for MPSC)
 - #55968 (Clean up some non-mod-rs stuff.)
 - #55970 (Miri backtrace improvements)
 - #56007 (CTFE: dynamically make sure we do not call non-const-fn)
 - #56011 (Replace data.clone() by Arc::clone(&data) in mutex doc.)
 - #56012 (avoid shared ref in UnsafeCell::get)
 - #56016 (Add VecDeque::resize_with)
 - #56027 (docs: Add missing backtick in object_safety.rs docs)
 - #56043 (remove "approx env bounds" if we already know from trait)

Failed merges:

r? @ghost
kennytm pushed a commit to pietroalbini/rust that referenced this issue Nov 19, 2018
bors added a commit that referenced this issue Nov 19, 2018
Rollup of 25 pull requests

Successful merges:

 - #55562 (Add powerpc- and powerpc64-unknown-linux-musl targets)
 - #55564 (test/linkage-visibility: Ignore on musl targets)
 - #55827 (A few tweaks to iterations/collecting)
 - #55834 (Forward the ABI of the non-zero sized fields of an union if they have the same ABI)
 - #55857 (remove unused dependency)
 - #55862 (in which the E0618 "expected function" diagnostic gets a makeover)
 - #55867 (do not panic just because cargo failed)
 - #55894 (miri enum discriminant handling: Fix treatment of pointers, better error when it is undef)
 - #55916 (Make miri value visitor useful for mutation)
 - #55919 (core/tests/num: Simplify `test_int_from_str_overflow()` test code)
 - #55923 (reword #[test] attribute error on fn items)
 - #55949 (ty: return impl Iterator from Predicate::walk_tys)
 - #55952 (Update to Clang 7 on CI.)
 - #55953 (#53488 Refactoring UpvarId)
 - #55962 (rustdoc: properly calculate spans for intra-doc link resolution errors)
 - #55963 (Stress test for MPSC)
 - #55968 (Clean up some non-mod-rs stuff.)
 - #55970 (Miri backtrace improvements)
 - #56007 (CTFE: dynamically make sure we do not call non-const-fn)
 - #56011 (Replace data.clone() by Arc::clone(&data) in mutex doc.)
 - #56012 (avoid shared ref in UnsafeCell::get)
 - #56016 (Add VecDeque::resize_with)
 - #56027 (docs: Add missing backtick in object_safety.rs docs)
 - #56043 (remove "approx env bounds" if we already know from trait)
 - #56059 (Increase `Duration` approximate equal threshold to 1us)
@ghedo
Copy link
Contributor

ghedo commented Sep 5, 2019

@blitzerr could you please provide a status update on this? it looks like the related issues (#57482 and #60205) had some work done, but they look stuck now. Anything that needs help with? Not sure if I can do anything, but I can try :)

@tesuji
Copy link
Contributor

tesuji commented May 15, 2020

I know. But with polonius, there might be support for self-referential types in the future. So for future design space we need to care about how to interact this feature with self-referential types.

@Ixrec
Copy link
Contributor

Ixrec commented May 16, 2020

This is the first I've heard of Polonius having anything to do with self-referential types, despite having read all the blog posts and docs behind your link. Is this interaction spelled out somewhere?

@KiChjang
Copy link
Member

@Ixrec I do recall that there was a presentation from Niko that says it could maybe help with self-referential structs somehow, but he did preface it by saying that it's purely speculative: https://youtu.be/_agDeiWek8w?t=1900.

@nikomatsakis
Copy link
Contributor

I'm not really aware of any particular interaction between this feature and self-referential types. Am I missing something?

@nikomatsakis
Copy link
Contributor

@rustbot assign arora-aman

@rustbot
Copy link
Collaborator

rustbot commented Jun 8, 2020

Error: Parsing assign command in comment failed: ...'arora-aman' | error: user should start with @ at >| ''...

Please let @rust-lang/release know if you're having trouble with this bot.

@varkor
Copy link
Member

varkor commented Jun 9, 2020

@rustbot assign @arora-aman

@rustbot rustbot self-assigned this Jun 9, 2020
@arora-aman
Copy link
Member

@rustbot claim

@rustbot rustbot assigned rustbot and unassigned rustbot Jun 22, 2020
@nikomatsakis nikomatsakis added this to Proposed in 2021 Edition Blockers Jul 30, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this issue Aug 16, 2020
…matsakis

rustc_typeck: construct {Closure,Generator}Substs more directly.

We've previously not had a way to create `{Closure,Generator}Substs` other than instantiating all generics as inference variables and unifying the inference types (extracted using the regular `{Closure,Generator}Substs` accessors), with the actual types.

With this PR, those hacks, and assumptions about the order of closure/generator-specific components, are replaced with a simple API where the base `Substs` are combined with the additional information into a `{Closure,Generator}Substs`.
This might also be faster than relying inference, although probably not by much.

r? @nikomatsakis cc rust-lang#53488 @blitzerr
tmandry added a commit to tmandry/rust that referenced this issue Aug 16, 2020
…matsakis

rustc_typeck: construct {Closure,Generator}Substs more directly.

We've previously not had a way to create `{Closure,Generator}Substs` other than instantiating all generics as inference variables and unifying the inference types (extracted using the regular `{Closure,Generator}Substs` accessors), with the actual types.

With this PR, those hacks, and assumptions about the order of closure/generator-specific components, are replaced with a simple API where the base `Substs` are combined with the additional information into a `{Closure,Generator}Substs`.
This might also be faster than relying inference, although probably not by much.

r? @nikomatsakis cc rust-lang#53488 @blitzerr
@taikulawo
Copy link

any update on this? Does the RFC has been implemented in rust?

@arora-aman
Copy link
Member

any update on this? Does the RFC has been implemented in rust?

Yes it's available on the Rust nightly builds under #![feature(capture_disjoint_fields)].

On a somewhat side note we should probably update the tracking issue with the project board.

@taikulawo
Copy link

any update on this? Does the RFC has been implemented in rust?

Yes it's available on the Rust nightly builds under #![feature(capture_disjoint_fields)].

On a somewhat side note we should probably update the tracking issue with the project board.

Yes, please, RFC tracking issue should reveal whether it has been implemented, and how to use it 😃. I believe that someone have same concerns with me

@nikomatsakis
Copy link
Contributor

Stabilization proposed in #88126

@ehuss
Copy link
Contributor

ehuss commented Oct 2, 2021

Since this is now stabilized, should this issue be closed?

@nikomatsakis
Copy link
Contributor

Yes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-closures Area: closures (`|args| { .. }`) B-RFC-approved Feature: Approved by a merged RFC but not yet implemented. C-tracking-issue Category: A tracking issue for an RFC or an unstable feature. T-lang Relevant to the language team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests