In addition to the points mentioned, I think there are some interesting unanswered questions about what lifetimes mean in the context of context-switching / scheduling code, and how they can or can’t be exploited to make such code safer. I expect similar issues as those we faced with scoped threads to pop up.
Also, there are a number of library considerations: e.g. custom allocators, more crates behind the facade (including moving hash{set,map} to libcollections).
There are also a couple proposed language features that are extra relevant with freestanding development:
-
&in &out and &uninit are more essential when working with inline assembly, as passing things larger than a register by value is simply not an option.
- GC integration might help MirageOS and HalVM in particular
@pablochacin The issue is while such things can be, the experience is less nice than it could be. I’d like to see freestanding Rust beat freestanding C as much as hosted Rust beats hosted C, but we just aren’t there yet.