Really odd that they went with M:N model - if the OS is fast at creating/destroying threads 1:1 is the best model for vast majority of apps.
Basically, in the effort to make the abstraction Just Work between 1:1 and N:M threading, we made green threads so heavyweight that they barely even qualified as green anymore. It's only by removing that abstraction that we could feasibly make them lightweight again.
Sorry! We're sensitive to your use case, but we just couldn't make it work.
I have had a problem learning Rust by example, the codebases I would like to read don't usually work with the latest Rust releases.
I don't really _do_ C++, but if I could talk to Rust from C++ maybe I could start hacking on their codebases.
Edit: I found the http://doc.rust-lang.org/green/index.html is this what you are referring to?
fn get_mut<'a>(&'a mut self) -> &'a mut T;
fn print<'a>(s: &'a str);
The 'a parts are the lifetime annotations.We used to have a single inference rule for when you didn't need to write the annotation. With RFC 39[1], we added two more. These two extra inference rules removed 87% of the existing annotations, giving you this instead:
fn get_mut(&mut self) -> &mut T;
fn print(s: &str);
This is a pretty huge readability win.1: https://github.com/rust-lang/rfcs/blob/master/active/0039-li...
The detailed release notes have a more, er, detailed explanation: https://github.com/rust-lang/rust/wiki/Doc-detailed-release-...
But to clarify, functions which take 2 or more reference inputs won't benefit from this, since the compiler can't determine which lifetime parameter to use, right?
Edit: Never mind, I RTFM. Turns out it can't benefit.
fn f<'a>(x: &'a SomeType) -> &'a OtherType
you can now write this: fn f(x: &SomeType) -> &OtherType
Same meaning, just more concise syntax. fn f<'a>(x: &'a SomeType) -> &'b OtherType
?(Or when it has a lifetime of `static`, which means the referent is stored in static memory and thus is alive for the whole program.)
There's also been tons of progress toward the last features that are blocking the 1.0 release (http://blog.rust-lang.org/2014/09/15/Rust-1.0.html). The long-awaited work on dynamically-sized types is now partially complete, and the only two remaining big hurdles that I can think of are closure reform and trait coherence reform. Onward to stability!