[Il/Elle] C’est comme vous voulez, peu me chaud.

Adepte du je-m’en-foutisme.


Mastodon

#nobridge #nobot

  • 1 Post
  • 24 Comments
Joined 2 years ago
cake
Cake day: August 29th, 2023

help-circle
  • Anh Kagi@jlai.lutoRust Programming@lemmy.mlWhich is faster?
    link
    fedilink
    arrow-up
    13
    ·
    edit-2
    20 hours ago

    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.


  • Anh Kagi@jlai.lutoRust Programming@lemmy.mlWhich is faster?
    link
    fedilink
    English
    arrow-up
    7
    ·
    edit-2
    1 day ago

    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.