* I modified `shift-register-driver` crate yesterday, but not 100% sure if I was correct in my modifications, so I would like to ask two questions before sending a pull request. This is my current repo https://github.com/Dicklessgreat/shift-register-driver 1,I replaced the unsafe code using `MaybeUninit` with safe code using `core::array::from_fn`. Though `MaybeUninit` would use less space on the stack, I prefer safe code. which is better? https://github.com/JoshMcguigan/shift-register-driver/commit/7bcf46595bc97bafcefdc7980496ca12307684e8 2,Replaced `dyn` keyword with generics witrh trait bound. TBH, I am not sure what Rust's `dyn` keyword is doing, but my experience with C++ led me to believe that this was a keyword for dynamic dispatching using virtual function pointer tables, so I did this because I thought it was safer to write it in a more static way that could be resolved. Does the dyn keyword used here mean anything else? https://github.com/JoshMcguigan/shift-register-driver/commit/7c9edc51446d1ec16c9c0d3a9b35ccd963207b73