I've assisted Jim in giving presentations on Rust at OSCON this year, and trust me when I say that he has no qualms about criticizing the language when he sees fit. His perspective is definitely that of an outsider's, and like you I agree that that's ideal from a pedagogical point of view.
That's not entirely true. There are some mechanisms that you can't really do in C++, at least not without a lot of boilerplate. And Rust's generics aren't quite as powerful (as in metaprogramming) as C++'s yet. I hear they're working on it, though.
It's easy to define a list of integers in pretty much any language,
class IntList { void addInt(){...} }
Most languages let you make a generic List, class List<T> { void add(T){...} }
The thing that's cool about HKT, is it lets you swap the other side, class T<Integer> { T operate(Integer) }
So you can deal with a Set or a List or an Optional or whatever might want to deliver integers. It seems a little goofy, but it's sort of like a Super Lambda. an anonymous function can only really do its one thing, but this lets you bundle a bunch of related lambdas together, so if you have, say Pay, you can group together all the different types of tax that are applied to pay, calculate total tax, etc. And it works over whatever random data structure you wantIt seems a little crazy at first, but with clean syntax, it's a fantastic way to split the work apart from the way the data is represented.
* what kind of animal should it have on the front?
* will it tell me 8 different, confusing, obsfucated ways to do something that would be much faster with printf?
* will it do that in chapter 1?
* ???
* profit?
We now need a "programming in Rust" book which is not by one of the Rust developers, who are too close to the design.