On 23/05/2020 5:07 AM, Atila Neves wrote:
On Friday, 22 May 2020 at 12:28:56 UTC, rikki cattermole wrote:
On 23/05/2020 12:19 AM, Joseph Rushton Wakeling wrote:
With the rationale laid out clearly as it is here, I do have some responses in mind.  But before sharing them, I'd like to know whether that would be useful right now: I've no wish to just press for a re-hashing of conversations that have already been had.

No.

This wasn't the first and certainly won't be the last time we as a community have been very unhappy with how Walter conducts himself with his DIP's.

Although it seems an improvement has been made to how he needs to respond to the DIP assessment. It should also include a statement from Atila as well given his position.

I'm going through posts in order, so apologies if I'm "ignoring" something that shows up later in the discussion.

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".

This is one of the issues I had a problem with.

It is not about the linkage.

The problem is solely does the compiler have the source to the function body to verify 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

That is a failure of the language that should be resolved.

One of the arguments that has been brought up (although I don't remember if it made its way to the N.G.) is that if you don't have the body, can a function /even/ be @safe?

"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".

You might, but that doesn't give the compiler the right to do so by default. This a decision for a skilled programmer to make.

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.

What you did was give up some security in favor of freedom and now you can't get certified to work on top secret projects (analogy).

Then there's the fact that, today, there's no safety anyway calling anything because everything is @system by default. And D source code won't be able to lie.

Does that clear it up?

No.

We simply do not agree, nor do I expect for us to come to terms on it anytime soon.

To me at least, this butchers @safe/trusted/system into a system that is near useless for guarantees for an entire program.

Sure its convenient for a single function, but absolutely useless in trying to solve the actual problem it was trying to solve in the first place.

Reply via email to