@nogc and Phobos

bomat Tempest_spam at gmx.de
Tue Mar 14 20:22:57 UTC 2023


Thanks a lot for taking the time and replying in that much detail!

On Saturday, 11 March 2023 at 21:07:18 UTC, H. S. Teoh wrote:
> I also came from a C/C++ background.  The GC turned me off D 
> for a long time, until one day I decided to just give it a try 
> to see if it was all as bad as people made it sound. [...]

That is actually not my issue at all. While I see the benefits of 
"manual" memory management, these quickly go away when it's done 
badly, and in my day job I am actually maintaining a project 
where it is a mess and just using a garbage collected language 
would have been a much better choice. Because guess what, if you 
go for manually managing your memory, you actually *have* to do 
the management properly.

> Why am I saying all this?  Because to be frank, you haven't 
> really used D if you've been avoiding its standard library like 
> the plague.

Again, I'm afraid this is a bit of a misunderstanding. I'm not 
trying to avoid the standard library, in fact I wanted to use it 
and thought I couldn't because I'm also using a @nogc library. 
But turns out I was just doing it wrong. :)

> As for implicit type conversions: I don't know where you got 
> your information from, but D's implicit conversions are a WHOLE 
> different world from C++.

I am still a complete noob in D, at this point very little of my 
information comes from practical experience, but mostly what I've 
read in "Programming in D" by Ali Cehreli (yeah, I still kinda 
like books, I'm weird that way).
As for the conversion, it might not be as bad as in C++ where it 
will just silently construct new objects as long as there's a 
ctor with a matching parameter list somewhere, but it will still 
implicitly cast an `enum` to its underlying type, or a `bool` to 
an `int`.
Now you may call me too strict about this, or point out that it 
will never be a problem in any real world use case, but if you 
take this classic example (which happens to actually be in the 
book as well, p. 20):
`(30 > 20) > 10`, equals `false`.
Well at least you have to use the parantheses, which is an 
improvement I guess, but still, this is something that I hate to 
see in any language that calls itself type safe.
You see, the second language I ever learned was Pascal, and while 
that has many issues of it's own, it irks me how so many modern 
languages do things wrong that Pascal did right as early as 1970. 
And to me, one of those things is that above code *should not 
even compile*.
"True" should not be comparable to 10, because "True" is not a 
number. And it should not be treated as such just because of how 
it is stored internally, as this is, after all, just an 
implementation detail. When you ask someone on the street if 
"True" plus two was three, he would call you a fool, and so 
should your compiler.

> Otherwise in practice it's not even an issue IME.

Yeah, probably right. Actually very few people have ever agreed 
with me on that one. Maybe I'm weird. :)

> For-loop syntax: I can't remember the last time I wrote one in 
> D. Maybe I did like 1 or 2 times (across my 20+ D projects) 
> when I really needed to do something weird with my loops.

As I wrote, I expected as much. So it's not so much a real 
problem as a general concept that I dislike; even if something is 
rarely (if ever) used: when you put it into your language, why do 
it in such a weird and ugly way just to have it look similar to 
C? I don't get it, is all. But I also didn't get it in JavaScript 
or any other language that adopted the C syntax, so it's not D 
specific.

> Again, not something you'll understand if you never tried to 
> use D in a serious way.

Completely true. Again, I'm totally new to D and my criticism is 
kinda academic. I know that.

> I recommend actually trying to write D, not as transplanted 
> C++, but the way D code is meant to be written.

But this is actually my point. Since D is *not* C++, it should 
not have adapted the `for` or `switch` syntax in almost exactly 
the same weird way. And saying that I shouldn't bother because I 
can always choose to not use it just seems like a very bad 
argument to me, sorry. It's kinda like saying that C++ wasn't a 
bad language when you just ignore 50% of it, which most people 
actually do. :)

> As for const: I hardly ever use it. It's useful occasional for 
> low-level code, but not much beyond that.  My advice: don't 
> bother. Just pretend it doesn't exist, and your life will be 
> happier. [...]

Same here. I have no problem with stuff in a language that I 
don't want to use, after all I guess you'll have that in every 
language. Still, especially as a beginner, I think it is 
legitimate to wonder why it was put in. `const` has always gotten 
a lot of heat by C++ programmers, so what is the reasoning behind 
putting an even stricter version of it into a language that 
aspires to be a cleaner and better version of C++?
And again, I'm not trying to be the smartass who could have done 
it better, I'm just trying to understand it.

Taking your first steps into a new language, you just stumble 
across these things.

Thanks again for your time!



More information about the Digitalmars-d-learn mailing list