News for hackers. Stuff that matters.
Re:Rust 2019 and beyond: limits to some growth by cageface on Wednesday December 26, 2018 @09:11PM (#18766720)
What tends to happen is that you bring out a simplified, cleaned-up version of the popular language of the day. People then flock to that new language and start making feature requests. Over time that language becomes as complex and inelegant as the language it replaced and you can start the whole cycle all over again.

The move from C++ -> Java -> Go is a perfect example of this cycle.

Re:Rust 2019 and beyond: limits to some growth by e3b0c on Thursday December 27, 2018 @12:32AM (#18767584)
C is a language designed to enable more efficient communication between the computer and the programmer in mind.

C++ is a language designed to enable more communication between the compiler and the programmer.

Go is a language designed to enable more efficient communication between programmers.

Re:Rust 2019 and beyond: limits to some growth by pjmlp on Thursday December 27, 2018 @10:28AM (#18769956)
C was a language designed by two developers without background in language design that got lucky, because Bell Labs wasn't allowed to sell UNIX thus it ended up licensing it for a symbolic price to universities.

C was hardly efficient in the 80s micro-computers, and outside Bell Labs people were doing compiler optimization research in languages like PL.8 and similar.

Had Bell Labs been allowed to sell UNIX and history would certainly looked much different.

Re:Rust 2019 and beyond: limits to some growth by e3b0c on Friday December 28, 2018 @03:20AM (#18775501)
When talking about "efficient communication" between the computer and the programmer, it does not necessarily imply the characteristics of the runtime performance.

For instance, Fortran is very performant in numerical computing, even outperforming C, but it has difficulty in accessing I/O mapped registers or implementing an interrupt handler, a jump table, or just cleaning a particular chunk of memory addresses.

Re:Rust 2019 and beyond: limits to some growth by pjmlp on Friday December 28, 2018 @07:34AM (#18776391)
Another urban legend from C yearly days. There was plenty of research in system languages since the early 60's outside Bell Labs, with OSes being written in Algol, Pascal and PL/I variants.

"Oh, it was quite a while ago. I kind of stopped when C came out. That was a big blow. We were making so much good progress on optimizations and transformations. We were getting rid of just one nice problem after another. When C came out, at one of the SIGPLAN compiler conferences, there was a debate between Steve Johnson from Bell Labs, who was supporting C, and one of our people, Bill Harrison, who was working on a project that I had at that time supporting automatic optimization...The nubbin of the debate was Steve's defense of not having to build optimizers anymore because the programmer would take care of it. That it was really a programmer's issue.... Seibel: Do you think C is a reasonable language if they had restricted its use to operating-system kernels? Allen: Oh, yeah. That would have been fine. And, in fact, you need to have something like that, something where experts can really fine-tune without big bottlenecks because those are key problems to solve. By 1960, we had a long list of amazing languages: Lisp, APL, Fortran, COBOL, Algol 60. These are higher-level than C. We have seriously regressed, since C developed. C has destroyed our ability to advance the state of the art in automatic optimization, automatic parallelization, automatic mapping of a high-level language to the machine. This is one of the reasons compilers are ... basically not taught much anymore in the colleges and universities."

-- Fran Allen interview, Excerpted from: Peter Seibel. Coders at Work: Reflections on the Craft of Programming

Re:Rust 2019 and beyond: limits to some growth by klodolph on Thursday December 27, 2018 @01:31AM (#18767836)
I don’t think Java and Go will ever, combined, reach the complexity of C++.

The reason why older languages are complex and inelegant is because our understanding of how to create simple yet useful languages has increased, not because older languages accumulate much complexity.

Re:Rust 2019 and beyond: limits to some growth by adrianN on Thursday December 27, 2018 @08:33AM (#18769311)
Wanting to do what the new languages can do without breaking backwards compatibility is a big reason why C++ got so complicated. C++98 isn't all that complex, but if you want to learn C++20 you still have to learn every language feature that was developed in the last thirty years and how they all interact.
Re:Rust 2019 and beyond: limits to some growth by klodolph on Thursday December 27, 2018 @07:14PM (#18773837)
I would disagree with the claim that “C++98 isn’t all that complex.” It was so complex that any project I found using it would restrict itself to some arbitrary subset, just to keep complexity under control. Java has gone through years of backwards-compatible changes, and is still wonderfully simple compared to early versions of C++. C++ started with a mess of different features and hasn’t really gotten worse. If anything, C++11 is simpler than C++98 from a user’s perspective, even though it’s not from an implementer’s perspective.

One of the big differences is that Java and Go have straightforward context-free grammars, mostly, and you can whip up a working parser in no time. C++ is a bit of a beast, by comparison (hence keywords like “typename”).

C++ also has the complex overloads and template system. I think people underestimate how complex these things are when they are learning C++, and how complex their interactions are. Then there’s the preprocessor.

You can kind of argue that these are just an accumulation of changes, but other languages contemporary with C and C++ do not suffer from these complexities, so the argument falls flat. By comparison, Go and Java rely on reflection or code generation more, and these are a bit simpler.

Re:Rust 2019 and beyond: limits to some growth by shmerl on Thursday December 27, 2018 @08:49PM (#18774296)
> I think people underestimate how complex these things are when they are learning C++, and how complex their interactions are. Then there’s the preprocessor.

And then there is arcane stuff like this:

* https://en.cppreference.com/w/cpp/language/eval_order

* https://en.cppreference.com/w/cpp/language/copy_elision

That does make the language feel very complex even without the whole templates depth.

Re:Rust 2019 and beyond: limits to some growth by pjmlp on Thursday December 27, 2018 @03:09PM (#18772199)
Just like wanting to learn Python 3.7 means learning about 500 PEPs and how they interact across each Python release (major.minor, during the last 25 years and alternatives to CPython.
Re:Rust 2019 and beyond: limits to some growth by adrianN on Thursday December 27, 2018 @03:28PM (#18772357)
Well Python 3 broke compatibility so you don't have to start at Python 0.1 alpha, but yes, completely understanding Python is also no easy task. I write Python almost every day and have taught courses using it, but I know of features that I don't understand. There are probably more that I'm not even aware of.