rustwasm / book

The Rust and WebAssembly Book
https://rustwasm.github.io/docs/book/
MIT License
1.75k stars 211 forks source link

use js_sys::Uint8Array::view instead #223

Open mike-kfed opened 4 years ago

mike-kfed commented 4 years ago

of direct access to wasm-memory for the regular tutorial and Uint32Array for the bits exercise.

Summary

I learned that directly accessing webassembly shared memory is not needed anymore, easier to write and equally efficient are js_sys typed Array views. This change of the tutorial in the book goes together with my PR for the code https://github.com/rustwasm/wasm_game_of_life/pull/53

I hope my explanations of what is going on are sufficient, but please let me know if wording should change, english is not my primary language.

Note: I decided to change the algorithm for bitIsSet and use of a Uint32Array for the cells in the bits exercise because staying with Uint8Array would have meant this ugly rust code:

        pub fn cells(&mut self) -> js_sys::Uint8Array {
            unsafe {
                js_sys::Uint8Array::view_mut_raw(
                    mem::transmute::<&[u32], *mut [u8]>(&self.cells.as_slice()) as *mut u8,
                    self.cells.len() / 8,
                )
            }
        }