June 08, 2023

On Thursday, 8 June 2023 at 17:20:25 UTC, Johan wrote:

>

So every release is maintaining the level of immaturity (note: .0 releases I don't even consider, .1 or .2 (what LDC uses) is slightly better).

-Johan

Personally I only use GDC in production and I've never had any surprises with their releases, I honestly would never use DMD in production I consider the quality of the backend insufficient for serious use in production.
I don't want to say a heresy, but sincerely if I had to decide for D the first thing I would do is stop work on DMD I don't see the real usefulness when we have LDC and GDC. Probably the primary development could be done on LDC to not have to be conditioned by the release times of GCC.

June 08, 2023

On Thursday, 8 June 2023 at 16:13:54 UTC, GrimMaple wrote:

>

On Thursday, 8 June 2023 at 15:48:26 UTC, IGotD- wrote:

>

Thank you for sharing this and this is a valid concern indeed. Unfortunately D is run as a hobbyist project for langauage geeks with little concern for the professional environment. It is nothing wrong with language geeks having a project but it doesn't mix well with projects that require stable language+stdlib. I repeat over and over again, we need to start with D3 so that language geeks can have a platform without interfering with D2. D2 should be put in maintenance mode now and the language should be considered to be finished.

Thank you for understanding my issues. I also think D2 is good enough to be considered finished. Personally, I would've branched it at around 2.100. That's before ImportC.

Fully agree! and I also suggested over and over again to separate D2 and D3 for a long time.

And as another evidence: just look at how fast this threads grow: 30 replies in ~3 hours!

>

I too get this feeling that D is a hobbyist project, mostly directed towards language creators, not software engineers. Which is why most of people I know avoid D as if it was a plague. And which is why there isn't much 3rdparty on dub to begin with.

Me too, it's much more like a hobbyist project.

@Walter, do you hear?

June 08, 2023

On Thursday, 8 June 2023 at 15:38:15 UTC, Mike Parker wrote:

>

On Thursday, 8 June 2023 at 15:29:08 UTC, GrimMaple wrote:

I'm not saying you should become a language developer. I'm saying if you have a strong case for an LTS release, bring it. I'm sure it's come up before, but no one has ever pushed it in a meeting that I can recall. I can't speak for everyone, but I wouldn't mind seeing it. I just know that there's a mountain of other work that we're putting a priority on right now, and until someone pushes it, I doubt anyone's going to pick it up.

Too much bureaucracy: just look at:

  1. How fast this threads grow: 30 replies in ~3 hours! esp. from developers who are maintaining real projects.

  2. And, how many times this topic have been raised in this forum again and again.

June 08, 2023

On Thursday, 8 June 2023 at 17:49:27 UTC, mw wrote:

>
  1. How fast this threads grow: 30 replies in ~3 hours! esp. from developers who are maintaining real projects.

  2. And, how many times this topic have been raised in this forum again and again.

I am a developer who maintains real (commercial!) projects, and I want D to break more compatibility and do less stability. Just, you know, for reference.

Every time a complaint threat comes up, it tends to hog the frontpage. This sort of forum mechanics selects for engagement, not agreement. Note how my responses disagreeing with you bump the thread just as much as responses that agree.

Also, at the end of the day, language development is not a poll. There are some good arguments for (and against) a D3 split; "look how many posts can get spammed on this thread" is not one of them. Otherwise we should probably go and make private class scope as well...

June 08, 2023

On Thursday, 8 June 2023 at 13:38:20 UTC, GrimMaple wrote:

>

I usually try to stay more silent (on the form at least), but I think I reached my boiling point. I've been a (self employed) full time D developer for almost 2 years now, developing quite a large codebase of personal closed source projects, as well as adopting some 3rdparty code like dlangui. And my life has become particularly miserable in the last half a year or so.

I wish I was exaggerating, but every new DMD version breaks some of my code, to a smaller or bigger extent. It can be either my own code, or dependency code, but I started drowning in deprecation messages or outright breakage. It's nearly impossible to develop any reasonable 3rdparty in those conditions. I'm tired of fixing things that weren't broken. And I can't even imagine having to support multiple branches of code because of those deprecations. But I probably should, as, periodically, I get issues that dlangui can't compile with some outdated dmd version. It's just insane!

Recently, some of the changes resulted in direct API changes. This is unacceptable, as it, basically, forces people to update major versions and split the codebase between "before" and "after". Also forcing them to support two version of the same thing.

There have been a lot of talk about Gripes, about the "Vision" of D... But more than half a year passed, and yet the breakage only gets worse, and nothing seems to be improving. At least in regards of LTS. And with no proper LTS, no proper 3rd-party can exist.

So, as pissed as I am, please, for the love of everything, stop breaking D. I understand the desire to improve the language, but can you understand the desire to just... write working code? Please, make D at least somewhat stable.

For facing reality, there is a bunch of code that were made in dlangui with a lot older version of the language. And right now, I don't see as much breakage as it happens with dlangui. There is a bunch of stuff that is being workarounded every version.

For Hipreme Engine, I do get some errors on users when they use a different version, what I've done is simply limiting their version (my build system also includes an auto download system for the expected D version). I'm always trying to stick to the most recent version because i know that if I stick too much time with a version, when needing to jump 10 versions, everything will be broken (specially since I'm maintaining my own runtime now).

The thing is that D doesn't have structure enough to get a LTS.
We can only try to always get newest ones because we don't want to deal with old and nasty bugs.

What I see right now is that D is in a constantly changing phase where they're trying to fix those billion bugs we had on bugzilla so it is quite normal to expect there will be a lot of breakage in this trail.

So, what I would recommend right now is literally adding more examples to buildkite and adding migration paths. Which would be a lot easier than maintaining 2 versions of the language (which I find rather unproductive most of the time)

June 08, 2023

On Thursday, 8 June 2023 at 14:33:57 UTC, GrimMaple wrote:

>

On Thursday, 8 June 2023 at 13:54:53 UTC, FeepingCreature wrote:

>

Can't confirm. Can you give some examples, please? In my experience (and we maintain a lot of D code), serious new breakage (not an existing bug) is pretty rare.

To be fair, we don't use that many external libs though.

2.104 deprecated ref in, this changes function signatures (Adam was particularly displeased with having to push breaking changes).
2.103 deprecated alias this on classes, which resulted in complete code breakage. This lad https://github.com/FreeSlave/icontheme/issues/2 even refused to do anything about it.
2.102 deprecated __traits(getAttributes). Somebody complained about this, but I can't remember who exactly. Probably Adam again.
2.101 removed std.xml, which led to a significant rewrite of dlangui, which inevitably led to me leaving D (even though temporarily). And no, undeaD maintainers refused to fix my problems: https://github.com/dlang/undeaD/pull/54 , https://github.com/buggins/dlangui/issues/643 (tl;dr undeaD doesn't work with GDC)

Other versions go too far back for my memory

This list demonstrates you aren't complaining for nothing. It's easy to see dealing with this rate of breakage it is painful.

That being said, I don't think language instability is the problem. We want D to develop after all, and the language already tries to be reasonably backwards-compatible. It's just the natural price of using a language that is still developing.

Bundling changes to fewer releases wouldn't probably help either. We'd have version changes less often, but they'd be bigger when they do happen. If anything, we should have a common agreement of what is the latest "LTS" compiler verion a DUB library should support. I don't mean the compiler would have any LTS support from it's development team, just that it'd be the verion DUB libraries are tested against.

Fortunately there are ways for the user to ease the pain. The common theme in your list seems to be you're relying in many libraries. I don't know how many, and I'm not saying it's wrong. But the less library dependencies you have, the less problems.

Sometimes it may be more practical to bundle the library source in your codebase (as opposed to DUB registry) so you can fix it yourself. That has its downsides but it's still a valid choice.

Also, unless it's something security critical such as certain parts of Vibe.d there is no pressure for libraries to be up to date. You can use older library versions until everything is ready to update to newer compiler version.

June 08, 2023

On Thursday, 8 June 2023 at 19:34:41 UTC, FeepingCreature wrote:

>

I am a developer who maintains real (commercial!) projects, and I want D to break more compatibility and do less stability. Just, you know, for reference.

Maintaining closed-source commerical projects isn't a problem with changing compiler. Because you only need to support one version at a time. Then, try writing open-source with many users, all of whom use different versions (and vendors) of compiler. Now you're in trouble.

>

Also, at the end of the day, language development is not a poll. There are some good arguments for (and against) a D3 split; "look how many posts can get spammed on this thread" is not one of them. Otherwise we should probably go and make private class scope as well...

D3 split doesn't hurt anyone. I don't know about making private class scope. If it doesn't hurt people - why not. After all, the "support" of an LTS branch will most likely go towards those interested in that branch, while others can use D3 if they want breaking changes.

Of course it's not a poll, but if issues come up repeatedly, then you have to listen to them. I don't understand how LTS is such a bad idea that everyone is so aggressively against it. It's not like we're stealing your freedom to do whatever, we're proposing (or at least trying to) a solution that theoretically should fulfill both ends needs.

>

The thing is that D doesn't have structure enough to get a LTS.
We can only try to always get newest ones because we don't want to deal with old and nasty > bugs.

As someone in this thread pointed out already, LTS doesn't really require a lot of work to begin with. Just fix behavior in-place, with occasional security and segfault patches. At least, a working strategy could be developed according to amount of manpower.

Also, "D doesn't have structure" isn't coming from the nature of things. It has no structure because nobody is giving it structure.

I also find it very amusing how, supposedly, Walter has a final say anyway, but it's always the community's fault for D lacking structure, or manpower, or anything else.

I would've liked to see a negotiation point from the D core team, like: "We can do an LTS branch, if: #list requirments here#". So we can allocate people, assign roles, maybe even raise funds. But I hate it when core devs just show up saying "nah can't be bothered you do it". Because I know, at the end of the day, Walter can just say "no" and all the effort will go down the drain.

I find the whole idea of LTS pointless when the core community isn't interested in working towards that goal. I mean, if the initial author of LTS leaves, what are you stuck with?

June 08, 2023
On Thu, Jun 08, 2023 at 05:34:40PM +0000, Ernesto Castellotti via Digitalmars-d wrote:
> On Thursday, 8 June 2023 at 17:20:25 UTC, Johan wrote:
> > So every release is maintaining the level of immaturity (note: .0
> > releases I don't even consider, .1 or .2 (what LDC uses) is slightly
> > better).
[...]
> Personally I only use GDC in production and I've never had any surprises with their releases, I honestly would never use DMD in production I consider the quality of the backend insufficient for serious use in production.  I don't want to say a heresy, but sincerely if I had to decide for D the first thing I would do is stop work on DMD I don't see the real usefulness when we have LDC and GDC. Probably the primary development could be done on LDC to not have to be conditioned by the release times of GCC.

DMD is Walter's baby, and he'll probably let it go only over his dead body. :-D

To be fair, though, for all its flaws DMD has one upside: super-fast compile speed, which is valuable during development because the shorter your code-compile-test cycle is, the more productive you are.

For final builds of almost anything (except shell-script replacements where codegen quality is irrelevant), I wouldn't touch DMD with a 10-foot pole. Its codegen quality is just too low, esp. when it comes to performance of the resulting executable. Over the years I've consistently gotten 30-40% speed improvements with LDC over DMD, sometimes even 50%.  LDC is my go-to compiler for serious work.  Once in a while I use gdc and find that it has comparable codegen quality to LDC.


T

-- 
In theory, there is no difference between theory and practice.
June 08, 2023
On Thu, Jun 08, 2023 at 02:56:21PM +0000, GrimMaple via Digitalmars-d wrote: [...]
> The buildkite link is a joke in itself. It has some random packages, many of which are either deprecated, either abandoned. It doesn't even include most of the https://code.dlang.org/?sort=score list.

Here's a wild idea:
- Go through code.dlang.org and compile them with the latest compiler.
- Add *every* project that compiles to the buildkite list.
- Repeat this every release cycle.
- In the meantime, if anyone comes across any D project anywhere, as
  long as the source is public add it to buildkite.

OK, that takes care of coverage. By this point the core devs are probably already screaming, "who's gonna fix broken builds when an unmaintained project stops compiling?"

My answer is:
- For every buildkite breakage, contact the maintainer and ask him to
  fix the code.
- If he doesn't respond (the project is abandoned / inactive), the PR
  submitter should figure out a way of fixing / working around the
  problem.  THEN ADD THE WORKAROUND TO THE COMPILER. Either offer a flag
  to enable the workaround, or have the compiler generate an error
  message with explicit instructions of how to fix the problem.


The idea as presented above is probably impractical for a ton of reasons. But it's a starting point. Somewhere to begin taking practical steps attacking this problem, rather than sweeping it under the rug or just yelling at each other.


T

-- 
Let X be the set not defined by this sentence...
June 08, 2023
On Thursday, 8 June 2023 at 20:55:20 UTC, H. S. Teoh wrote:
> DMD is Walter's baby, and he'll probably let it go only over his dead body. :-D

Of course, in fact I was referring to a utopian situation ;-D

> To be fair, though, for all its flaws DMD has one upside: super-fast compile speed, which is valuable during development because the shorter your code-compile-test cycle is, the more productive you are.

Yes that's true, however I don't see all this difference compared to GDC or LDC. For me it's not enough to concentrate the time in the development of DMD, killing DMD I think it's wrong but I if I was in the utopian situation of being able to decide anything about D I would keep it exclusively as a best effort side project

> For final builds of almost anything (except shell-script replacements where codegen quality is irrelevant), I wouldn't touch DMD with a 10-foot pole. Its codegen quality is just too low, esp. when it comes to performance of the resulting executable. Over the years I've consistently gotten 30-40% speed improvements with LDC over DMD, sometimes even 50%.  LDC is my go-to compiler for serious work.  Once in a while I use gdc and find that it has comparable codegen quality to LDC.
>
>
> T

True, LDC is really good.
GDC starting from GCC 12 version started to get really interesting (so much so that now I've replaced LDC with GDC in production because it's much easier for me to handle for my embedded programming) because it is updated to recent D versions.
I believe that no one can ever reward enough Iain Buclaw for the great work he did with GDC, having a D compiler on GCC mainline is just amazing.