this post was submitted on 25 Apr 2024
42 points (100.0% liked)

Rust

5960 readers
2 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

!performance@programming.dev

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] kevincox@lemmy.ml 6 points 6 months ago (4 children)

This is a nice small feature. I'm curious about the commit description:


foo(const { 1 + 1 })

which is roughly desugared into

struct Foo;
impl Foo {
    const FOO: i32 = 1 + 1;
}
foo(Foo::FOO)

I would have expected it to desugar to something like:

foo({
  const TMP: i32 = 1 + 1;
  TMP
})

But I can't seem an explanation why the struct with impl is used. I wonder if it has something to do with propagating generics.

[–] 0v0@sopuli.xyz 10 points 6 months ago (1 children)

It's because it has to work in pattern contexts as well, which are not expressions.

[–] SorteKanin@feddit.dk 2 points 6 months ago (1 children)

Wait, in pattern context? How? Can you give an example?

[–] 0v0@sopuli.xyz 10 points 6 months ago
fn foo(x: i32) {
    match x {
        const { 3.pow(3) } => println!("three cubed"),
        _ => {}
    }
}

But it looks like inline_const_pat is still unstable, only inline_const in expression position is now stabilized.

load more comments (2 replies)