-
Notifications
You must be signed in to change notification settings - Fork 516
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
Describe drop elaboration #1240
Describe drop elaboration #1240
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is interesting, thanks for writing it up :) I won't merge it until Niko or Taylor get a chance to review though.
@nikomatsakis I assigned you on this, but feel free to reassign! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was a good read! It made me want to dig a bit deeper into the code-- I think I'd like some examples of how the bits are propagated -- but I definitely think it's good enough already to be useful to people who are coming to read the code.
I believe that the stabilization in question is not proceeding anymore, so I think we can go ahead and merge this. I don't think it's quite at the level I would want to serve as a kind of 'rough language spec', but that's not required just now. |
Update books ## reference 3 commits in a01d151a7250a540a9cb7ccce5956f020c677c21..c0f222da23568477155991d391c9ce918e381351 2021-10-22 22:34:13 +0900 to 2021-11-22 10:30:57 -0800 - Byte literal and string syntax: add missing quote escapes (rust-lang/reference#1101) - fix crate_name attribute description (rust-lang/reference#1109) - Update list of types with magic Copy impls (rust-lang/reference#1104) ## book 19 commits in 5c5dbc5b196c9564422b3193264f3288d2a051ce..a5e0c5b2c5f9054be3b961aea2c7edfeea591de8 2021-11-09 19:30:43 -0500 to 2021-11-19 17:06:19 -0500 - Propagate edits to chapter 4 back - Edits to the edits of chapter 4 - ch 4 from nostarch - Fix install links - Snapshot of chapter 10 - Fix quotes - Add more explanation of Self in chapter 10. Fixes rust-lang/book#2222. - We've defined the signatures, not behaviors. Fixes rust-lang/book#2917 - Remove 'most distinctive' claim. Fixes rust-lang/book#2861. - Clarify that traits must be brought into scope to use their methods - Explain why lifetimes are part of the function contract better - Further edits to rust-lang/book#2895 - Clarify generic types in mixin - Change 'either' to 'at least one of'. See rust-lang/book#2885 - Clarify explanation of lifetime annotations a bit - Further edits to clarify code explanation - Clarify the meaning of a sentence in ch10-03 - Clarify this code is demonstrating usage of the library from a binary. Fixes rust-lang/book#1445. - Clarify generics in method definitions and impls. Fixes rust-lang/book#2679. ## rust-by-example 1 commits in e9d45342d7a6c1def4731f1782d87ea317ba30c3..43f82530210b83cf888282b207ed13d5893da9b2 2021-11-02 13:33:03 -0500 to 2021-11-21 22:31:50 -0300 - Update `Development dependencies` page. (rust-lang/rust-by-example#1478) ## rustc-dev-guide 7 commits in 196ef69aa68f2cef44f37566ee7db37daf00301b..a2fc9635029c04e692474965a6606f8e286d539a 2021-11-07 07:48:47 -0600 to 2021-11-18 13:31:13 -0500 - Describe drop elaboration (rust-lang/rustc-dev-guide#1240) - Fix an invalid link on Diagnostic Items (rust-lang/rustc-dev-guide#1261) - Fix broken links related to `rustc_borrowck` (rust-lang/rustc-dev-guide#1259) - Unify `x.py` usage (rust-lang/rustc-dev-guide#1258) - Spelling fixes - Fix compare-mode documentation - Fix broken link in "Bootstrapping" ## edition-guide 1 commits in 27f4a84d3852e9416cae5861254fa53a825c56bd..8e0ec8c77d8b28b86159fdee9d33a758225ecf9c 2021-11-08 10:13:20 -0500 to 2021-11-12 06:30:23 -0800 - Fix a broken link in the Disjoint Capture in Closure chapter (rust-lang/edition-guide#273) ## embedded-book 1 commits in 51739471276b1776dea27cf562b974ef07e24685..8c395bdd8073deb20ca67e1ed4b14a3a7e315a37 2021-10-17 16:48:42 +0000 to 2021-11-14 11:38:31 +0000 - added math chapter (rust-embedded/book#308)
I've focused on the "big picture" rather than trying to describe the existing pass from the bottom up. There are some subtleties (mostly around unwinding) that I don't fully understand. I did not implement the existing pass, so it's possible that I've missed something, but I think what I've described has been described correctly.
This (or something like it) was requested as part of the stabilization of rust-lang/rust#73255. I've included a section on the relationship between drop elaboration and const-checking which assumes that
#![feature(const_precise_live_drops)]
is merged.cc @nikomatsakis @cramertj