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
|
|
||
| * [Array type length expressions] | ||
| * Repeat expression length expressions | ||
| * [Array repeat expressions][array expressions] |
There was a problem hiding this comment.
Specifically only the length field of the repeat expression
There was a problem hiding this comment.
Oops, sorry! I probably shouldn't open PRs late at night.
|
|
||
| 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.
that's not possible in const fn yet either.
There was a problem hiding this comment.
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.
ah, well, yes. I was thinking of trait bounds on generic parameters.
There was a problem hiding this comment.
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.
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)