On Tuesday, 2 November 2021 at 18:01:37 UTC, Ola Fosheim Grøstad wrote:
> On Tuesday, 2 November 2021 at 17:27:25 UTC, Dr Machine Code wrote:
> It got asked on reddit sub but for those that aren't active too, I'd like you opinions. Please don't get me wrong, I also love D, I've used it everywhere I can and I'd say it's my favourite language (yes I have one...) but I'm as as the reddit's OP, trying to understand why it's unpopular.
I don't think it is reasonable to say it is unpopular, Github activity shows that people create new projects with it at roughly the same rate as Nim, Crystal and other smaller languages.
What would be interesting to know is what made people who were very enthusiastic about D in the past (in the forums) switch to another language? Which language was it and why was that a better fit for them?
While I haven't been active in D community for something like five years already, it wasn't because I switched to another PL, but mostly due to some disturbances in personal life that made me shift my spare time activities from programming to anything from politics to gardening and woodworking, while still trying to advocate for D or at least write all my single-use tools in it (I learned that woodworkers call such stuff jigs and I sort of like it) at work. I've recently returned to tinkering with electronics and programming at home so let me share my view.
From my not-so-extensive professional experience, large companies usually try to stick to well-established technologies, for two reasons - one is to make a product fast by reusing as much as possible from existing software, and this is mostly written in C and C++ in the area of compilers/drivers/system-level services (at least in Linux world) or Python and C/C++-based proprietary GPU languages in ML, but I'm sure in other businesses there have also been some default language choices. The other one is to sell the product fast by not making it too weird to their customers. Many SW engineers still think of D as a curiosity, and for their managers and salespeople it's surely more exotic than space travel.
So it's mostly about a killer app that makes a language an obvious choice for thing X that one wants to work with, and I think it's been mentioned a thousand times in this forum. You just need to be ready and jump in as first or one of the first into an emerging business to be successful in this race. And it's not only about programming languages, but about any technology or even non-technology related idea too. Python became the default language for ML, because it was easy enough for people whose main focus wasn't programming, and who didn't require system level performance because available bindings to C libraries were good enough. Guido didn't anticipate that, but somehow Python was ready to be picked up when a need for such language emerged. NVidia made a lot of money on ML and cryptocurrency mining not because they entered this market when it was already mature, but because they'd already had a mature technology (originally designed for something completely unrelated, where they didn't have much competition either) someone picked up for their job that was yet to become a big business. ARM CPUs were mostly used in various embedded systems most people don't even realize have a computer inside, until someone picked them up for smartphones - a product everyone on the planet desired in their pocket - and they're still The Default Architecture for most mobile gadgets.
It seems to me that popularity or commercial success do not exactly follow the rules of good engineering process. In my previous job we frequently joked about the upper management that they seemed to drive the company in an upside-down manner, sort of - hey guys, let's make this or that solution, and when you're done, we'll try to look for a problem that it solves. Yet experimenting with stuff that has no immediate application is the core of actual research, and when you try to look for a solution to a long-existing problem, people usually have accustomed themselves to deal with it with half-baked but then available means, and it's extremely hard to change their habits.
What D tried to do was to be "better C++" or "better C", but in 2022 it's about 40 years too late to be successful in that. There're millions of programs in C and C++ that have been good enough to make revenue for many companies and thus convinced others to invest more money, effort and time in more stuff that depends on C and C++.
D has low chance of becoming popular in systems programming or game programming or web programming or mobile programming or machine learning, mostly because there had already been large markets using other technologies in these areas long before D tried to enter them with enthusiasts lacking huge financial backing. It's far easier to be a pioneer in something new than to outrun the tycoons.
Anyway, D is still my favourite language and the default language I choose when coding something from scratch. It does have rough edges, but it's most often less PITA than any other language I've worked with, mostly because it's really flexible in terms of style - it lets me solve common problems with just a bunch of chained range calls, it lets me write clever meta stuff when I don't want to repeat myself, it lets me get down to dirty imperative fors and ifs and pointer hacks when I'm too lazy to find nicer solutions. Just the right balance between typing and thinking. I sometimes miss the rich ecosystem that Python has, where you can find one-liners for many higher level tasks, but quite often they're limited to some basic set of use cases and they're not one-liners anymore when you need them to do something beyond those. I recall I had some good experience with C# in terms of how quickly I was able to reuse existing libraries and implement any new code, especially with pretty convenient tooling from MS, but that was long time ago when it wasn't seriously usable outside Windows and I didn't have much interest in developing for Windows later.
What I've missed the most so far in D was a zero-effort reuse of C libraries, because there's a lot of useful libs in C I already know. Of course it's much less tedious to interface C in D than in Python, but I bet if D had a fully-blown ImportC from the very beginning, it could be where C++ is today.