WebAssembly ãšã¯ã¹ããŒããªããžã§ã¯ãã®è©³çŽ°ãªæ¢æ±ãã¢ãžã¥ãŒã«ãšã¯ã¹ããŒãèšå®ãåããã¹ããã©ã¯ãã£ã¹ãæé©ãªããã©ãŒãã³ã¹ãšçžäºéçšæ§ã®ããã®é«åºŠãªãã¯ããã¯ãç¶²çŸ ã
WebAssembly ãšã¯ã¹ããŒããªããžã§ã¯ãïŒã¢ãžã¥ãŒã«ãšã¯ã¹ããŒãèšå®ã®å æ¬çãªã¬ã€ã
WebAssembly (Wasm) ã¯ãææ°ã®ãã©ãŠã¶ã§ã³ãŒããå®è¡ããããã®é«æ§èœãããŒã¿ãã«ããã€å®å šãªæ¹æ³ãæäŸããããšã«ãããWebéçºã«é©åœããããããŸããã WebAssembly ã®æ©èœã®éèŠãªåŽé¢ã¯ããšã¯ã¹ããŒããªããžã§ã¯ããä»ããŠãåšå²ã® JavaScript ç°å¢ãšå¯Ÿè©±ã§ããããšã§ãããã®ãªããžã§ã¯ãã¯ããªããžãšããŠæ©èœããJavaScript ã³ãŒãã WebAssembly ã¢ãžã¥ãŒã«å ã§å®çŸ©ããã颿°ãã¡ã¢ãªãããŒãã«ãããã³ã°ããŒãã«å€æ°ã«ã¢ã¯ã»ã¹ããå©çšã§ããããã«ããŸãã WebAssembly ãšã¯ã¹ããŒããæ§æããã³ç®¡çããæ¹æ³ãçè§£ããããšã¯ãå¹ççã§å ç¢ãª Web ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã ãã®ã¬ã€ãã§ã¯ãWebAssembly ãšã¯ã¹ããŒããªããžã§ã¯ãã®å æ¬çãªæ¢æ±ãæäŸããã¢ãžã¥ãŒã«ãšã¯ã¹ããŒãèšå®ãããŸããŸãªãšã¯ã¹ããŒãã®çš®é¡ããã¹ããã©ã¯ãã£ã¹ãããã³æé©ãªããã©ãŒãã³ã¹ãšçžäºéçšæ§ã®ããã®é«åºŠãªãã¯ããã¯ãç¶²çŸ ããŠããŸãã
WebAssembly ãšã¯ã¹ããŒããªããžã§ã¯ããšã¯äœã§ããïŒ
WebAssembly ã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããã³ã€ã³ã¹ã¿ã³ã¹åããããšãã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ããçæãããŸãã ãã®ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã«ã¯ãexports ãšããããããã£ãå«ãŸããŠãããããããšã¯ã¹ããŒããªããžã§ã¯ãã§ãã ãšã¯ã¹ããŒããªããžã§ã¯ãã¯ãWebAssembly ã¢ãžã¥ãŒã«ã JavaScript ã³ãŒãã§äœ¿çšã§ããããã«ããããŸããŸãªãšã³ãã£ã㣠(颿°ãã¡ã¢ãªãããŒãã«ãã°ããŒãã«å€æ°) ãžã®åç
§ãä¿æãã JavaScript ãªããžã§ã¯ãã§ãã
WebAssembly ã¢ãžã¥ãŒã«ã®ãããªã㯠API ã§ãããšèããŠãã ããã JavaScript ã Wasm ã¢ãžã¥ãŒã«å ã®ã³ãŒããšããŒã¿ãã衚瀺ããã察話ããæ¹æ³ã§ãã
éèŠãªæŠå¿µ
- ã¢ãžã¥ãŒã«ïŒã³ã³ãã€ã«ããã WebAssembly ãã€ã㪠(.wasm ãã¡ã€ã«)ã
- ã€ã³ã¹ã¿ã³ã¹ïŒWebAssembly ã¢ãžã¥ãŒã«ã®ã©ã³ã¿ã€ã ã€ã³ã¹ã¿ã³ã¹ã ããã§ã³ãŒããå®éã«å®è¡ãããã¡ã¢ãªãå²ãåœãŠãããŸãã
- ãšã¯ã¹ããŒããªããžã§ã¯ãïŒWebAssembly ã€ã³ã¹ã¿ã³ã¹ã®ãšã¯ã¹ããŒããããã¡ã³ããŒãå«ã JavaScript ãªããžã§ã¯ãã
- ãšã¯ã¹ããŒããããã¡ã³ããŒïŒJavaScript ã§äœ¿çšããããã« WebAssembly ã¢ãžã¥ãŒã«ãå ¬éãã颿°ãã¡ã¢ãªãããŒãã«ãããã³ã°ããŒãã«å€æ°ã
WebAssembly ã¢ãžã¥ãŒã«ãšã¯ã¹ããŒãã®æ§æ
WebAssembly ã¢ãžã¥ãŒã«ããäœããšã¯ã¹ããŒããããããæ§æããããã»ã¹ã¯ãäž»ã«ã³ã³ãã€ã«æã«ãWebAssembly ã«ã³ã³ãã€ã«ããããœãŒã¹ã³ãŒãå ã§è¡ãããŸãã ç¹å®ã®æ§æã𿹿³ã¯ã䜿çšããŠãããœãŒã¹èšèª (CãC++ãRustãAssemblyScript ãªã©) ã«ãã£ãŠç°ãªããŸãã ããã€ãã®äžè¬çãªèšèªã§ãšã¯ã¹ããŒããã©ã®ããã«å®£èšãããããèŠãŠã¿ãŸãããã
Emscripten ã䜿çšãã C/C++
Emscripten ã¯ãC ããã³ C++ ã³ãŒãã WebAssembly ã«ã³ã³ãã€ã«ããããã®äžè¬çãªããŒã«ãã§ãŒã³ã§ãã 颿°ããšã¯ã¹ããŒãããã«ã¯ãéåžžãEMSCRIPTEN_KEEPALIVE ãã¯ãã䜿çšããããEmscripten èšå®ã§ãšã¯ã¹ããŒããæå®ããŸãã
äŸïŒEMSCRIPTEN_KEEPALIVE ã䜿çšãã颿°ã®ãšã¯ã¹ããŒã
C ã³ãŒãïŒ
#include <emscripten.h>
EMSCRIPTEN_KEEPALIVE
int add(int a, int b) {
return a + b;
}
EMSCRIPTEN_KEEPALIVE
int multiply(int a, int b) {
return a * b;
}
ãã®äŸã§ã¯ãadd ããã³ multiply 颿°ã« EMSCRIPTEN_KEEPALIVE ãããŒã¯ãããŠãããEmscripten ã«ãšã¯ã¹ããŒããªããžã§ã¯ãã«å«ããããã«æç€ºããŠããŸãã
äŸïŒEmscripten èšå®ã䜿çšãã颿°ã®ãšã¯ã¹ããŒã
ã³ã³ãã€ã«äžã« -s EXPORTED_FUNCTIONS ãã©ã°ã䜿çšããŠãšã¯ã¹ããŒããæå®ããããšãã§ããŸãã
emcc add.c -o add.js -s EXPORTED_FUNCTIONS='[_add,_multiply]'
ãã®ã³ãã³ãã¯ãEmscripten ã«é¢æ° _add ãš `_multiply` ããšã¯ã¹ããŒãããããã«æç€ºããŸã (å
é ã®ã¢ã³ããŒã¹ã³ã¢ã«æ³šæããŠãã ããããã㯠Emscripten ã«ãã£ãŠè¿œå ãããããšããããããŸã)ã çµæã® JavaScript ãã¡ã€ã« (add.js) ã«ã¯ãWebAssembly ã¢ãžã¥ãŒã«ãããŒãããŠå¯Ÿè©±ããããã«å¿
èŠãªã³ãŒããå«ãŸããŠãããadd ããã³ multiply 颿°ã¯ãšã¯ã¹ããŒããªããžã§ã¯ããä»ããŠã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
wasm-pack ã䜿çšãã Rust
Rust ã¯ãWebAssembly éçºã«æé©ãªãã 1 ã€ã®èšèªã§ãã wasm-pack ããŒã«ã¯ãWebAssembly çšã® Rust ã³ãŒãã®ãã«ããšããã±ãŒãžã³ã°ã®ããã»ã¹ãç°¡çŽ åããŸãã
äŸïŒRust ã§ã®é¢æ°ã®ãšã¯ã¹ããŒã
Rust ã³ãŒãïŒ
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
a + b
}
#[no_mangle]
pub extern "C" fn multiply(a: i32, b: i32) -> i32 {
a * b
}
ãã®äŸã§ã¯ã#[no_mangle] 屿§ã¯ Rust ã³ã³ãã€ã©ã颿°åããã³ã°ã«ããã®ãé²ããpub extern "C" ã¯é¢æ°ã C äºæç°å¢ (WebAssembly ãå«ã) ããã¢ã¯ã»ã¹ã§ããããã«ããŸãã ãŸããCargo.toml ã« `wasm-bindgen` ã®äŸåé¢ä¿ã远å ããå¿
èŠããããŸãã
ããããã«ãããã«ã¯ã次ã䜿çšããŸãã
wasm-pack build
çµæã®ããã±ãŒãžã«ã¯ãWebAssembly ã¢ãžã¥ãŒã« (.wasm ãã¡ã€ã«) ãšãã¢ãžã¥ãŒã«ãšã®å¯Ÿè©±ã容æã«ãã JavaScript ãã¡ã€ã«ãå«ãŸããŸãã
AssemblyScript
AssemblyScript ã¯ãTypeScript ã«äŒŒãèšèªã§ãWebAssembly ã«çŽæ¥ã³ã³ãã€ã«ãããŸãã JavaScript éçºè ã«ãªãã¿ã®ããæ§æãæäŸããŸãã
äŸïŒAssemblyScript ã§ã®é¢æ°ã®ãšã¯ã¹ããŒã
AssemblyScript ã³ãŒãïŒ
export function add(a: i32, b: i32): i32 {
return a + b;
}
export function multiply(a: i32, b: i32): i32 {
return a * b;
}
AssemblyScript ã§ã¯ãexport ããŒã¯ãŒãã䜿çšããŠããšã¯ã¹ããŒããªããžã§ã¯ãã«å«ãã颿°ãæå®ããã ãã§ãã
ã³ã³ãã€ã«ïŒ
asc assembly/index.ts -b build/index.wasm -t build/index.wat
WebAssembly ãšã¯ã¹ããŒãã®çš®é¡
WebAssembly ã¢ãžã¥ãŒã«ã¯ã4 ã€ã®äž»èŠãªã¿ã€ãã®ãšã³ãã£ãã£ããšã¯ã¹ããŒãã§ããŸãã
- 颿°ïŒå®è¡å¯èœãªã³ãŒããããã¯ã
- ã¡ã¢ãªïŒWebAssembly ã¢ãžã¥ãŒã«ã§äœ¿çšãããç·åœ¢ã¡ã¢ãªã
- ããŒãã«ïŒé¢æ°åç §ã®é åã
- ã°ããŒãã«å€æ°ïŒå¯å€ãŸãã¯äžå€ã®ããŒã¿å€ã
颿°
ãšã¯ã¹ããŒãããã颿°ã¯ãæãäžè¬çãªã¿ã€ãã®ãšã¯ã¹ããŒãã§ãã JavaScript ã³ãŒãã WebAssembly ã¢ãžã¥ãŒã«å ã§å®çŸ©ããã颿°ãåŒã³åºãããšãã§ããŸãã
äŸ (JavaScript)ïŒãšã¯ã¹ããŒãããã颿°ã®åŒã³åºã
const wasm = await WebAssembly.instantiateStreaming(fetch('module.wasm'));
const add = wasm.instance.exports.add;
const result = add(5, 3); // result will be 8
console.log(result);
ã¡ã¢ãª
ã¡ã¢ãªããšã¯ã¹ããŒããããšãJavaScript ã WebAssembly ã¢ãžã¥ãŒã«ã®ç·åœ¢ã¡ã¢ãªã«çŽæ¥ã¢ã¯ã»ã¹ããŠæäœã§ããŸãã ããã¯ãJavaScript ãš WebAssembly éã§ããŒã¿ãå ±æããã®ã«åœ¹ç«ã¡ãŸãããã¡ã¢ãªç Žå£ãé¿ããããã«æ³šææ·±ã管çãå¿ èŠã§ãã
äŸ (JavaScript)ïŒãšã¯ã¹ããŒããããã¡ã¢ãªãžã®ã¢ã¯ã»ã¹
const wasm = await WebAssembly.instantiateStreaming(fetch('module.wasm'));
const memory = wasm.instance.exports.memory;
const buffer = new Uint8Array(memory.buffer);
// Write a value to memory
buffer[0] = 42;
// Read a value from memory
const value = buffer[0]; // value will be 42
console.log(value);
ããŒãã«
ããŒãã«ã¯ã颿°åç §ã®é åã§ãã ãããã¯ãWebAssembly ã§åçãã£ã¹ããããšé¢æ°ãã€ã³ã¿ãå®è£ ããããã«äœ¿çšãããŸãã ããŒãã«ããšã¯ã¹ããŒããããšãJavaScript ã¯ããŒãã«ãä»ããŠé¢æ°ã鿥çã«åŒã³åºãããšãã§ããŸãã
äŸ (JavaScript)ïŒãšã¯ã¹ããŒããããããŒãã«ãžã®ã¢ã¯ã»ã¹
const wasm = await WebAssembly.instantiateStreaming(fetch('module.wasm'));
const table = wasm.instance.exports.table;
// Assuming the table contains function references
const functionIndex = 0; // Index of the function in the table
const func = table.get(functionIndex);
// Call the function
const result = func(5, 3);
console.log(result);
ã°ããŒãã«å€æ°
ã°ããŒãã«å€æ°ããšã¯ã¹ããŒããããšãJavaScript 㯠WebAssembly ã¢ãžã¥ãŒã«ã§å®çŸ©ãããã°ããŒãã«å€æ°ã®å€ãèªã¿åã (倿°ãå¯å€ã®å Žå)ã倿Žã§ããŸãã
äŸ (JavaScript)ïŒãšã¯ã¹ããŒããããã°ããŒãã«å€æ°ãžã®ã¢ã¯ã»ã¹
const wasm = await WebAssembly.instantiateStreaming(fetch('module.wasm'));
const globalVar = wasm.instance.exports.globalVar;
// Read the value
const value = globalVar.value;
console.log(value);
// Modify the value (if mutable)
globalVar.value = 100;
WebAssembly ãšã¯ã¹ããŒãæ§æã®ãã¹ããã©ã¯ãã£ã¹
WebAssembly ãšã¯ã¹ããŒããæ§æãããšãã¯ãæé©ãªããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ãããã³ä¿å®æ§ã確ä¿ããããã«ããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãäžå¯æ¬ ã§ãã
ãšã¯ã¹ããŒããæå°éã«æãã
JavaScript ãšã®å¯Ÿè©±ã«çµ¶å¯Ÿã«å¿ èŠãªé¢æ°ãšããŒã¿ã®ã¿ããšã¯ã¹ããŒãããŸãã éå°ãªãšã¯ã¹ããŒãã¯ããšã¯ã¹ããŒããªããžã§ã¯ãã®ãµã€ãºã倧ããããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
å¹ççãªããŒã¿æ§é ã䜿çšãã
JavaScript ãš WebAssembly éã§ããŒã¿ãå
±æããå Žåã¯ãããŒã¿å€æã®ãªãŒããŒããããæå°éã«æããå¹ççãªããŒã¿æ§é ã䜿çšããŸãã æé©ãªããã©ãŒãã³ã¹ãåŸãã«ã¯ãåä»ãé
å (Uint8ArrayãFloat32Array ãªã©) ãæ€èšããŠãã ããã
å ¥åºåã®æ€èšŒ
äºæããªãåäœãæœåšçãªã»ãã¥ãªãã£ã®è匱æ§ãé²ãããã«ãWebAssembly 颿°ã®å ¥åºåã¯åžžã«æ€èšŒããŠãã ããã ããã¯ãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãæ±ãå Žåã«ç¹ã«éèŠã§ãã
ã¡ã¢ãªãæ éã«ç®¡çãã
ã¡ã¢ãªããšã¯ã¹ããŒãããå Žåã¯ãJavaScript ãã©ã®ããã«ã¢ã¯ã»ã¹ããæäœãããã«ã€ããŠéåžžã«æ³šæããŠãã ããã äžé©åãªã¡ã¢ãªã¢ã¯ã»ã¹ã¯ãã¡ã¢ãªç Žå£ãã¯ã©ãã·ã¥ã«ã€ãªããå¯èœæ§ããããŸãã ã¡ã¢ãªã¢ã¯ã»ã¹ãå¶åŸ¡ãããæ¹æ³ã§ç®¡çããã«ã¯ãWebAssembly ã¢ãžã¥ãŒã«å ã§ãã«ããŒé¢æ°ã䜿çšããããšãæ€èšããŠãã ããã
å¯èœãªéãçŽæ¥çãªã¡ã¢ãªã¢ã¯ã»ã¹ãé¿ãã
çŽæ¥çãªã¡ã¢ãªã¢ã¯ã»ã¹ã¯å¹ççã§ããå¯èœæ§ããããŸãããè€éããæœåšçãªãªã¹ã¯ããããããŸãã ã³ãŒãã®ä¿å®æ§ãåäžããããšã©ãŒã®ãªã¹ã¯ãæžããããã«ãã¡ã¢ãªã¢ã¯ã»ã¹ãã«ãã»ã«åãã颿°ãªã©ã®é«ã¬ãã«ã®æœè±¡åã䜿çšããããšãæ€èšããŠãã ããã ããšãã°ãJavaScript ããããã¡ãçŽæ¥æäœããã®ã§ã¯ãªããWebAssembly 颿°ã䜿çšããŠããã®ã¡ã¢ãªç©ºéå ã®ç¹å®ã®å Žæã§å€ãååŸããã³èšå®ããããšãã§ããŸãã
ã¿ã¹ã¯ã«é©ããèšèªãéžæãã
WebAssembly ã§å®è¡ããŠããç¹å®ã®ã¿ã¹ã¯ã«æé©ãªããã°ã©ãã³ã°èšèªãéžæããŸãã èšç®è² è·ã®é«ãã¿ã¹ã¯ã«ã¯ãCãC++ããŸã㯠Rust ãé©ããŠããŸãã JavaScript ãšã®ç·å¯ãªçµ±åãå¿ èŠãªã¿ã¹ã¯ã«ã¯ãAssemblyScript ãããé©ããŠããå ŽåããããŸãã
ã»ãã¥ãªãã£ãžã®åœ±é¿ãèæ ®ãã
ç¹å®ã®çš®é¡ã®ããŒã¿ãŸãã¯æ©èœããšã¯ã¹ããŒãããããšã®ã»ãã¥ãªãã£ãžã®åœ±é¿ã«æ³šæããŠãã ããã ããšãã°ãã¡ã¢ãªãçŽæ¥ãšã¯ã¹ããŒããããšãæ éã«åŠçããªããšãWebAssembly ã¢ãžã¥ãŒã«ãæœåšçãªãããã¡ãªãŒããŒãããŒæ»æã«ãããããå¯èœæ§ããããŸãã 絶察ã«å¿ èŠãªå Žåãé€ããæ©å¯ããŒã¿ããšã¯ã¹ããŒãããªãã§ãã ããã
é«åºŠãªãã¯ããã¯
å ±æã¡ã¢ãªã« `SharedArrayBuffer` ã䜿çšãã
SharedArrayBuffer ã䜿çšãããšãJavaScript ãšè€æ°ã® WebAssembly ã€ã³ã¹ã¿ã³ã¹ (ãŸãã¯è€æ°ã®ã¹ã¬ãã) éã§å
±æã§ããã¡ã¢ãªãããã¡ãäœæã§ããŸãã ããã¯ã䞊åèšç®ãšå
±æããŒã¿æ§é ãå®è£
ããã®ã«åœ¹ç«ã¡ãŸãã
äŸ (JavaScript)ïŒSharedArrayBuffer ã®äœ¿çš
// Create a SharedArrayBuffer
const sharedBuffer = new SharedArrayBuffer(1024);
// Instantiate a WebAssembly module with the shared buffer
const wasm = await WebAssembly.instantiateStreaming(fetch('module.wasm'), {
env: {
memory: new WebAssembly.Memory({ shared: true, initial: 1024, maximum: 1024 }),
},
});
// Access the shared buffer from JavaScript
const buffer = new Uint8Array(sharedBuffer);
// Access the shared buffer from WebAssembly (requires specific configuration)
// (e.g., using atomics for synchronization)
éèŠïŒSharedArrayBuffer ã䜿çšããã«ã¯ãè€æ°ã®ã¹ã¬ãããŸãã¯ã€ã³ã¹ã¿ã³ã¹ããããã¡ã«åæã«ã¢ã¯ã»ã¹ããå Žåã®ç«¶åç¶æ
ãé²ãããã«ãé©åãªåæã¡ã«ããºã (ã¢ãããã¯ãªã©) ãå¿
èŠã§ãã
éåææäœ
WebAssembly å
ã®é·æéå®è¡ãŸãã¯ãããã¯æäœã®å Žåã¯ãã¡ã€ã³ JavaScript ã¹ã¬ããããããã¯ããªãããã«ãéåæææ³ã䜿çšããããšãæ€èšããŠãã ããã ããã¯ãEmscripten ã® Asyncify æ©èœã䜿çšããããPromise ãŸãã¯ã³ãŒã«ããã¯ã䜿çšããŠã«ã¹ã¿ã ã®éåæã¡ã«ããºã ãå®è£
ããããšã§å®çŸã§ããŸãã
ã¡ã¢ãªç®¡çæŠç¥
WebAssembly ã«ã¯ãçµã¿èŸŒã¿ã®ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¯ãããŸããã ç¹ã«ãããè€éãªããã°ã©ã ã®å Žåã¯ãã¡ã¢ãªãæåã§ç®¡çããå¿ èŠããããŸãã ããã«ã¯ãWebAssembly ã¢ãžã¥ãŒã«å ã§ã«ã¹ã¿ã ã¡ã¢ãªã¢ãã±ãŒã¿ã䜿çšããããå€éšã¡ã¢ãªç®¡çã©ã€ãã©ãªã«äŸåããããšãå«ãŸããŸãã
ã¹ããªãŒãã³ã°ã³ã³ãã€ã«
WebAssembly.instantiateStreaming ã䜿çšããŠããã€ãã¹ããªãŒã ããçŽæ¥ WebAssembly ã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããŠã€ã³ã¹ã¿ã³ã¹åããŸãã ããã«ããããã©ãŠã¶ããã¡ã€ã«å
šäœãããŠã³ããŒãããåã«ã¢ãžã¥ãŒã«ã®ã³ã³ãã€ã«ãéå§ã§ãããããèµ·åæéãççž®ã§ããŸãã ããã¯ãã¢ãžã¥ãŒã«ãããŒãããããã®æšå¥šãããæ¹æ³ãšãªã£ãŠããŸãã
ããã©ãŒãã³ã¹ã®æé©å
é©åãªããŒã¿æ§é ãã¢ã«ãŽãªãºã ãããã³ã³ã³ãã€ã©ãã©ã°ã䜿çšããŠãWebAssembly ã³ãŒãã®ããã©ãŒãã³ã¹ãæé©åããŸãã ã³ãŒãããããã¡ã€ã«ããŠããã«ããã¯ãç¹å®ããããã«å¿ããŠæé©åããŸãã 䞊ååŠçã«ã¯ãSIMD (Single Instruction, Multiple Data) åœä»€ã®äœ¿çšãæ€èšããŠãã ããã
å®éã®äŸãšäœ¿çšäºäŸ
WebAssembly ã¯ã以äžãå«ãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããŸãã
- ã²ãŒã ïŒæ¢åã®ã²ãŒã ã Web ã«ç§»æ€ããæ°ãã髿§èœ Web ã²ãŒã ãäœæããŸãã
- ç»åãšãããªã®åŠçïŒãã©ãŠã¶ã§è€éãªç»åãšãããªã®åŠçã¿ã¹ã¯ãå®è¡ããŸãã
- ç§åŠèšç®ïŒãã©ãŠã¶ã§èšç®éçŽåã®ã·ãã¥ã¬ãŒã·ã§ã³ãšããŒã¿åæã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
- æå·åïŒæå·åã¢ã«ãŽãªãºã ãšãããã³ã«ãå®å šã§ç§»æ€å¯èœãªæ¹æ³ã§å®è£ ããŸãã
- ã³ãŒããã¯ïŒãããªããªãŒãã£ãªã®ãšã³ã³ãŒããšãã³ãŒããªã©ãã¡ãã£ã¢ã³ãŒããã¯ãšãã©ãŠã¶å ã§ã®å§çž®/è§£åãåŠçããŸãã
- ä»®æ³ãã·ã³ïŒä»®æ³ãã·ã³ãå®å šãã€é«æ§èœãªæ¹æ³ã§å®è£ ããŸãã
- ãµãŒããŒåŽã®ã¢ããªã±ãŒã·ã§ã³ïŒäž»ãªäœ¿çšæ³ã¯ãã©ãŠã¶ã§ãããWASM ã¯ãµãŒããŒåŽã®ç°å¢ã§ã䜿çšã§ããŸãã
äŸïŒWebAssembly ã䜿çšããç»ååŠç
Web ããŒã¹ã®ç»åãšãã£ã¿ãæ§ç¯ããŠãããšããŸãã WebAssembly ã䜿çšããŠãç»åãã£ã«ã¿ãªã³ã°ããµã€ãºå€æŽãè²æäœãªã©ãããã©ãŒãã³ã¹ãéèŠãšãªãç»ååŠçæäœãå®è£ ã§ããŸãã WebAssembly ã¢ãžã¥ãŒã«ã¯ãç»åããŒã¿ãå ¥åãšããŠåãåããåŠçãããç»åããŒã¿ãåºåãšããŠè¿ã颿°ããšã¯ã¹ããŒãã§ããŸãã ããã«ãããJavaScript ããã®è² è·ã軜æžãããããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåŸãããŸãã
äŸïŒWebAssembly ã䜿çšããã²ãŒã éçº
å€ãã®ã²ãŒã éçºè ããWebAssembly ã䜿çšããŠæ¢åã®ã²ãŒã ã Web ã«ç§»æ€ããããæ°ãã髿§èœ Web ã²ãŒã ãäœæãããããŠããŸãã WebAssembly ã䜿çšãããšããã€ãã£ãã«è¿ãããã©ãŒãã³ã¹ãå®çŸã§ãããããè€é㪠3D ã°ã©ãã£ãã¯ã¹ãšç©çã·ãã¥ã¬ãŒã·ã§ã³ããã©ãŠã¶ã§å®è¡ã§ããŸãã Unity ã Unreal Engine ãªã©ã®äžè¬çãªã²ãŒã ãšã³ãžã³ã¯ãWebAssembly ãšã¯ã¹ããŒãããµããŒãããŠããŸãã
çµè«
WebAssembly ãšã¯ã¹ããŒããªããžã§ã¯ãã¯ãWebAssembly ã¢ãžã¥ãŒã«ãš JavaScript ã³ãŒãéã®éä¿¡ãšå¯Ÿè©±ãå¯èœã«ããããã®éèŠãªã¡ã«ããºã ã§ãã ã¢ãžã¥ãŒã«ãšã¯ã¹ããŒããæ§æããããŸããŸãªãšã¯ã¹ããŒãã¿ã€ãã管çãããã¹ããã©ã¯ãã£ã¹ã«åŸãæ¹æ³ãçè§£ããããšã«ãããéçºè 㯠WebAssembly ã®åãæŽ»çšããå¹ççã§å®å šããã€ä¿å®æ§ã®é«ã Web ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã WebAssembly ãé²åãç¶ããã«ã€ããŠããã®ãšã¯ã¹ããŒãæ©èœãç¿åŸããããšã¯ã驿°çã§é«æ§èœãª Web ãšã¯ã¹ããªãšã³ã¹ãäœæããããã«äžå¯æ¬ ã«ãªããŸãã
ãã®ã¬ã€ãã§ã¯ãåºæ¬çãªæŠå¿µããé«åºŠãªãã¯ããã¯ãŸã§ãWebAssembly ãšã¯ã¹ããŒããªããžã§ã¯ãã®å æ¬çãªæŠèŠãæäŸããŸããã ãã®ã¬ã€ãã§æŠèª¬ãããŠããç¥èãšãã¹ããã©ã¯ãã£ã¹ãé©çšããããšã«ãããWeb éçºãããžã§ã¯ãã§ WebAssembly ã广çã«å©çšãããã®å¯èœæ§ãæå€§éã«åŒãåºãããšãã§ããŸãã