RubyWorld Conference 2022 https://2022.rubyworld-conf.org/ja/program/day2/
Presentation Video https://youtu.be/UOPHsEml7D8?t=17487
RubyWorld Conference 2022Ruby & WebAssemblyIntroductionYuta Saito (@kateinoigakukun)
View Slide
About me• Yuta Saito / @kateinoigakukun• ૣҴాେֶ جװཧֶ෦ ใཧֶՊ4• ύʔτλΠϜ։ൃऀ @• CRubyͷWebAssembly/WASIϝϯςφ
WebAssembly (Wasm)• ϒϥβʹ࣮͞Ε͍ͯΔɺϙʔλϒϧͳ࣮ߦόΠφϦܗࣜ• Google Earth, Figma, GoodNotes, etc..Introduction
WebAssembly (Wasm)• CPUΞʔΩςΫνϟʹґଘ͠ͳ͍• ιʔεݴޠʹґଘ͠ͳ͍• ϗετڥͷΞΫηε੍ݶ• ʢͦͦ͜͜ʣߴhttps://hacks.mozilla.org/2017/02/creating-and-working-with-webassembly-modules/ಛ
WebAssembly (Wasm)• σβΠϯॳظ͔ΒϒϥβҎ֎ͷڥʹϥϯλΠϜΛຒΊࠐΉ͜ͱΛఆWebϒϥβҎ֎Ͱศརhttps://github.com/WebAssembly/design/commit/070f56c5c59030e2d735973f3e10dbe2c87366db
WebAssembly (Wasm)• ϒϥβ͔Βಠཱͨ͠WebAssemblyϥϯλΠϜ࣮͕ଟ• Wasmtime, WAMR, Wasmer, etc…• ΞϓϦέʔγϣϯʹΈࠐΈ͍͢ (like mruby)• ϢʔβʹΑΔʮ৴པͰ͖ͳ͍ϓϩάϥϜʯΛೖྗ͢ΔιϑτΣΞͰศར• ྫ) ϓϥάΠϯγεςϜɺαʔόʔϨεɺetc…WebϒϥβҎ֎Ͱศར
WebAssembly (Wasm)• ݴޠଆ• WasmʹίϯύΠϧͰ͖Εɺ༷ʑͳڥͰಈ͔ͤΔ• ϓϥοτϑΥʔϜଆ• WasmϥϯλΠϜ͑͋͞Εɺ༷ʑͳݴޠΛαϙʔτ͢Δ͜ͱ͕Ͱ͖ΔݴޠϓϥοτϑΥʔϜخ͍͠ϓϩάϥϜަܗࣜʹͽͬͨΓ
ϓϩάϥϜͷ୯ҐComputerHypervisor OSOS OS OSLibs Libs LibsApp App AppComputerOSDockerLibs Libs LibsApp App AppComputerOSWebAssembly RuntimeApp App AppVMΠϝʔδίϯςφ.wasm
Ruby on WebAssembly• RubyΠϯλϓϦλ (CRuby) ΛWebAssemblyʹίϯύΠϧ• ωΠςΟϒͱ΄΅ಉ͡ػೳΛఏڙ• Ruby͕ϒϥβ/༷ʑͳWasmڥͰಈ͘Α͏ʹʂ• Ͳ͜ͰRuby
͜Ε·ͰͷCRubyΛWebAssemblyͰಈ͔͢औΓΈemrubyʢ͍ʔ͑ΉΔͼʔʣ• EmscriptenπʔϧνΣΠϯͰίϯύΠϧ͞ΕͨCRuby• ϒϥβͰͷར༻͕લఏEmscriptenϒϥβ֎Ͱಈ͔ͤͳ͍WASIඪ४Խ͞Ε͓ͯΓɺ ϒϥβ֎Ͱαϙʔτ͞ΕͯΔ
Ruby on WebAssembly<br/><br/><br/>puts "Hello, world!"<br/><br/><br/>
https://kateinoigakukun.github.io/jupyterlite-ruby-kernel
՝ίʔυαΠζ• RubyεΫϦϓτͷαΠζ: 22MB• ؆୯ͳMinification -> 18MB• RubyΠϯλϓϦλͷαΠζ: 8.2MB• Asyncifyલ: 5.9MB
՝ىಈ࣌ؒ• RubyεΫϦϓτͷ࣮ߦ·Ͱʹ60ms• ࢀߟɿJSΤϯδϯʢSpiderMonkeyʣ6mshttps://bytecodealliance.org/articles/wasmtime-10-performance
·ͱΊ• Ruby 3.2ͰWebAssembly/WASIʹରԠ• ʮͲ͜ͰRubyʯͷ1εςοϓ