On Friday, 22 May 2020 at 03:36:03 UTC, Paul Backus wrote:
Someone has created bindings for a C library and published them on code.dlang.org. Because they were written prior to DIP 1028, the author assumed that @system was the default, and didn't bother to add explicit annotations to
@system functions. Their code looks like this:

--- clibrary.d

    void monkey_around(...); // assumed @system-by-default

---

Months or years later, I decide to write a D program that makes use of these bindings. By then, @safe-by-default has been fully implemented. I add `clibrary` as a dependency to my Dub project and write the following code:

--- app.d

    import clibrary;

    void main() // @safe-by-default
    {
        /* ... code ... */

        monkey_around(...);

        /* ... more code ... */
    }

---

My program compiles with no errors...and then corrupts memory at run-time, even
though every line of code I've written is @safe. Oops.

This is the nightmare scenario that people are worried about: safety violations
being introduced *silently* into existing, correct D code.

Honest question: What is the use case for an absolutely-positively-has-to-be-safe program that calls C code? Why would anyone ever do that? C is not and will never be a safe language. "Someone looked at that blob of horrendous C code and thinks it's safe" does not inspire confidence. Why not rewrite the code in D (or Rust or Haskell or whatever) if safety is that critical?

Reply via email to