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

Rust

7485 readers
26 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 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] sugar_in_your_tea@sh.itjust.works 5 points 2 years ago (2 children)

Huh, this is awesome! From the link, this now works:

let v: Vec<i32> = const { Vec::new() };

I'm going to have to play with this to see how far it goes.

[–] jasory@programming.dev 2 points 2 years ago (1 children)

Wouldn't this just prevent you from allocating more memory (than zero)?

[–] sugar_in_your_tea@sh.itjust.works 2 points 2 years ago* (last edited 2 years ago)

Ah, apparently for now you're not allowed to allocate. But vec::new_in(allocator) looks interesting. This works in nightly today:

#![feature(allocator_api)]

use std::alloc::Global;

fn main() {
    const MY_VEC: Vec<i32> = const {
        Vec::new_in(Global)
    };
    println!("{:?}", MY_VEC);
}

Maybe at some point I can append to it at compile time too. I'd love to be able to put a const {} and have allocations that resolve down to a 'static, and this seems to be a step toward that.

I guess I'm just excited that Vec::new() is the example they picked, since the next obvious question is, "can I push?"

[–] asdfasdfasdf@lemmy.world 2 points 2 years ago* (last edited 2 years ago)

What I'm curious about - this function was already const, so for stuff like this, I'd think there's basically a 100% chance the compiler would optimize this too, just implicitly.

AFAIK this new feature is just for times when it isn't an optimization, but more your own domain invariants. E.g. assertions.

But I could be wrong. I wonder if this can be used for actual optimizations in some places that the compiler couldn't figure out by itself.