let mut variable: Type;
loop {
    variable = value;
}

or

loop {
    let variable: Type = value;
}
  • chickenf622@sh.itjust.works
    link
    fedilink
    arrow-up
    1
    ·
    4 months ago

    Side note, don’t fall into the trap of premature optimization. You’ll more than likely end up shooting yourself in the foot for something that usually doesn’t matter in most cases.

  • Anh Kagi@jlai.lu
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    4 months 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.

    • Anh Kagi@jlai.lu
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      4 months 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.

  • asudox@lemmy.asudox.dev
    link
    fedilink
    arrow-up
    0
    arrow-down
    1
    ·
    4 months ago

    The second one is more expensive as you constantly are creating a new variable. In the first one you just constantly change the value of a variable.