-
Notifications
You must be signed in to change notification settings - Fork 492
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
Some constant/static updates. #867
Conversation
ehuss
commented
Aug 3, 2020
- Clarify that array length is a "constant expression". Closes Array type should say size expression is a *const* expression. #582.
- Remove restriction that statics must use other statics by reference. This was removed in Loosened rules involving statics mentioning other statics rust#51110 (1.29 I believe).
- Clarify that paths to statics are allowed only within static initializers.
- Add a clarification of usage of constants from external crates (closes Clarify the meaning of reference-typed constants #22 I believe).
- Mention that generic parameters cannot be used in a const context (Array lengths don't support generic parameters. rust#43408)
- Some other minor tweaks.
@oli-obk Do you think you'd be able to review this? |
src/const_eval.md
Outdated
@@ -53,7 +54,7 @@ to be run. | |||
A _const context_ is one of the following: | |||
|
|||
* [Array type length expressions] | |||
* Repeat expression length expressions | |||
* [Array repeat expressions][array expressions] |
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.
Specifically only the length field of the repeat expression
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.
Oops, sorry! I probably shouldn't open PRs late at night.
@@ -76,6 +77,10 @@ Notable features that const contexts have, but const fn haven't are: | |||
* union field access | |||
* [`transmute`] invocations. | |||
|
|||
Conversely, the following are possible in a const function, but not in a const context: | |||
|
|||
* Use of generic parameters. |
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.
that's not possible in const fn
yet either.
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.
Hm, maybe I'm a bit confused. The following seems to work for me:
const fn cfunc<T>(x: &T) -> usize {
std::mem::size_of::<T>()
}
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.
ah, well, yes. I was thinking of trait bounds on generic parameters.
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.
I think the restriction on trait bounds is already mentioned above. Let me know if you think this should be worded any differently.
src/items/constant-items.md
Outdated
guaranteed to refer to the same memory address. | ||
context when used. This includes usage of constants from external crates. | ||
References to the same constant are not necessarily guaranteed to refer to the | ||
same memory address. |
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.
Maybe also mention that this holds for !Copy
types. So you can have a const FOO: String = String::new()
and copy that around as many times as you want.
@Havvy can you approve this? |
Update books ## nomicon 2 commits in bfe1ab96d717d1dda50e499b360f2e2f57e1750a..25854752549d44d76fbd7650e17cb4f167a0b8fb 2020-06-05 13:19:42 -0400 to 2020-08-19 16:41:48 -0400 - Follow-up of rust-lang#75152 (rust-lang/nomicon#235) - Follow-up for rust-lang#74850 (rust-lang/nomicon#233) ## reference 7 commits in c9b2736a059469043177e1e4ed41a55d7c63ac28..1b6c4b0afab97c0230433466c97167bbbe8445f6 2020-08-03 03:34:03 -0700 to 2020-08-18 17:04:28 -0700 - Some constant/static updates. (rust-lang/reference#867) - Add casting rules from function items to other types (rust-lang/reference#878) - Apply joshtriplett's suggestion - Add note clarifying 16-bit support. - Document min pointer width. - Update to `dyn Trait` syntax in a couple places (rust-lang/reference#875) - mention that `#[track_caller]` on `fn main` is forbidden (rust-lang/reference#872) ## book 2 commits in 363293c1c5ce9e84ea3935a5e29ce8624801208a..c0a6a61b8205da14ac955425f74258ffd8ee065d 2020-08-03 15:56:30 -0500 to 2020-08-14 14:21:49 -0500 - Correct listing 11-10: Take tests module out of main function. (rust-lang/book#2427) - Update link to russian translation (rust-lang/book#2423) ## rust-by-example 5 commits in 2e9271981adc32613365810f3428334c07095215..80a10e22140e28392b99d24ed02f4c6d8cb770a0 2020-07-27 13:39:16 -0500 to 2020-08-08 09:56:46 -0300 - Add tuple `..` operator example (rust-lang/rust-by-example#1368) - Clarify wording (rust-lang/rust-by-example#1366) - Include arc (rust-lang/rust-by-example#1365) - Modify supertraits sample code (rust-lang/rust-by-example#1361) - Remove mention of `try!` in `Display` example (rust-lang/rust-by-example#1357) ## embedded-book 3 commits in b5256448a2a4c1bec68b93c0847066f92f2ff5a9..0cd2ca116274b915924c3a7e07c1e046b6f19b77 2020-07-24 23:09:29 +0000 to 2020-08-19 10:33:15 +0000 - Ignore unused argument in closure (rust-embedded/book#261) - Fix broken sentence (rust-embedded/book#260) - Add additional command to try when verifying installation. (rust-embedded/book#259)