this post was submitted on 08 Mar 2025
11 points (92.3% liked)

Rust Programming

8839 readers
21 users here now

founded 6 years ago
MODERATORS
11
Which is faster? (self.rust)
submitted 3 months ago* (last edited 3 months ago) by commander to c/rust@lemmy.ml
 
let mut variable: Type;
loop {
    variable = value;
}

or

loop {
    let variable: Type = value;
}
you are viewing a single comment's thread
view the rest of the comments
[–] anhkagi@jlai.lu 8 points 3 months ago* (last edited 3 months ago) (4 children)

I would say that they are equivalent. If I'm not mistaken, let statements only reserves space on the stack, and this only increments the stack register.

And on the latter snippet, the compiler would certainly not bother to modify the stack pointer as the type doesn't change.

[–] anhkagi@jlai.lu 17 points 3 months ago* (last edited 3 months ago) (1 children)

according to godbolt: https://rust.godbolt.org/z/hP5Y3qMPW

use rand::random;

pub fn main1() {
    let mut var : u128;
    loop {
        var = random();
    }
}

pub fn main2() {
    loop {
        let var : u128 = random();
    }
}

compiles to:

example::main1::h45edf333d7832d08:
.Lfunc_begin8:
        sub     rsp, 24
.LBB8_1:
.Ltmp80:
        mov     rax, qword ptr [rip + rand::random::he3c23ceb967a3e28@GOTPCREL]
        call    rax
        mov     qword ptr [rsp + 8], rdx
        mov     qword ptr [rsp], rax
        jmp     .LBB8_1
.Ltmp81:
.Lfunc_end8:

example::main2::h1a899b25b96d66db:
.Lfunc_begin9:
        sub     rsp, 24
.LBB9_1:
.Ltmp82:
        mov     rax, qword ptr [rip + rand::random::he3c23ceb967a3e28@GOTPCREL]
        call    rax
        mov     qword ptr [rsp + 8], rdx
        mov     qword ptr [rsp], rax
        jmp     .LBB9_1
.Ltmp83:
.Lfunc_end9:
        jmp     .LBB9_1

So yeah, exactly the same thing.

[–] commander 5 points 3 months ago

Fascinating! Thank you for sharing this.

load more comments (2 replies)