Odpověď na názor

Odpovídáte na názor k článku Interaktivní shell Fish přechází z C++ na Rust. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.

  • 30. 12. 2024 20:40

    linuxák

    Dereference moved objektu není bug, to je feature. Proto to není use after move, protože to není žádná chyba.

    Možná bys autorům clang-tidy měl vysvětlit, že use after move není žádná chyba, takže to hlídají úplně zbytečně.

    C++ standard jasně říká, že objekt je po move ve validním, ale NESPECIFIKOVANÉM stavu, takže dělat na moved objektu cokoliv jiného než volání destruktoru, je hraní si s ohněm. Ono to může fungovat, ale spíš kvůli tomu, že se jedná o konkréttní implementační detail (náhodou je to implementovné tak, že něco po move funguje a v nové verzi objektu už to nemusí platit).

    Tady bych jen vypíchnul, že move semantika byla do C++ přidána teprve nedávno a nikdo pořádně neví (včetně tebe), jak to funguje a jaké to dává nebo nedává garance.

    V Rustu move funguje out of the box, programátor se o to nemusí vůbec starat (žádné psaní move konstruktorů), protože move je v Rustu interně implementované jako memcpy. Move v Rustu řeší překladač, takže v tom nejde udělat chyba a je to vždy správně, narozdíl od C++, kde se o move musím ručně starat. Dobrý příklad toho, jak je Rust oproti C++ v bezpečnosti i ergonomii o světelné roky napřed.