I don’t think it’s true that it works best by doing bottom-up. I develop top-down all the time.
Whenever you need a new function/method/struct field/enum variant, just write its name where you are going to use it. Then intellisense will complain that it doesn’t exist. Press Ctrl+. (Or whatever you have keybinded to “apply suggestion”) And now it suddenly exists and intelligence works perfectly fine. It will just place a todo!()
or raise UnimplementedException
or whatever so you don’t forget to implement it later.
unsafe fn<'a, T>(p: &'a T) -> &'static mut T { p as *cons T as *mut T as &'static mut T }
It is a bit more than just dereferencing raw pointers.