Rust + WebAssemblyに入門した話

E2b3ac88b4244e3addb6b4ba9c2dfcca?s=47 Misaki Makino
September 05, 2018

Rust + WebAssemblyに入門した話

2018/09/05 Rust入門者の集い #5
で発表した内容です。

E2b3ac88b4244e3addb6b4ba9c2dfcca?s=128

Misaki Makino

September 05, 2018
Tweet

Transcript

  1. Rust + WebAssembly ʹೖ໳ͨ͠࿩ Rustೖ໳ऀͷू͍ #5 @T5uku5hi

  2. ຀໺ ඒ࡙ @T5uku5hi ɾ৽ଔ2೥໨ͷͻΑͬ͜ΤϯδχΞ ɾະܦݧͰΤϯδχΞͷੈք΁ ɾۀ຿Ͱ͸JavaΛ࢖༻ ɾRustΛۀ຿Ͱ࢖͍͍ͨʂ ࣗݾ঺հ

  3. ΰʔϧ ɹɾWebAssemblyͷ֓ཁ ɹɾwasm-bindgenͷಛ௃΍࢖͍ํ ͜ͷLTΛฉ͍ͨํʑ͕ɺ ΛཧղͰ͖ΔΑ͏ʹͳΔ͜ͱ

  4. WebAssemblyͱ͸ ҰݴͰݴ͏ͱ Webϒϥ΢β্Ͱ࣮ߦͰ͖ΔόΠφϦܗࣜ ໨ඪ (Mozilla MDN web docsΑΓ) ɹɾߴ଎Ͱɺߴޮ཰ͰɺϙʔλϒϧͰ͋Δ ɹɾՄಡੑΛ࣋ͪɺσόοάՄೳͰ͋Δ

    ɹɾ҆શͰ͋Δ ɹɾଞͷWebٕज़ͱͷޙํޓ׵ੑ͕͋Δ
  5. WebAssemblyΛ೷͍ͯΈΑ͏ Mozilla੡ͷΦϯϥΠϯIDE WebAssembly Studio

  6. wasm-bindgenͱ͸ RustͱJavaScriptͱwasm͕ γʔϜϨεʹ࢖͑ΔެࣜϓϩδΣΫτ ҰݴͰݴ͏ͱ

  7. wasm-bindgenͰRust → JS ɾެࣜνϡʔτϦΞϧΛ΍ͬͯΈͨ ɹίϯ΢ΣΠͷϥΠϑήʔϜ ɹhttps://github.com/rustwasm/wasm_game_of_life ɾRustͷߏ଄ମΛconsole.logͰݺͼग़ͯ͠Έͨ ͠ΐ΅͍ͯ͘͢·ͤΜ

  8. ϓϩδΣΫτͷ࡞Γํɾ૸Βͤํ DBSHPHFOFSBUFHJUIUUQTHJUIVCDPNSVTUXBTNXBTN QBDLUFNQMBUFHJU XBTNQBDLJOJU OQNJOJUXBTNBQQXXX OQNMJOL!QLHͷσΟϨΫτϦ OQNMJOLϧʔτσΟϨΫτϦͷ໊લ!XXXͷσΟϨΫτϦ DBSHPJOTUBMMXBTNQBDL DBSHPJOTUBMMDBSHPHFOFSBUF XBTNQBDLJOJUϗʔϜσΟϨΫτϦ

    OQNJOTUBMM!XXXͷσΟϨΫτϦ OQNSVOTUBSU!XXXͷσΟϨΫτϦ
  9. web-sysͱjs-sysΛ࢖ͬͯΈͨ wasm-bindgenͷઈࢍ։ൃதͷcrates✨ wasm-bindgenͰJS → Rust

  10. web-sysͱjs-sysͷ࢝Ίํ 1) wasm-bindgenϓϩδΣΫτΛgit clone 2) /example/canvas/src/lib.rsͷத਎Λ ɹॻ͖׵͑Δ 3) sh build.shΛ࣮ߦ

    DemoΛ͓ݟͤ͠·͢ʂ
  11. context.fillStyle͕ະ࣮૷Ͱͨ͠ ৭෇͖ͷϚϦΦʹͳΒͳ͔ͬͨ…

  12. ͭ·͍ͮͨ͜ͱ ɾ1.30.0-nightly (28bcffead 2018-09-01) ɾ1.30.0-nightly (0f063aef6 2018-09-03) ͩͱίϯύΠϧʹࣦഊ͠·͢ɻ (issueཱͬͯ·͕͢ະղܾͰ͢) $wasm-pack

    init΍$sh build.sh͸ɺͦͷཪଆͰnightlyͱ ໊લͷ͍ͭͨ΋ͷΛར༻͍ͯ͠ΔΑ͏Ͱ͢ɻ ɹˠ.rust-toolchainͰόʔδϣϯ؅ཧͯ͠΋ͩΊ
  13. ղܾࡦ: खಈͰ໭͢ SVTUVQUPPMDIBJOJOTUBMMOJHIUMZ ./rustup/toolchains ./rustup/update-hashes ʹ͋ΔnightlyΛ࡟আ nightly-2018-08-19Λnightlyʹrename

  14. ·ͱΊ ɾWebAssemblyͱ͸ ɹWebϒϥ΢β্Ͱ࣮ߦͰ͖ΔόΠφϦܗࣜ ɾwasm-bindgenͱ͸ ɹRustͱJavaScriptͱwasm͕ ɹγʔϜϨεʹ࢖͑ΔެࣜϓϩδΣΫτ

  15. ͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ