• tatterdemalion@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        20 hours ago

        You are correct to point out the distinction between race conditions and data races. Rust only rules out data races.

        I don’t know whether the race in question was a data race or not.

        I would still wager that Rust code generally has fewer race conditions than C, given that mutable aliasing can be used as symbolic prevention of race conditions, i.e. your &mut T doesn’t necessarily need to hold data; it can represent some domain concept.

        aren’t language specific

        There are actually languages that guarantee deterministic concurrent execution, and this can rule out larger classes of race conditions than just data races. See the Bloom language and CALM theorem.

      • jjj@piefed.blahaj.zone
        link
        fedilink
        English
        arrow-up
        5
        ·
        2 days ago

        Yes, but the tools provided by Rust:

        1. Prevent most common ones via aliasing^mutability, Send and Sync marker traits, etc.
        2. Require explicitly marking the cases not handled by this, e.g. unsafe features require an unsafe {} block to be used.