When returning an immutable reference to a private struct field. (On mobile and used vertical bars instead of a bunch of HTML codes)

  • heartlessevil@lemmy.one
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    A vec and a string are basically the same thing (a series of bytes)

    In the context of vectors I prefer my APIs to return an empty set rather than an None-option. This makes handling it much easier because you can still iterate over it, it just has nothing.

    This might involve the compiler making an allocation of an empty array but most of them (gcc, ghc) will now what you are doing and optimize the null check on the empty array to a bool check.

    • RunAwayFrog@sh.itjust.works
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      Note: the ᐸᐳ characters used below are Canadian Aboriginal syllabics because Lemmy devs haven’t fixed broken input sanitization yet.


      A vec and a string are basically the same thing (a series of bytes)

      Everything is a series of bytes! I thought you were going to mention that both are fat pointers. But that “series of bytes” description is quite weird.

      This makes handling it much easier because you can still iterate over it

      This is not a valid consideration/objection, as Options are iterable and you can flatten them:

      fn main() {
        let v = vec![1,2,3];
        for n in Some(&v).into_iter().flatten() {
          eprintln!("{n}");
        }
        for n in None::ᐸ&Veci32ᐳᐳ.into_iter().flatten() {
          eprintln!("{n}");
        }
      }
      

      This might involve the compiler making an allocation of an empty array but most of them (gcc, ghc) will now what you are doing and optimize the null check on the empty array to a bool check

      This paragraph appears to be out of place in the context of a Rust discussion.

      • heartlessevil@lemmy.one
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        1 year ago

        Yes, but it’s a pain to iterate over Options of Vec because you need to check/flatten twice. I am aware gcc/ghc is not relevant to rust discussions but I am not sure if rustc performs these specific optimizations. I expect it does because they are trivial. Who knows. I am just some random dude on the internet and a lot of drugs.

    • hallettj@beehaw.org
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      In the context of vectors I prefer my APIs to return an empty set rather than an None-option. This makes handling it much easier because you can still iterate over it, it just has nothing.

      I can see that argument. But you can also iterate over an Option-wrapped response with something like for x in xs.into_iter().flatten() { ... }, and the Option gives you an extra bit of information that can be helpful in certain cases.