D is dead

Shachar Shemesh shachar at weka.io
Thu Aug 23 11:31:13 UTC 2018


On 23/08/18 14:02, Walter Bright wrote:
> On 8/23/2018 2:09 AM, Shachar Shemesh wrote:
>> functions may be @safe, nothrow, @nogc, pure. If it's a method it 
>> might also be const/inout/immutable, static. The number of libraries 
>> that support all combinations is exactly zero (e.g. - when passing a 
>> delegate in).
> 
> If, for example, a library functions allocates with the gc, then it 
> can't work with @nogc code. But still, fair enough - if there are 
> combinations which should work, but do not, please submit bug reports. 
> If you have already, is there a list of them?

None of that continues to work once delegates are involved. I am yet to 
see a library that can accept a delegate and correctly create a function 
around it that matches its attributes.

And yes, I do include Mecca in this. I tried. It is too difficult to get 
right, so I gave up.

Attribute inference was supposed to solve this, but attribute inference 
is completely broken with separate compilation.

> 
> 
>> * Language complexity
>>
>> Raise your hand if you know how a class with both opApply and the 
>> get/next/end functions behaves when you pass it to foreach.
>  > How about a struct?
> 
> I presume you meant empty/front/popFront.
Indeed.

> 
> This is in the language spec:

How many people know that without resorting to the specs.
> 
>> Does it matter if it allows copying or not?
> 
> For the preference for opApply, no.

But it does for empty/front/popFront, which is exactly my point.

> 
>> * Critical bugs aren't being solved
>>
>> People keep advertising D as supporting RAII. I'm sorry, but "supports 
>> RAII" means "destructors are always run when the object is destroyed". 
>> If the community (and in this case, this includes Walter) sees a bug 
>> where that doesn't happen as not really a bug, then there is a deep 
>> problem, at least, over-promising. Just say you don't support RAII and 
>> destructors are unreliable and live with the consequences.
> 
> If you're referring to #14246, I posted a PR for it. I don't see how 
> that is pretending it isn't a problem. It is.

When I first reported this, about 3 and a half years ago, the forum 
explained to me that this is working as expected.

#14246 was over 2 years old by the time you posted the PR. Once posted, 
however, it broke (I'm not sure why it broke, but did notice it 
deliberately would not work with @disable init structs. See my 
interoperability comment from above). Since then (over a year), no 
progress has been made except to revert the changelog that claims it was 
resolved.

When I talked to you about it at the last DConf, I got a reply that 
could be largely summarized as "yeah, we should probably do some flow 
analysis, sometimes".

The only time I got anyone to take this problem seriously was when 
someone on the forum would claim that D supports RAII, to which I tend 
to reply with "no, it doesn't".

So you will excuse me, but I don't think this bug is being taken as 
seriously as I think it should.

I get it, it is not a simple bug to solve. It is an unfortunate truth 
that some important bugs are not going to be easy. C++ went a different 
path with this (strictly setting when members are initialized). I get 
that this is a very unpopular feature of C++, and I can see why, but 
seeing how D struggles to resolve this issue, I can't say it is a 
mistake on C++'s behalf.

Shachar


More information about the Digitalmars-d mailing list