Bare Metal Rust 2: Retarget your compiler so interrupts are not evil
randomhacks.net
randomhacks.net
It's all relative :)
On the other hand, i really really would encourage any new developers to read the rust docs before learning c++ etc. It is amazing to have a language that puts its mem model first. The docs tackle the very basics really well.
The k&r c book is amazing but did a poor job of dealing with the true memory model because that was common knowledge at time of writing. Its short because of assumptions
the best java (top 0.01%) developers are the only ones I encounter often who understand the x86 + javas basterdised memory model
The rest just take it for granted. Even c++ developers (I'm one).
But in reality, the percentage of people who understand something fully at the 'expert' level is very small. Best way to find out if you know something or not is too teach someone else.
Ironically, I often use a paging metaphor here, for stuff that I learned, but haven't thought about recently... going over something again to refresh my memory is just swapping that page back in.
IIRC Rust has a similarly confusing underlying memory model. However, due to a lack of direct shared mutable state being available, you don't get to see this often. In fact, one might call Rust's model more confusing than C++ since you have `noalias` everywhere which can enable more aggressive optimizations. But it's mostly irrelevant since you don't deal with it unless you're writing unsafe code.
On the "encourage new devs to read the Rust docs" front I agree, though. We've had tons of people saying that they code better C++ after learning Rust. Also I've heard of companies wanting to start programming in C++/Rust-y things with a majority of python/ruby/js/etc devs use Rust because "Rust teaches a lot of things to the programmers that they no longer have to". Something like that.
> IIRC Rust has a similarly confusing memory model
In fact I believe that at a fundamental level Rust is forced to more-or-less adopt C11's memory model thanks to its usage of LLVM, though, as you say, Rust's concurrency safety mechanisms mean that the theoretical soundness issues that apply to C11 are toothless in Rust.Basically, this stuff is a ton of fun, and I'm just sharing my learning process with other people in hopes that we can all learn from each other and spend less time digging through hardware data books. :-) In particular, I recommend Philipp Oppermann's great introductory posts: http://os.phil-opp.com/ And if you'd like to hack on a somewhat more complete Rust-based OS, the Redox people appear to have gone into overdrive in the last few weeks: https://github.com/redox-os/redox
The #rust-osdev channel on Mozilla IRC is also full of great folks, who've helped me with all kinds of challenges.
At the end of the day, it's not really that big of a deal - Allowing the redzone only really allows you to avoid two `sub` and `add` instructions on the stack-pointer. It's a nice idea, but losing it isn't that big of a deal at the end of the day. The majority of functions can't take advantage of the red-zone anyway, because any function that calls another function has to make sure its stack-pointer is correct before calling it.