← Back to context

Comment by Maxatar

6 months ago

The collect_lines example won't even compile, it's not valid C++, but there's undefined behavior in one of the examples? I'm very surprised and would like to know what it is, that would be truly shocking.

Really? If you've worked with C++ it shouldn't be shocking.

The first example uses the int type. This is a signed integer type and in practice today it will usually be the 32-bit signed integer Rust calls i32 because that's cheap on almost any hardware you'd actually use for general purpose software.

In C++ this type has Undefined Behaviour if allowed to overflow. For the 32-bit signed integer that will happen once we see 2^31 identical lines.

In practice the observed behaviour will probably be that it treats 2^32 identical lines as equivalent to zero prior occurrences and I've verified that behaviour in a toy system.

  • Bizarre nitpicking - would you rather he used an unbounded integer?

    • You don't need an unbounded integer to get the algorithm to work though. All you need is to test and set the value to 1.