Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I think the presentation exposes the big picture: D is a very loaded language. It tries to serve every possible exotic need imaginable. Probably not as much as C++ but that’s a committe-designed language, it doesn’t count.

The feature bloat makes it very hard to learn D, let alone being an expert on it. I think it’s telling why its creator focuses on individual features to assess its success. Now, all those missed features either have to be maintained or carefully removed which is a lot of work and might actually break existing code.

I like D because of its vision: C++ for humans. It fails on that vision simply because it has become a gigantic incoherent product like a research project.

It probably needed a harsher approach to feature requests to make sure the language stayed on the vision. Now it’s a programmer’s dream and a programmer’s nightmare at the same time.

I think Go, for instance, has made a better decision to stay barebones.

I see that the creator intends to include Rust’s borrow-checking semantics which reminds me that Rust is probably what D should have been in all aspects.



> The feature bloat makes it very hard to learn D

Not at all. For example, if you know C-style programming, you can be productive in D with a pretty trivial investment in time.

> Rust is probably what D should have been in all aspects

While D will likely get some sort of borrow checking, it will not adopt the look and feel of Rust.


Please define "productive", doing what, to what end, with whom, at what level of complexity? Your clear thoughts here will be illuminating and worthwhile.


Productive means simply that you're getting useful work done at an acceptable cost to you.


Ok, you're claiming productive in /all/ circumstances? Going to have to disagree there. Also with the tone of that as a response but perhaps you didn't mean it.

Maybe giving those circumstances a bit more thought would be instructive and useful to you. Maybe not. Good luck!


> The feature bloat makes it very hard to learn D, let alone being an expert on it.

Learning 100% of any programming language should not be a goal. I know less than 10% of the functionalities of my microwave oven or my washing machine. This doesn't prevent me from successfully using them and save a lot of time.

Bjarne Stroustrup himself says learning all the nitty-gritty details of C++ is counterproductive and unnecessary.


The problem with feature bloat is related to a very well known fact: Code is read more often than it is written. As a consequence, if you don't know the little details of a language, it might be a harder to read code written by someone else that is more knowledgeable.

Consider for instance Lua, which is often read by people that have superficial knowledge of the language. Lua has a very standard syntax that anyone with basic general programming knowledge will understand:

> player:set_pos({x=0, y=0})

But it also has syntactic sugar:

> player:set_pos{x=0, y=0} -- note the braces instead of parens

This is where you lose half of your readers because they have to look for that weird syntax in the manual.

In defense of language implementers, it is sometimes difficult to "resist" feature requests. It's difficult to say "no" in general, in particular when you are not Niklaus Wirth and have half a dozen languages designs on your resumé; all you have is your gut feelings as justification.


I have 15 years experience as a professional C++ programmer in various teams and companies (and although I don't know 100% of C++17, I consider myself productive!).

When diving into new codebases, the couple of esoteric-used-features-you-did-not-know-existed in C++ was never a big deal. Learning the required C++ features was always a matter of days (because the codebase is full of real examples).

Understanding the overall structure of the code, the interactions/dependencies between the components, in what file/directory should go your first feature... this is the hard part. And it's many orders of magnitude harder than learning a couple of new language features.

Don't get me wrong, I'd really like that C++ and D be smaller, and I don't like feature bloat. I once wrote a source code processor based on clang, and then you realize how big the language really is (there are many AST node types), and having all your code written in it starts to feel like technical debt.

However, I pragmatically have to recognize that feature bloat isn't a real problem for professional C++ programmers (It might be, for compiler vendors - at this point, I'm not expecting any new C++ compiler to be created).

PS1: C++ certainly gives you some shiny tools to make interesting messes (I've seen codebases where simply including a header would change the program behavior). This isn't related to the feature count, but rather to the semantic of the individual features themselves, like macros/templates. At least we don't have monkey patching ...

PS2: About your Lua example: even without knowing the syntax, can you sincerely have the slightest doubt about what "player:set_pos{x=0, y=0}" actually does?


Weird, because I agree with the general sentiment, yet with C++ I feel you have to learn most of the language if you want to be productive with it...


To put it bluntly: there's already one too many languages that make one bend into a pretzel to satisfy a tool.

If D tried to humanize C++, which is not a given, Rust tried and succeeded to dehumanize it into something that can be analyzed by a simple tool.


If the overhead of automatic GC doesn't fit your project you only have two choices:

a) Keep all the ownership and lifetime information in your head and make sure it gets communicated to other team members. Then write tests to make sure nothing was missed.

b) Formally specify ownership and lifetime so it can be checked by the compiler.

I'm not sure (a) is any less dehumanizing than (b)


Between A and B there's quite a few type system tricks & tools that one can use which bring many benefits without incurring the costs of fully verified memory ownership.

I stand by my original statement though:

a) in a language like C and C++ one has to use their knowledge to come up with a solution and verify it. Pretty human.

b) in a GC language, one mostly does not care. When they do, they do a).

c) in Rust one does their best at a) and then does what the robot tells them to, even if the code is correct but the robot can't yet figure it out.


For Rust I am still looking forward to not having to scatter Rc<RefCell<>> everywhere when using Gtk-rs and similar UI toolkits.


Not too familiar with inner workings of gtk-rs, but: would ECS approach work there? Or e.g., a generational slotmap, so you could pass around copyable integer keys as much as you want.


And then eventually get use-after-free access errors unless I use vector clocks to keep track of indexes usage, or reach to a third party library that does it for me.


> The feature bloat makes it very hard to learn D

I suppose you aren't using any maths either because of the existance of semisimple lie algebras and topological quantum fields ?


Yep. Every team project in maths where someone is completely free to use "semisimple lie algebras and topological quantum fields" has to count me out.

If a language feature exists and you program in that language you have to know how to deal with that feature, even if you don't write code using it you have to be able to re-factor it and re-write code that used it.

Unless we become the kind of person that doesn't ever work in teams or we just hate our team mates and care little for project success.

The point the parent makes is a legitimate one. It can be argued against but your response hasn't achieved that in a meaningful way.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: