Has D failed? ( unpopular opinion but I think yes )

Nierjerson Nierjerson at somewhere.com
Sun Apr 14 14:19:00 UTC 2019


On Sunday, 14 April 2019 at 00:00:46 UTC, Walter Bright wrote:
> On 4/13/2019 3:12 PM, Nierjerson wrote:
> > Ok, I'm going to step up and take a role, right here right
> now:
> >
> > 1. You need to find someone who will create two things:
>
> > No point in me giving too many of my thoughts because it is a
> task for you to do
>
> > 2. You and your team need to
>
> > Basically you guys need to
>
> > So, you and your team need to
>
> > It means that you simply have to structure things
>
> > I do hope you can figure this out.
>
> This is not stepping up, it's giving me a list of action items. 
> I have an action item for you:
>
> * Find something great on your list of action items and do it!
>
> ---
>
> Allow me to explain a couple things.
>
> This is not a business. There's some paid work going on, but 
> not a whole lot because there isn't a lot of funding. A good 
> compiler engineer would get $500,000/yr. We just don't have a 
> lot of money.

I realize this, and this is why it is even more prudent to do 
things as best as possible. For example, if you have a yugo and 
you are racing F1's you better optimize all variables in all ways 
to stand a chance.

What you have stated is an excuse. Money helps but you don't have 
it, so do you just give up? Because that is what you are saying 
whether you realize it or not.

I'm not blaming you or D's management in any way. I know it is an 
uphill battle. What I'm trying to do here is make you realize 
that the way your climbing the mounting is a hard route. You need 
other people that you trust and will commit and bring in to your 
inner sanctum. Only you can make that decision.

I've noticed H. S. Teoh mention wanting to fork D. I believe he 
is quite an intelligent person and seems to have alternative 
views that could provide more of a balance for you guys. You NEED 
someone that thinks differently. You might need other people. But 
ultimately you have to realize it would be beneficial to broaden 
your group(is it just you and Andre?) and that you have to find 
the right people.

You have to also realize you have to make changes yourself. You 
must adapt with the times. If you still manage D with the same 
mindset you did 10 years ago then something is wrong. This is why 
you need other people to help you. It is IMPOSSIBLE for you to do 
what is needed by yourself or even you and Andre! If you think it 
is then you have already failed.

I'm not saying that progress won't be made, I'm saying that it 
won't be enough[I could be wrong, but I'm 99.99% likely too be 
right]. I don't want to see D go down the tubes and I don't want 
to see D stagnate. It is really the language I enjoy programming 
in the most, but it is also the language I get frustrated with 
the most. I like to work on weaknesses, not strength. Anyone can 
work on their strengths, that's the easy job, but we are held 
down by our weaknesses and weaknesses actually are most 
beneficial to build(because of diminishing returns and the way 
knowledge and experience work together(it's O(n!)).


>
> This means relying on volunteers. The fun thing about 
> volunteers is you can't tell them what to do. A normal 
> occurrence is people ask me what to work on. I present a list 
> A, B, C, D, and the person then does H. Why? Because H 
> interests them.

I know, but it is a double edge sword. There has to be a balance!

Remember, if a volunteer wants to do something on his own he can. 
You shouldn't stop that, it is tyrannical. But some people need 
and want structure. The best way is to provide both paths. If 
someone wants to climb the steep cliff they can, others who want 
the guided tour need that. If you limit any path then you are 
selecting only those people who will take it.

D suffers from a lack organized structure. If it had too much 
structure I would be saying the opposite of what I am saying. I'd 
be "You guys are too dictatorial, you guys need to chill and 
relax!".



>
> You might think, what a mess. In many ways that's true. On the 
> other hand, working on D is a MARVELOUS opportunity for anyone 
> who wants to jumpstart their career.

D works well in many ways, I'm not saying it is a total mess... 
not in the least. What I'm saying is simply this:

The D community almost only works on it's strengths... specific 
feature sets that the most dedicated want to work on and they 
neglect those things they are not interested in.

This is great for them because, guess what, they are happy. They 
say things like "Well, D works for me" or "These businesses use D 
quite successfully". I've used D successfully... if I only judge 
it on those things that it is successfully used at.

The problem with that is that the things D does poorly in are 
never developed to any high level and so it never attracts other 
people who need those things.

You have to realize because of the way D has been run in the past 
has setup what it is today. Basically it is self-motivated people 
who are willing to work on their own for their own cause. This 
has build up a hodge podge of disorganized libraries, all kinds 
of problems... Over time it gets worse and requires more effort 
to maintain. For example, if D depreciates certain features then 
those libraries general bit rot and all that effort is ultimately 
wasted. Of course, the strengths of D are not so much effected.



> For example, take Iain Buclaw. He single-handedly, doggedly, 
> and indefatigably improved GDC (which had been abandoned) to 
> the point where it was accepted by and officially incorporated 
> into the Gnu Compiler Collection. This is a monumental, 
> career-making achievement. It's the only thing he ever needs to 
> write on his resume. He's a made man.

Yes, and it is quite amazing that people dedicate their precious 
time... but it is still not the way to go. You are relying on 
people to build D for you... what happens when they stop? Even if 
they trickle in over time you have a certain rate of progression 
of growth that you think will continue building D:

In your mind you see D's growth as

D(t) = m*t

where m is the rate of growth which depends on volunteers 
contributing to D(which may change over time but we will use 
averages).

But you fail to take in to account other variables:

D(t) = m*t - d*t - e*t

d is decay rate. It is a measure of bit rot that occurs that 
hurts D. e is an environmental cost. Such as other compilers that 
compete with d(such as taking volunteers).

In fact the equation is far more complicated but you are only 
looking at the positive side(the things that D was well and keeps 
it going).

Eventually the costs will outweigh the benefits and D will then 
end bit rotting itself(it will just end up another compiler in 
the compiler grave yard, where eventually all compilers end up, 
even C++ will be there one day, but who wants to die young?).


> Many D contributors have leveraged their work on D into high 
> paying jobs that were otherwise closed to them.

I'm not disputing anything like this. But you are only looking at 
the positives. Your view is warped. You MUST look at the 
negatives, no matter how painful it is. Without looking at the 
negatives they will eventually overtake the positives and then 
you will be forced to look at them(well, you might die before 
they come in too play but they will occur none the less).

> I'm very proud of these fellows and their achievements. I'm 
> honored that D was the route to their success. The opportunity 
> is here with D for anyone else who wants to learn and show the 
> world what they can do.

No one is trying to knock anything bad about D, what you have 
done, your intelligence, anyone else's intelligence, anyones 
contributions, all the hard work, all the dedication, or anything 
else that has made D what it is.

This discussion ultimately has nothing to do with D's 
achievements. They HAVE to be ignored, at least on some level, so 
one can see the negatives. And without seeing the negatives there 
is no balanced view and D will eventually reach it's limits.

You have to realize that what is being said is not a specific 
statement about D, it is a general statement about all 
things(e.g., you are thinking in terms of functions and I'm 
thinking in terms of templates, so to speak, meaning my 
statements are more applicable to a wider class of things). I can 
say what I have said about C++ too, or anything else. You might 
say then what is the point? The point is that the better one 
understands these things the better one can control the various 
factors for specific outcomes.

1.  You agree that all things reach diminishing returns? 
Eventually whatever grows as has a growth curve and it must(in 
practical sense, or maybe just average) end up diminishing? Why? 
Because growth requires resources and all resources are 
limited(even if astronomical, they are still limited = finite).

2. All things have other factors that control their growth, so 
many that they are effectively uncountable.

D's progress, like all things, is some N dimensional function 
that depends on t and many other things. [meaning that if we know 
all the data we could model it using an N dimensional function 
rather precisely]

Such functions have orders of growth and decay. Big O notation 
takes such things in to account. You know sorting routines have 
such measures of growth. But you realize that D is just some big 
sort routine that is very complicated? It takes bits and sorts 
them in to a new array giving some complex function(the grammar, 
the machine language specification, etc). It's so complex that 
you have probably even never tried to simplify it in such a 
way... but make no mistake, it is still just an abstract machine 
that has the same types of mathematical abstractions in it.

The point is then that there are negative components and if you 
ignore them then they will catch up and then take over. You are 
ignoring most of those components. You should try to find the 
largest ones and reduce their effect.

See, if we were talking about an optimization problem, say a cpu 
task scheduler, you would have no problem understanding what I'm 
talking about. You'd say agree and say "Yes, if we want to 
maximize throughput we need to minimize task switching(it is 
costly) so we should run the most important tasks first... but we 
can't starve the smaller tasks completely." and we would come up 
with some code that would try to optimize the scheduling of the 
tasks[which is project management too].

You know all about that kinda stuff but you fail to realize it 
also exists(in a disguised form) in D's own management, which 
again, is just a program(all things in life are programs... it's 
no coincidence that transistors and neurons both are switches or 
that people use the same term for many disparate things. It's 
because there is a much deeper connection between all things).

Since you, I believe, do understand Big O/Little O notation and 
theory, I'll simplify the whole discussion to this:

D = o(t) - O(t)

o(t) is the lower bound of D's growth, it can't do any worse than 
this.

O(t) is the upper bound on D's decay, it can't do any better than 
this.

You are only looking at o(t), I'm trying to get you to look at 
O(t) because you are effectively ignoring it(seems to be what 
most humans do). You are looking at the positive side(o(t)) and 
ignoring the negative side(O(t)).


But since O(t) is not 0, there is the risk that D's growth will 
end up "negative" dead. (The universe seems too dictate that O(t) 
always overtakes o(t) due to finite resources/diminishing 
returns/bit rot/etc).

Now, if we want to maximize D's growth, we can't just look at 
o(t), we must also try to deal with O(t).

You have focused so much on o(t) and ignored almost all O(t) that 
O(t) is the "low hanging fruit". It's got so many terms in it 
that are large and can be rather easily dealt with(diminishing 
returns haven't kicked in) that if you realized this and decided 
to deal with them(as unpleasant as they seem) that you could give 
a huge boost to the overall growth of D.

But you keep focusing on o(t).

If this was an algorithm, which it is ultimately, your algorithm 
will be doomed in the long run. Not because of what you have done 
with o(t) but because of what you haven't done with O(t).

I'm in no way criticizing you for you and others accomplishments 
on o(t) but I am criticizing you on your neglect of O(t). My 
statements are purely based in logic, mathematics and reality. 
Meaning they are mathematical models(simplifications of reality) 
that are applicable to all things that can be modeled 
mathematically(which seems to be almost everything in the 
universe). It's just like how much things can be represented by a 
differential equation, or how most things can use computers to 
solve their problems(which is why compilers are so important 
since they let us more effectively write programs that solve 
problems).

The balance is to look at both o(t) and O(t). Most people look at 
only one and ignore the other as if it didn't exist[It might be a 
left/right brain thing].


If you spent the next month or two just hard core analyzing O(t) 
you'd probably do more for D than in the last 5 years. You'll see 
things you never thought existed(because they didn't in your mind 
since you never saw them). You just have to drop you preconceived 
notions and biases that have formed. You have conditioned 
yourself to look at o(t).

You are, in fact, the best person to do this because you know far 
more about D overall and generally there is actually some type of 
interdependence between o and O. Of course, having others to help 
you break out of the mental box you exist in will speed up the 
process(it's not an attack, we all exist in our own mental boxes, 
but expanding our boxes almost always is a good thing).


I'll give you a quick example that may or may not mean anything 
too you. I've always been right handed and have heavily used it 
for all things so much so that certain things that require the 
left hand usually slow me down considerably. Such as typing. I am 
very fast with my right hand, and my left faster than most 
peoples right hand... but my left hand is not at all at the same 
level as my right. I decided to try to balance this by forcing 
myself to use my left hand for things. I now can use it for many 
different things such as for a mouse and various 
tooling(soldering iron, etc) and it feels comfortable(not quite 
at the same level as the right but it's no longer a determent and 
if I ever lost my right hand it would be quite easy for me to 
adapt). This thing though is much deeper because our brains are 
wired in specific ways to our body. By forcing myself to use my 
left hand I have actually rewired my brain to some degree in a 
positive way(more balanced).

I even use two mice because sometimes it's much quicker to grab 
one with the left hand(which I think is because computer input is 
rather poorly understood. Imagine having a brain harness where 
you just think of what you want and it happens... keyboards and 
mice are just middle men that slow this process down).

Now, 5 years ago I would have never thought about such things 
because I was rather myopic. Thinking that how I thought about 
things was the way they existed. I have learned through that, 
that my thinking is limited by me and has little congruence with 
the real world. The left hand/right hand is just an example. One 
must always try too find the other side to things, it actually 
benefits everything. It's hard to understand this until you have 
done it enough to see how it works(like all things it is 
experiential). But it is very powerful. I'm trying to get you to 
at least take a leap of faith here you should do the same type of 
thing with D[ultimately in everything you do]. At worst you would 
have wasted some of your time, at best you might completely 
change your existence or D's progression. I can't tell you 
specifics in much of a meaningful way since, if you remember, I'm 
talking more in general terms. You have to fill in those specific 
details and then analyze the patterns objectively(taking in to 
account both sides).


























More information about the Digitalmars-d mailing list