On Monday, 22 November 2021 at 12:57:27 UTC, Luís Ferreira wrote:
On Mon, 2021-11-22 at 03:36 +0000, Stanislav Blinov via Digitalmars-d- announce wrote:
On Sunday, 21 November 2021 at 20:30:51 UTC, Luís Ferreira wrote:

> I decided to have a simple approach just to show that it is
> easier now to do that without workarounds, and by > workarounds,
> I mean using scope to fetch that info and use a fake dtor, or
> even before scope exists, the usage of runtime-less D call > with
> betterC + objcopy, described
> [here](
> https://theartofmachinery.com/2018/05/27/cpp_classes_in_betterc.
> html).

I get that the news part is all about `__traits(initSymbol)`, which in this case is about instantiating a class without druntime.

Yes and this is by far harder than the past/previous approach, as you refered wrongly, "this has been possible for ages".

It has been, with workarounds. Which, even in that case, all the other problems still apply.

But that's just one line in the whole example. And the rest of the code? Construction may either fail altogether or cause unnecessary copies.

I acknowledge that is a thing to consider, when doing generic code. I'm going to be honest and say that I did't though about those cases at the time of writing. The particular case is not wrong however, it is just limitative to types without such qualifiers. If I went that far, probably there is a number of things wrong. What if I want an `immutable` version of T? I simply, didn't thought about it, mostly because the point of that zettelkasten was to show `__traits(initSymbol)` off.

But that is my point. You're showcasing __traits(initSymbol) but that is not at all what your article advertises :)

Calling __dtor won't call destructors of base classes or derived classes. There may not even be a __dtor yet destruction may still be required through __xdtor, which still would not destruct base or derived classes.

This is an undocumented feature that I didn't know about. I'm going to do a specification PR to amend it.

Awesome!

Deallocation can't be @trusted since you don't have a facility to prove that no other references exist.

Yes, that is totally wrong and should be fixed, alhtough trusting pureMalloc is fine.

Yup.

If anything, the code shows how NOT to use
classes, contrary to what your title or preface say ;)
Even simple, an example should at least be correct, don't you
think?

I think you unproportionally scaled your argument -- the article is not a complete how-to guide in classes -- althouh I agree that a simple example like the one presented should be correct.

Have I? The article is named "Classes in D with betterC", the preface states "Did you know that you can use classes in D as better C? Yes, you read correctly, you can actually use classes in D with -betterC." It's not at all clear that all you *really* mean and want to address is instantiation thanks to __traits(initSymbol).

Maybe it's a language or cultural issue? I'm not being bashful. "Use classes", at least to me, means, well, "use classes", and not "use a subset of classes that's really not much better than structs as you can't fully support inheritance anyway because destruction is a mess".

In other words, in order to fully appreciate the message of your article, one has to already be aware of all the other issues. Which is a dangerous presupposition for a public article, especially not prefaced accordingly.

Thanks for your input! I'm going to fix the issues you presented.

You're welcome :)

Reply via email to