Fajerwerki, które uczą

Robię projekt w Rust. Będą fajerwerki, mówię mam. Dosłownie. To są fajerwerki. Pisane w Rust, skompilowane do WebAssembly i przez JSa przesyłane do WebGLa. I się renderują. Później powrzucam screeny, na razie musicie mi uwierzyć.

Anyway, czego się nauczyłem do tej pory tworząc ten projekt?

  • iteratory w Rust mogą być szybsze od zwykłej pętli iterującej po liczbie i. Ogólnie miałem taki problem, że iterując jednocześnie po dwóch tablicach (iteracja po i i odniesienie się do elementów z dwóch tablic o tym indeksie), wydajność takiego kodu była taka sama jak wydajność analogicznego kodu w JS. Jednak jak poszedłem po rozum do głowy i użyłem iter() oraz zip() żeby połączyć dwa iteratory, nagle zaczęło być szybciej. Okazuje się, że iteratory w Rust są tanie w użyciu.
  • bindingi wasm-bindgen potrafią wyeksportować struktury z Rusta jako klasy JS. Więc można od strony JS po prostu robić new Foo i się utworzy instancja klasy z metodami. To jest nowe dla mnie, bo mogę utworzyć taką klasę i później ona trzyma stan. A do tej pory, żeby trzymać stan w apkach Wasm, robiłem to od strony Rusta na zmiennych statycznych i później je mutowałem(działanie "unsafe") w odpowiednich funkcjach. A teraz utworzę sobie w JS klasę jak pan, albo w Rust strukturę jak szef.
  • Można mieć randomowe liczby w Wasm! ale z tego co patrzyłem, to w bindingach to jakoś pobiera z JSa? Chociaż nie wiem jak dokładnie, bo nie widziałem tam Math.random, ale jednak są jakieś metody ze słowem random w nazwie. No i żeby mieć takie coś, to trzeba dodać w Cargo.toml w dependencies: rand = "0.8.5" oraz getrandom = { version = "0.2", features = ["js"] }. Czytajcie też tu: https://docs.rs/getrandom/latest/getrandom/#webassembly-support
  • różnych ciekawych metod wektorów w Rust (splice, extend_from_slice, resize).
  • Tak więc jest wciśnięcie, jest nauka. Jeszcze z WebGLem się szarpię (tu już w JS), co bywa frustrujące. A piszę w czystym WebGL, bez dodatkowej biblioteki, więc jest ciężko. No ale ja się nie daję. Bo chcę dostarczyć fajerwerki. No, w zasadzie to tylko taki początek czegoś większego, co będzie silnikiem gier.

    Komentarze

    Popularne posty z tego bloga

    Dlaczego nie da się nadgonić frontendu

    Absurdy Rekrutacji 2023

    Przygody juniora (1)