On 22.05.20 19:07, Atila Neves wrote:
Personally and initially, I would have preferred it if non-extern(D) declarations were implicitly @system. I understood Walter's argument about special cases and how they're bad, but the thought of them being @safe made me feel, for lack of a better word, "icky".

So the DIP itself wasn't good enough to convince you. Should have rejected it then. Walter could have made another, better argued DIP. That's how this is supposed to work, isn't it?

Then I talked to Walter and he pointed out that if those declarations were @system, users would be prevented from calling them from now @safe code. A regular user would probably just slap `@safe:` at the top of the bindings module anyway. Then I realised that I did exactly that with my libclang bindings:

https://github.com/atilaneves/libclang/blob/5415707fa6072700bdbf21f827567ffa2fd5c424/source/clang/c/index.d#L254

"Worse", I made all functions `pure` and all parameters `in` as well for good measure. Why? I wanted to call them from my @safe pure code with `const` arguments. My reasoning at the time was "I trust libclang".

And so I was convinced that everything being @safe is actually ok, especially because in real life, most C/C++ APIs aren't going to secretly corrupt your code.

Your reasoning is fine when you're dealing with a function that has a safe interface. I.e., it can only corrupt your code when it's buggy. Then it makes sense so say "I trust the authors". D users do it with Phobos. Phobos authors do it with the C standard library. This kind of trust is perfectly ok.

Your reasoning is completely wrong when you're thinking about a function that doesn't have a safe interface. E.g., C's `memcpy` just isn't safe. It doesn't matter whether you trust the authors or not. The user has to make sure that the call is correct. Otherwise, `memcpy` will corrupt your memory. And `memcpy` is far from the only such function.

I'm positive that Walter is aware of the difference. Judging from this post, I'm afraid you might not be.
        • Re: DIP10... Steven Schveighoffer via Digitalmars-d-announce
          • Re: D... Atila Neves via Digitalmars-d-announce
            • ... ag0aep6g via Digitalmars-d-announce
            • ... Atila Neves via Digitalmars-d-announce
            • ... Dukc via Digitalmars-d-announce
            • ... Steven Schveighoffer via Digitalmars-d-announce
            • ... Joseph Rushton Wakeling via Digitalmars-d-announce
            • ... Paolo Invernizzi via Digitalmars-d-announce
            • ... Walter Bright via Digitalmars-d-announce
            • ... Steven Schveighoffer via Digitalmars-d-announce
        • Re: DIP10... ag0aep6g via Digitalmars-d-announce
          • Re: D... Atila Neves via Digitalmars-d-announce
            • ... ag0aep6g via Digitalmars-d-announce
            • ... Paul Backus via Digitalmars-d-announce
            • ... Mathias LANG via Digitalmars-d-announce
            • ... Dominikus Dittes Scherkl via Digitalmars-d-announce
  • Re: DIP1028 - Rational... jmh530 via Digitalmars-d-announce
  • Re: DIP1028 - Rational... Timon Gehr via Digitalmars-d-announce
  • Re: DIP1028 - Rational... Adam D. Ruppe via Digitalmars-d-announce
  • Re: DIP1028 - Rational... Atila Neves via Digitalmars-d-announce

Reply via email to