WebAssembly ã®ãã«ãããªã¥ãŒãªã¿ãŒã³æ©èœãšãã®æé©åãæ¢æ±ããäžçäžã®ã¢ããªã±ãŒã·ã§ã³ã®é¢æ°ã€ã³ã¿ãŒãã§ãŒã¹ãšããã©ãŒãã³ã¹ãåäžãããŸãã
WebAssembly ã®ãã«ãããªã¥ãŒãªã¿ãŒã³æé©å: 颿°ã€ã³ã¿ãŒãã§ãŒã¹ã®åŒ·å
WebAssembly (Wasm) ã¯ãã¢ãã³ãŠã§ããªã©ã«ãããŠæ¥éã«äžå¯æ¬ ãªæè¡ãšãªã£ãŠããŸããããŸããŸãªãã©ãããã©ãŒã ã§ã³ãŒããå¹ççã«å®è¡ã§ããèœåã¯ãäžçäžã®éçºè ã«ãšã£ãŠæ°ããªå¯èœæ§ãåãéããŸããã Wasm ã®é²åã«ãããéèŠãªåŽé¢ã® 1 ã€ã¯ã颿°ã€ã³ã¿ãŒãã§ãŒã¹ã®æé©åã§ããããã®åéã«ããã倧ããªé²æ©ã¯ãã«ãããªã¥ãŒãªã¿ãŒã³æ©èœã§ãã ãã®ããã°èšäºã§ã¯ããã®æ©èœã«ã€ããŠæãäžããããå¹ççã§é«æ§èœãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«çŠç¹ãåœãŠãäžçäžã®éçºè ãžã®åœ±é¿ãšã¡ãªãããæ¢ããŸãã
WebAssembly ãšãã®åœ¹å²ã®çè§£
WebAssembly ã¯ãã¹ã¿ãã¯ããŒã¹ã®ä»®æ³ãã·ã³åãã«èšèšããããã€ããªåœä»€åœ¢åŒã§ãã ãŠã§ãããã®ä»ã®ç°å¢ãžã®ãããã€ãå¯èœã«ãããç§»æ€å¯èœãªã³ã³ãã€ã«å¯Ÿè±¡ãšããŠæå³ãããŠããŸãã Wasm ã¯ãé«éã§å¹ççãã€å®å šãªå®è¡ç°å¢ãæäŸãããã€ãã£ãã«è¿ãé床ã§å®è¡ããããšãç®çãšããŠããŸãã ããã«ãããã€ã³ã¿ã©ã¯ãã£ã㪠Web ã¢ããªã±ãŒã·ã§ã³ãããµãŒããŒåŽã®ããã°ã©ã ãããã«ã¯çµã¿èŸŒã¿ã·ã¹ãã ãŸã§ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã ãã®å¹ åºãæ¡çšã¯ããã®é©å¿æ§ãšæå¹æ§ãéç«ãããŠããŸãã
Wasm ã®ã³ã¢èšèšååã«ã¯ã以äžãå«ãŸããŸã:
- ç§»æ€æ§: ããŸããŸãªãã©ãããã©ãŒã ããã©ãŠã¶ã§å®è¡ã
- å¹çæ§: ãã€ãã£ãã³ãŒãã«è¿ãããã©ãŒãã³ã¹ãæäŸã
- å®å šæ§: å®å šãªå®è¡ç°å¢ã
- ãªãŒãã³ã¹ã¿ã³ããŒã: ç¶ç¶çãªé²åãéããã³ãã¥ããã£ã«ãã£ãŠç¶æãããŠããŸãã
Wasm ã«ããã颿°ã€ã³ã¿ãŒãã§ãŒã¹ã®éèŠæ§
颿°ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãããã°ã©ã ã®ããŸããŸãªéšåãçžäºäœçšããããšãå¯èœã«ããã²ãŒããŠã§ã€ã§ãã ããŒã¿ã®é¢æ°ãžã®åãæž¡ãæ¹æ³ãšé¢æ°ããã®åãæž¡ãæ¹æ³ãå®çŸ©ããããã°ã©ã ã®å¹çãšèšèšã«ãšã£ãŠéèŠã§ãã Wasm ã®ã³ã³ããã¹ãã§ã¯ã颿°ã€ã³ã¿ãŒãã§ãŒã¹ã¯å šäœçãªããã©ãŒãã³ã¹ã«çŽæ¥åœ±é¿ãããããéåžžã«éèŠã§ãã ãããã®ã€ã³ã¿ãŒãã§ãŒã¹ãæé©åããããšã¯ãããå¹ççãªããŒã¿ãããŒãšæçµçã«ã¯ãããå¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãå¯èœã«ãããããã©ãŒãã³ã¹åäžã®ããã®äž»èŠãªã¿ãŒã²ããã§ãã
åŸæ¥ã®å¶éãèæ ®ããŠãã ããã ãã«ãããªã¥ãŒãªã¿ãŒã³ã®åã¯ãWasm ã®é¢æ°ã¯éåžžãåäžã®å€ãè¿ããŠããŸããã 颿°ãè€æ°ã®å€ãè¿ãå¿ èŠããã£ãå Žåãããã°ã©ããŒã¯æ¬¡ã®ãããªåé¿çã䜿çšããããåŸãŸããã§ãã:
- æ§é äœãŸãã¯ãªããžã§ã¯ãã®è¿åŽ: è€æ°ã®æ»ãå€ãä¿æããããã®è€åããŒã¿æ§é ãäœæããããšãå«ãŸããå²ãåœãŠãã³ããŒãããã³å²ãåœãŠè§£é€æäœãå¿ èŠãšãªãããªãŒããŒãããã远å ãããŸãã
- ã¢ãŠããã©ã¡ãŒã¿ã®äœ¿çš: ãã©ã¡ãŒã¿ãšããŠæž¡ãããããŒã¿ã倿Žããããã«ãå¯å€ãã€ã³ã¿ã颿°ã«æž¡ããŸãã ããã«ããã颿°ã·ã°ããã£ãè€éã«ãªããæœåšçãªã¡ã¢ãªç®¡çã®åé¡ãçºçããå¯èœæ§ããããŸãã
ãã«ãããªã¥ãŒãªã¿ãŒã³: ã²ãŒã ãã§ã³ãžã£ãŒ
Wasm ã®ãã«ãããªã¥ãŒãªã¿ãŒã³æ©èœã¯ã颿°ã€ã³ã¿ãŒãã§ãŒã¹ã«é©åœãèµ·ãããŸãã åé¿çã«é ŒãããšãªããWasm 颿°ãè€æ°ã®å€ãçŽæ¥è¿ãããšãã§ããŸãã ããã«ãããç¹ã«è€æ°ã®å€ãèšç®ã®äžéšãšããŠè¿ãå¿ èŠãããå Žåã«ãWasm ã¢ãžã¥ãŒã«ã®å¹çãšããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã ãã€ãã£ãã³ãŒãã®åäœãåæ ããè€æ°ã®å€ãã¬ãžã¹ã¿ãä»ããŠå¹ççã«è¿ãããŸãã
ä»çµã¿: ãã«ãããªã¥ãŒãªã¿ãŒã³ã䜿çšãããšãWasm ã©ã³ã¿ã€ã ã¯è€æ°ã®å€ãçŽæ¥è¿ãããšãã§ããå€ãã®å Žåãã¬ãžã¹ã¿ãŸãã¯ããå¹ççãªã¹ã¿ãã¯ããŒã¹ã®ã¡ã«ããºã ã䜿çšããŸãã ããã«ãããè€åããŒã¿æ§é ã®äœæãšç®¡çããŸãã¯å¯å€ãã€ã³ã¿ã®äœ¿çšã«é¢é£ãããªãŒããŒããããåé¿ãããŸãã
å©ç¹:
- ããã©ãŒãã³ã¹ã®åäž: ã¡ã¢ãªã®å²ãåœãŠãšå²ãåœãŠè§£é€æäœãåæžãããå®è¡ãé«éåãããŸãã
- ã³ãŒãã®ç°¡çŽ å: ããã¯ãªãŒã³ãªé¢æ°ã·ã°ããã£ãšè€éãã®è»œæžã
- ããåªããçžäºéçšæ§: è€éãªããŒã·ã£ãªã³ã°æäœãå¿ èŠãšããã«è€æ°ã®å€ãæž¡ãããšãã§ããããããã¹ãç°å¢ãšã®çµ±åãç°¡çŽ åãããŸãã
- æé©åãããã³ã³ãã€ã©ã®ãµããŒã: Emscripten ãªã©ã®ã³ã³ãã€ã©ã¯ããã«ãããªã¥ãŒãªã¿ãŒã³ã·ããªãªåãã«ããã广çã«æé©åãããã³ãŒããçæã§ããŸãã
詳现: æè¡çãªåŽé¢ãšå®è£
Wasm ã¬ãã«ã§ã®å®è£ : Wasm ãã€ããªåœ¢åŒãšä»®æ³ãã·ã³èšèšã«ã¯ããã«ãããªã¥ãŒãªã¿ãŒã³ããµããŒãããããã®ç¹å®ã®æ©èœãå«ãŸããŠããŸãã ã¢ãžã¥ãŒã«ã®åã»ã¯ã·ã§ã³ã®é¢æ°åã·ã°ããã£ã®æ§é ã«ãããè€æ°ã®æ»ãåãå®çŸ©ã§ããŸãã ããã«ãããWasm ã€ã³ã¿ãŒããªã¿ãŸãã¯ã³ã³ãã€ã©ã¯ãåè¿°ã®åé¿çãå¿ èŠãšããã«ãæ»ãå€ã广çã«çŽæ¥ç®¡çã§ããŸãã
ã³ã³ãã€ã©ã®ãµããŒã: Emscripten (C/C++ ã Wasm ã«ã³ã³ãã€ã«ãããã)ãRust (Wasm ã¿ãŒã²ããçµç±)ãAssemblyScript (TypeScript ã«äŒŒãèšèªã§ãWasm ã«ã³ã³ãã€ã«ãããŸã) ãªã©ã®ã³ã³ãã€ã©ã¯ããã«ãããªã¥ãŒãªã¿ãŒã³ã®ãµããŒããçµ±åããŠããŸãã ãããã®ã³ã³ãã€ã©ã¯ãèšèªæ§é ãæé©åããã Wasm åœä»€ã«èªåçã«å€æããŸãã
äŸ: Emscripten ã䜿çšãã C/C++
2 ã€ã®æ°å€ã®åèšãšå·®ãèšç®ãã C/C++ 颿°ãèããŠã¿ãŸããã:
#include <stdio.h>
//Function returning multiple values as a struct (before multi-value return)
struct SumDiff {
int sum;
int diff;
};
struct SumDiff calculate(int a, int b) {
struct SumDiff result;
result.sum = a + b;
result.diff = a - b;
return result;
}
//Function returning multiple values (with multi-value return, using Emscripten)
void calculateMV(int a, int b, int* sum, int* diff) {
*sum = a + b;
*diff = a - b;
}
// or, directly return from the multi-value function
// Example using multiple return from a function
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int a = 10, b = 5;
int sum = 0, diff = 0;
calculateMV(a, b, &sum, &diff);
printf("Sum: %d, Difference: %d\n", sum, diff);
int result_add = add(a,b);
int result_sub = subtract(a,b);
printf("add result: %d, subtract result: %d\n", result_add, result_sub);
return 0;
}
Emscripten ã§ã³ã³ãã€ã«ãããš (ãã«ãããªã¥ãŒãªã¿ãŒã³ãµããŒããæå¹ã«ããé©åãªãã©ã°ã䜿çš)ãã³ã³ãã€ã©ã¯ãã«ãããªã¥ãŒãªã¿ãŒã³ã¡ã«ããºã ã䜿çšããããã«ã³ãŒããæé©åããããå¹çç㪠Wasm ã³ãŒãã«ãªããŸãã
å®è·µçãªäŸãšã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³
ãã«ãããªã¥ãŒãªã¿ãŒã³ã¯ãè€æ°ã®é¢é£å€ãè¿ãå¿ èŠãããã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãã æ¬¡ã®äŸãèããŠã¿ãŸããã:
- ç»ååŠç: åŠçãããç»åããŒã¿ãšã¡ã¿ããŒã¿ (ããšãã°ãç»åã®å¹ ãé«ãããã©ãŒããã) ã®äž¡æ¹ãè¿ã颿°ã ããã¯ã髿§èœãª Web ããŒã¹ã®ç»åç·šéããŒã«ãäœæããéã«ç¹ã«äŸ¡å€ããããŸãã
- ã²ãŒã éçº: è¡çªåŸã®ã²ãŒã ãªããžã§ã¯ãã®æ°ããäœçœ®ãšé床ã®äž¡æ¹ãè¿ããªã©ãç©çãšã³ãžã³ãå«ãèšç®ã ãã®æé©åã¯ãäžçäžã®ãã©ãããã©ãŒã ã§ã®ã¹ã ãŒãºã§å¿çæ§ã®é«ãã²ãŒã ãã¬ã€ã«ãšã£ãŠéèŠã§ãã
- ç§åŠèšç®: è¡åå æ°åè§£ã®çµæãçµ±èšåæã®åºåãªã©ãè€æ°ã®çµæãè¿ãæ°å€ã¢ã«ãŽãªãºã ã ããã«ãããäžçäžã®ç ç©¶è ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã
- è§£æ: ããŒã¿åœ¢åŒãè§£æããã©ã€ãã©ãªã¯ãè§£æãããå€ãšè§£æã®æåãŸãã¯å€±æã®è¡šç€ºãé »ç¹ã«è¿ãå¿ èŠããããŸãã ããã¯ããã¹ãŠã®å€§éžã®éçºè ã«åœ±é¿ãäžããŸãã
- 財åã¢ããªã³ã°: ãã³ãã³ããã¥ãŒãšãŒã¯ãæ±äº¬ãªã©ã®éèããã®å°éå®¶ã䜿çšããã財åã¢ãã«ã§çŸåšäŸ¡å€ãå°æ¥äŸ¡å€ãããã³å éšåççãåæã«èšç®ããããšã
äŸ: Rust ãš Wasm ã䜿çšããç»ååŠç
Rust 颿°ãåçŽãªç»åãã£ã«ã¿ãå®è¡ããæ°ããç»åããŒã¿ãšãã®å¯žæ³ãè¿ãå¿ èŠããããšããŸãããã ãã«ãããªã¥ãŒãªã¿ãŒã³ã䜿çšãããšããããå¹ççã«åŠçã§ããŸã:
// Rust code using the image crate and multi-value return.
// The image crate is a popular choice among rust developers.
use image::{GenericImageView, DynamicImage};
// Define a struct (optional) to return the data
struct ImageResult {
data: Vec<u8>,
width: u32,
height: u32,
}
#[no_mangle]
pub extern "C" fn apply_grayscale(image_data: *const u8, width: u32, height: u32) -> (*mut u8, u32, u32) {
// Convert raw image data
let image = image::load_from_memory_with_format(unsafe { std::slice::from_raw_parts(image_data, (width * height * 4) as usize)}, image::ImageFormat::Png).unwrap();
// Apply grayscale
let gray_image = image.to_luma8();
// Get image data as bytes
let mut data = gray_image.into_raw();
// Return data as a raw pointer
let ptr = data.as_mut_ptr();
(ptr, width, height)
}
ãã®äŸã§ã¯ã`apply_grayscale` 颿°ã¯ç»åããŒã¿ãšå¯žæ³ãå ¥åãšããŠåãåããŸãã æ¬¡ã«ç»åãåŠçããã°ã¬ãŒã¹ã±ãŒã«ã«å€æããåŠçãããããŒã¿ãå¹ ãé«ããçŽæ¥è¿ããŸããããã«ãããåå¥ã®å²ãåœãŠãæ§é äœãå¿ èŠãšããªãããã«ãªããŸãã ãã®ããã©ãŒãã³ã¹ã®åäžã¯ãã¯ã©ã€ã¢ã³ãåŽ (ãã©ãŠã¶) ããã³ãµãŒããŒåŽ (Web ãµãŒããŒãç»åã³ã³ãã³ããæäŸããå Žå) ã§æ³šç®ã«å€ããŸãã
ããã©ãŒãã³ã¹ãã³ãããŒã¯ãšå®éã®ã€ã³ãã¯ã
ãã«ãããªã¥ãŒãªã¿ãŒã³ã®å©ç¹ã¯ããã³ãããŒã¯ãéããŠæãããå®éåãããŸãã ããã©ãŒãã³ã¹ã®åäžã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠç°ãªããŸããããã¹ãã§ã¯éåžžãæ¬¡ã®åŸåãèŠãããŸã:
- ã¡ã¢ãªå²ãåœãŠã®åæž: `malloc` ãŸãã¯åæ§ã®ã¡ã¢ãªã¢ãã±ãŒã¿ãžã®åŒã³åºããæžå°ããŸããã
- å®è¡æéã®é«éå: è€æ°ã®å€ãè¿ããã颿°ã®å€§å¹ ãªé«éåã
- å¿çæ§ã®åäž: ããé«éãªèšç®ã®æ©æµãåãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯ãããæ©æã«æããããã§ãããã
ãã³ãããŒã¯ææ³:
- æšæºçãªãã³ãããŒã¯ããŒã«: å®è¡æéãæž¬å®ããã«ã¯ã`wasm-bench` ãªã©ã®ããŒã«ãŸãã¯ã«ã¹ã¿ã ãã³ãããŒã¯ã¹ã€ãŒãã䜿çšããŸãã
- å®è£ ã®æ¯èŒ: ãã«ãããªã¥ãŒãªã¿ãŒã³ã䜿çšããã³ãŒãã®ããã©ãŒãã³ã¹ããæ§é äœãè¿ãããã¢ãŠããã©ã¡ãŒã¿ã䜿çšããã³ãŒããšæ¯èŒããŸãã
- å®éã®ã·ããªãª: æé©åã®å®å šãªåœ±é¿ãåŸãããã«ãçŸå®çãªäœ¿çšã·ããªãªã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŸãã
å®éã®äŸ: GoogleãMozilla ãªã©ã®äŒæ¥ã¯ãWasm ã§ãã«ãããªã¥ãŒãªã¿ãŒã³ã掻çšããããšã«ãããWeb ã¢ããªã±ãŒã·ã§ã³ã®å€§å¹ ãªæ¹åãå®çŸããŠããŸãã ãããã®ããã©ãŒãã³ã¹åäžã¯ãç¹ã«ã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã«ãããŠãŒã¶ãŒã«ãšã£ãŠãããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
課é¡ãšä»åŸã®ãã¬ã³ã
ãã«ãããªã¥ãŒãªã¿ãŒã³ã¯å€§å¹ ãªæ¹åããããããŸãããæ¹åãšä»åŸã®éçºã®äœå°ããŸã ãããŸã:
- ã³ã³ãã€ã©ã®ãµããŒã: Wasm ã«ã³ã³ãã€ã«ããããã¹ãŠã®èšèªã§ããã«ãããªã¥ãŒãªã¿ãŒã³ã®ã³ã³ãã€ã©ã®æé©åãšã³ãŒãçæãæ¹åããŸãã
- ãããã°ããŒã«: ãã«ãããªã¥ãŒãªã¿ãŒã³ã³ãŒããããé©åã«ãµããŒãããããã«ããããã°ããŒã«ã匷åããŸãã ããã«ã¯ããããã°åºåãšãè¿ãããå€ãç°¡åã«æ€æ»ããæ©èœãå«ãŸããŸãã
- æšæºåãšæ¡çš: ããŸããŸãª Wasm ã©ã³ã¿ã€ã ãšãã©ãŠã¶ã§ãã«ãããªã¥ãŒãªã¿ãŒã³ãæšæºåããå®å šã«å®è£ ããããã®ç¶ç¶çãªäœæ¥ãè¡ãããã¹ãŠã®ç°å¢å šäœã§ã®äºææ§ã確ä¿ããŸãã
ä»åŸã®ãã¬ã³ã:
- ä»ã® Wasm æ©èœãšã®çµ±å: SIMD åœä»€ãªã©ãWasm ã®ãã®ä»ã®ããã©ãŒãã³ã¹åäžæ©èœãšã®ãã«ãããªã¥ãŒãªã¿ãŒã³ã®çµ±åã«ãããããã«å¹çãé«ããããšãã§ããŸãã
- WebAssembly ã·ã¹ãã ã€ã³ã¿ãŒãã§ãŒã¹ (WASI): ãµãŒããŒåŽã®ã¢ããªã±ãŒã·ã§ã³ã容æã«ããããã«ãWASI ãšã³ã·ã¹ãã å ã§ã®ãã«ãããªã¥ãŒãªã¿ãŒã³ã®å®å šãªãµããŒãã
- ããŒã«ã®ã¢ããã³ã¹: éçºè ããã«ãããªã¥ãŒãªã¿ãŒã³ã³ãŒãã广çã«å©çšãããã©ãã«ã·ã¥ãŒãã£ã³ã°ã§ããããã«ãããæŽç·Žããããããã¬ããããã¡ã€ã©ãªã©ãããåªããããŒã«ã®éçºã
çµè«: ã°ããŒãã«ãªèŽè¡åãã®é¢æ°ã€ã³ã¿ãŒãã§ãŒã¹ã®åŒ·å
WebAssembly ã®ãã«ãããªã¥ãŒãªã¿ãŒã³æ©èœã¯ãWeb ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšå¹çãåäžãããããã®éèŠãªã¹ãããã§ãã 颿°ãè€æ°ã®å€ãçŽæ¥è¿ãããšãã§ããããã«ããããšã§ãéçºè ã¯ãããé«éã«å®è¡ããããããã¯ãªãŒã³ã§æé©åãããã³ãŒããèšè¿°ã§ããŸãã å©ç¹ã«ã¯ãã¡ã¢ãªå²ãåœãŠã®åæžãå®è¡é床ã®åäžãã³ãŒãã®ç°¡çŽ åãå«ãŸããŸãã ããã¯ãäžçäžã®ããã€ã¹ãšãããã¯ãŒã¯ã§ã® Web ã¢ããªã®å¿çæ§ãšããã©ãŒãã³ã¹ãåäžããããããã°ããŒãã«ãªèŽè¡ã«ãšã£ãŠç¹ã«åœ¹ç«ã¡ãŸãã
ã³ã³ãã€ã©ã®ãµããŒããæšæºåãããã³ãã®ä»ã® Wasm æ©èœãšã®çµ±åã®ç¶ç¶çãªé²æ©ã«ããããã«ãããªã¥ãŒãªã¿ãŒã³ã¯ Wasm ã®é²åã«ãããŠäžå¿çãªåœ¹å²ãæããç¶ããã§ãããã éçºè ã¯ãã®æ©èœãåãå ¥ããå¿ èŠããããŸããããã«ãããäžçäžã®ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããããé«éã§å¹ççãªã¢ããªã±ãŒã·ã§ã³ãäœæããããã®éãéãããããã§ãã
ãã«ãããªã¥ãŒãªã¿ãŒã³ãçè§£ããæ¡çšããããšã§ãéçºè 㯠WebAssembly ã¢ããªã±ãŒã·ã§ã³ã®æ°ããã¬ãã«ã®ããã©ãŒãã³ã¹ãè§£ãæŸã¡ãäžçäžã®ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããããšãã§ããŸãã
ãã®ãã¯ãããžãŒã¯ã次ã®ãããªå Žæã§äžçäžã§æ¡çšãããŠããŸã:
- åç±³ãGoogle ã Microsoft ãªã©ã®äŒæ¥ãå€é¡ã®æè³ãè¡ã£ãŠããŸãã
- ãšãŒããããæ¬§å·é£åã Wasm ã䜿çšããã€ãã·ã¢ãããæ¯æŽããŠããŸãã
- ã¢ãžã¢ãäžåœãã€ã³ããæ¥æ¬ã§ãWeb ã¢ããªã±ãŒã·ã§ã³ãšã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®äž¡æ¹ã§æ¥éãªæ¡çšãèŠãããŸãã
- åç±³ãWasm ãæ¡çšããéçºè ã®æ°ãå¢å ããŠããŸãã
- ã¢ããªã«ãWasm ãã¢ãã€ã«ãã¡ãŒã¹ãã®éçºã«é²åºããŠããŸãã
- ãªã»ã¢ãã¢ããªãŒã¹ãã©ãªã¢ãšãã¥ãŒãžãŒã©ã³ãã Wasm ã³ãã¥ããã£ã«ç©æ¥µçã«åå ããŠããŸãã
ãã®ã°ããŒãã«ãªæ¡çšã¯ãWebAssembly ã®éèŠæ§ãç¹ã«å€æ§ãªããã€ã¹ãšãããã¯ãŒã¯ã§é«ãããã©ãŒãã³ã¹ãæäŸã§ããèœåã瀺ããŠããŸãã