On Monday, 18 January 2021 at 12:17:24 UTC, aberba wrote:
If you read the Origin of D book, you would see that the GC was a desire thing when D was designed probably due to how useful it is for ... as said, 90% or so of software development. So at this point, fighting the GC isn't (in my opinion) the right strategy.

Not fighting the GC, but the whole argument about improving it, or mix or match, does not work for most developers looking for a new language. So either there has to be something else or the language semantics will have to be adjusted to get a better GC. That is the crux, the GC cannot be significantly improved without some minor adjustment to the language (with some breaking changes).

To get there the majority have to be in favour of it. If 50% of the D community pulls strongly in the opposite direction, then the GC cannot improve in a meaningful way.

Yes, it is natural that the current D population don't mind the current GC. Otherwise they would be gone... but then you have to factor in all the people that go through the revolving door and does not stay. If they stayed the eco system would be better. So the fact that they don't... is effecting everyone in a negative way (also those that har happy with the runtime).


I should also say that I notice your point about improving GC in D and making it more optional as much as possible for things that still rely on GC...ARC, etc. 👍

ARC is a pretty big change, so it will depend on library authors supporting it. It also requires a new intermediate representation. So I don't think it will happen. Thread local GC seems most reasonable. As CPUs get more and more threads it becomes more and more unacceptable to lock all threads during collection.

The OP was about why programmers don't "like" GC.

Programmers like GC, just not for system level programming. C++ has had the Boehm GC since the mid 90s. Only a tiny percentage use it. Forget about game engines, many games have game contents written in Lua and other scripting languages and can live with incremental GC with very little impact on interaction (you could use Javascript too). The game engine itself is usually not relying on GC, just the game content part.


I've been here long enough to see the GC being one of the most re-occurring issues for discussion (probably due to new users coming in).

Yes, they come in, but do they stay? If they don't stay, then our eco system suffers from it.

D would be in a better position by tracking why people leave and then fix those concerns (if they are related to the language/runtime).

There's been official posts about how D's style of GC isn't like that of fully managed languages, how to write nogc code in D, how to minimize GC, among others.

Yes, but people who are well versed in system level programming know how to to this already, they just want more hassle than they get in other languages. And those are also the same people that would write solid libraries/improve on the compiler. So not being able to retain those developers is a biiiiig loss.


Now if none of these work for you (for some special reason), then the long-term strategy might be an alternative runtime and or std. Which isn't a good answer that thought was worth it...so I didn't include that.

Actually that is a good answer, if it comes with the appropriate language changes, like tagged unions and banning conflicting pointers in unions.

What works for me, is not the issue, but what IS the direction?? Where are we going? That is the real issue.

I am perfectly ok with C++20 for low level programming. I don't need D for that. It is totally OK if the D community decides to make it more high level and easier to deal with for newbies who come from Python.


If none of these work, then I (as in my personal opinion), don't know what else is available.

I am ok with any one of these alternatives:

Alternative 1: Adjust the language semantics so that the GC can be improved and accept some breaking changes.

Alternative 2: Switch focus from being a system level language to becoming more of a high level language.

Alternative 3: Implement ARC.

The other alternatives don't really work. Doing what Rust does is now 2 years late, it would take 5 years to get there. Doing what C++ does, does not help. Why would I use D instead of C++ then?

Just pick a direction, because right now, the direction is not very clear and then progress becomes impossible. No direction, means no progress...

Reply via email to