WebAssemblyã®äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ã¡ã«ããºã ãæ·±ãæãäžããéçºè ã广çã«ãšã©ãŒã管çããè€éãªã¢ããªã±ãŒã·ã§ã³ããããã°ããããã®ç¥èãæäŸããŸãã
WebAssemblyã®äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ïŒãšã©ãŒã³ã³ããã¹ãã®ããã²ãŒã·ã§ã³
WebAssembly (Wasm)ã¯ãçŸä»£ã®Webéçºã®åºç€ãšãªãããã©ãŠã¶å å€ã§å®è¡ãããã¢ããªã±ãŒã·ã§ã³ã«ãã€ãã£ãã«è¿ãããã©ãŒãã³ã¹ãæäŸããŠããŸããWasmã¢ããªã±ãŒã·ã§ã³ãè€éåããã«ã€ããŠãå ç¢ãªãšã©ãŒåŠçãæ¥µããŠéèŠã«ãªããŸãããã®èšäºã§ã¯ãWebAssemblyã®äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ã¡ã«ããºã ã®è€éããæãäžããéçºè ããšã©ãŒã³ã³ããã¹ãã广çã«ããã²ãŒãããæ¹æ³ã«ã€ããŠã®å æ¬çãªçè§£ãæäŸããŸãã
WebAssemblyäŸå€åŠçã®æŠèŠ
åŸæ¥ã®JavaScriptã®ãšã©ãŒåŠçã¯ãtry-catchãããã¯ãšErrorãªããžã§ã¯ãã«å€§ããäŸåããŠããŸãããã®ã¢ãããŒãã¯æ©èœçã§ãããéå¹ççã§ããå¯èœæ§ãããã培åºçãªãããã°ã«å¿ èŠãªè©³çްãªã³ã³ããã¹ããåžžã«æäŸããããã§ã¯ãããŸãããWebAssemblyã¯ããã€ãã£ãã³ãŒãã®ãšã©ãŒåŠçãã©ã¯ãã£ã¹ãšã·ãŒã ã¬ã¹ã«çµ±åããããã«èšèšããããããæ§é åããããã©ãŒãã³ã¹ã®é«ãäŸå€åŠçã¢ãããŒããæäŸããŸãã
WebAssemblyã«ãããäŸå€ãšã¯ïŒ
WebAssemblyã«ãããŠãäŸå€ã¯ã³ãŒãã®å®è¡äžã«ãšã©ãŒãŸãã¯äŸå€çãªæ¡ä»¶ãçºçããããšãç¥ãããã¡ã«ããºã ã§ãããããã®äŸå€ã¯ã次ã®ãããªæ§ã ãªã€ãã³ãã«ãã£ãŠããªã¬ãŒãããå¯èœæ§ããããŸãïŒ
- ãŒãã«ããæŽæ°é€ç®ïŒ æ°åŠçãªæŒç®ãæªå®çŸ©ã®å€ãçµæãšããŠçããå žåçãªäŸã§ãã
- é åã®ã€ã³ããã¯ã¹ãç¯å²å€ïŒ æå¹ãªç¯å²å€ã®ã€ã³ããã¯ã¹ã§é åèŠçŽ ã«ã¢ã¯ã»ã¹ããããšã§ãã
- ã«ã¹ã¿ã ãšã©ãŒæ¡ä»¶ïŒ éçºè ã¯ãã¢ããªã±ãŒã·ã§ã³ããžãã¯å ã®ç¹å®ã®ãšã©ãŒãéç¥ããããã«ç¬èªã®äŸå€ãå®çŸ©ã§ããŸãã
JavaScriptã®ãšã©ãŒãšWebAssemblyã®äŸå€ã®äž»ãªéãã¯ããã®å®è£ æ¹æ³ãšãåºç€ãšãªãå®è¡ç°å¢ãšã®çžäºäœçšã®ä»æ¹ã«ãããŸããWasmã®äŸå€ã¯ããã©ãŒãã³ã¹ãšãã€ãã£ããšã©ãŒãã³ããªã³ã°ãšã®å¯æ¥ãªçµ±åãç®çãšããŠèšèšãããŠãããè€éã§ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã«ããé©ããŠããŸãã
try
ãcatch
ãthrow
æ§æ
WebAssemblyã®äŸå€åŠçã¡ã«ããºã ã¯ã3ã€ã®äž»èŠãªåœä»€ãäžå¿ã«å±éãããŸãïŒ
try
: äŸå€ãç£èŠãããä¿è·ãããã³ãŒããããã¯ã®éå§ã瀺ããŸããcatch
: é¢é£ããtry
ãããã¯å ã§ç¹å®ã®äŸå€ãã¹ããŒããããšãã«å®è¡ããããã³ãã©ãæå®ããŸããthrow
: æç€ºçã«äŸå€ãçºçãããéåžžã®å®è¡ãããŒãäžæããé©åãªcatch
ãããã¯ã«å¶åŸ¡ãç§»ããŸãã
ãããã®åœä»€ã¯ãWasmã¢ãžã¥ãŒã«å ã§ãšã©ãŒãåŠçããããã®æ§é åãããæ¹æ³ãæäŸããäºæããªãã€ãã³ããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãæªå®çŸ©ã®åäœã«ã€ãªãããªãããã«ããŸãã
WebAssemblyã«ãããã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®çè§£
ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã¯ãã³ãŒã«ã¹ã¿ãã¯ããã©ã£ãŠãå®è¡ã®ç¹å®ã®ãã€ã³ãã«è³ã£ã颿°åŒã³åºãã®ã·ãŒã±ã³ã¹ãç¹å®ããããã»ã¹ã§ããããã¯ãããã°ã«ãšã£ãŠéåžžã«è²ŽéãªããŒã«ã§ãããéçºè ã¯ãšã©ãŒã®åå ã远跡ããäŸå€çºçæã®ããã°ã©ã ã®ç¶æ ãçè§£ããããšãã§ããŸãã
ã³ãŒã«ã¹ã¿ãã¯ãšã¯ïŒ
ã³ãŒã«ã¹ã¿ãã¯ã¯ãããã°ã©ã å ã®ã¢ã¯ãã£ããªé¢æ°åŒã³åºãã远跡ããããŒã¿æ§é ã§ãã颿°ãåŒã³åºããããã³ã«ããã®é¢æ°ã®åŒæ°ãããŒã«ã«å€æ°ããªã¿ãŒã³ã¢ãã¬ã¹ã«é¢ããæ å ±ãå«ãæ°ãããã¬ãŒã ãã¹ã¿ãã¯ã«è¿œå ãããŸãã颿°ããªã¿ãŒã³ãããšããã®ãã¬ãŒã ã¯ã¹ã¿ãã¯ããåé€ãããŸãã
ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®éèŠæ§
ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã¯ã以äžã®ç®çã§äžå¯æ¬ ã§ãïŒ
- ãããã°ïŒ äŸå€ã«è³ã£ãåŒã³åºãã·ãŒã±ã³ã¹ã远跡ããããšã«ããããšã©ãŒã®æ ¹æ¬åå ãç¹å®ããŸãã
- ãããã¡ã€ãªã³ã°ïŒ æãå€ãã®æéãæ¶è²»ãã颿°ãç¹å®ããããšã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåæããŸãã
- ã»ãã¥ãªãã£ïŒ äžå¯©ãªãã¿ãŒã³ããªããã³ãŒã«ã¹ã¿ãã¯ãåæããããšã«ãããæªæã®ããã³ãŒããæ€åºããŸãã
ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ããªããã°ãè€éãªWebAssemblyã¢ããªã±ãŒã·ã§ã³ã®ãããã°ã¯èããå°é£ã«ãªãããšã©ãŒã®åå ãç¹å®ããŠããã©ãŒãã³ã¹ãæé©åããããšãé£ãããªããŸãã
WebAssemblyã«ãããã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ä»çµã¿
WebAssemblyã¯ã³ãŒã«ã¹ã¿ãã¯ã«ã¢ã¯ã»ã¹ããã¡ã«ããºã ãæäŸããŠãããéçºè ã¯ã¹ã¿ãã¯ãã¬ãŒã ããã©ããå颿°åŒã³åºãã«é¢ããæ å ±ãååŸã§ããŸããã¹ã¿ãã¯ãŠã©ãŒãã³ã°ãã©ã®ããã«å®è£ ããããã®å ·äœçãªè©³çްã¯ã䜿çšãããŠããWasmã©ã³ã¿ã€ã ããããã°ããŒã«ã«ãã£ãŠç°ãªãå ŽåããããŸãã
éåžžãã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã«ã¯ä»¥äžã®ã¹ããããå«ãŸããŸãïŒ
- çŸåšã®ã¹ã¿ãã¯ãã¬ãŒã ãžã®ã¢ã¯ã»ã¹ïŒ ã©ã³ã¿ã€ã ã¯çŸåšã®ã¹ã¿ãã¯ãã¬ãŒã ãžã®ãã€ã³ã¿ãååŸããæ¹æ³ãæäŸããŸãã
- ã¹ã¿ãã¯ã®èµ°æ»ïŒ åã¹ã¿ãã¯ãã¬ãŒã ã«ã¯åã®ãã¬ãŒã ãžã®ãã€ã³ã¿ãå«ãŸããŠãããçŸåšã®ãã¬ãŒã ããã«ãŒããŸã§ã¹ã¿ãã¯ããã©ãããšãã§ããŸãã
- 颿°æ å ±ã®ååŸïŒ åã¹ã¿ãã¯ãã¬ãŒã ã«ã¯ãåŒã³åºããã颿°ã«é¢ããæ å ±ïŒååãã¢ãã¬ã¹ããœãŒã¹ã³ãŒãã®å Žæãªã©ïŒãå«ãŸããŠããŸãã
ã¹ã¿ãã¯ãã¬ãŒã ãå埩åŠçããŠãã®æ å ±ãååŸããããšã«ãããéçºè ã¯åŒã³åºãã·ãŒã±ã³ã¹ãåæ§ç¯ããããã°ã©ã ã®å®è¡ã«é¢ãã貎éãªæŽå¯ãåŸãããšãã§ããŸãã
äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®çµ±å
WebAssemblyã®ãšã©ãŒåŠçèœåã®ç䟡ã¯ãäŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ãçµã¿åãããããšã§çºæ®ãããŸããäŸå€ããã£ããããããšããéçºè ã¯ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã䜿çšããŠãšã©ãŒã«è³ã£ãå®è¡ãã¹ã远跡ãããããã°ã®ããã®è©³çްãªã³ã³ããã¹ããæäŸã§ããŸãã
ã·ããªãªäŸ
è€éãªèšç®ãè¡ãWebAssemblyã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããããŒãã«ããæŽæ°é€ç®ãšã©ãŒãçºçããå ŽåãäŸå€åŠçã¡ã«ããºã ããšã©ãŒããã£ããããŸããã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã䜿çšããããšã§ãéçºè ã¯ã³ãŒã«ã¹ã¿ãã¯ãããã®ãŒãããŒãé€ç®ãçºçããç¹å®ã®é¢æ°ãšã³ãŒãè¡ãç¹å®ã§ããŸãã
ãã®ã¬ãã«ã®è©³çްã¯ãç¹ã«å€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠããšã©ãŒãè¿ éã«ç¹å®ãä¿®æ£ããããã«éåžžã«è²Žéã§ãã
å®è·µçãªå®è£
WebAssemblyã«ãããäŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®æ£ç¢ºãªå®è£ ã¯ã䜿çšãããŠããç¹å®ã®ããŒã«ãã©ã€ãã©ãªã«äŸåããŸããããããäžè¬çãªååã¯åãã§ãã
以äžã«ãä»®æ³çãªAPIã䜿çšããç°¡åãªäŸã瀺ããŸãïŒ
try {
// äŸå€ãã¹ããŒããå¯èœæ§ã®ããã³ãŒã
result = divide(a, b);
} catch (exception) {
// äŸå€ãåŠçãã
console.error("Exception caught:", exception);
// ã¹ã¿ãã¯ããŠã©ãŒã¯ãã
let stack = getStackTrace();
for (let frame of stack) {
console.log(" at", frame.functionName, "in", frame.fileName, "line", frame.lineNumber);
}
}
ãã®äŸã§ã¯ã`getStackTrace()`颿°ãã³ãŒã«ã¹ã¿ãã¯ããŠã©ãŒã¯ããå颿°åŒã³åºãã«é¢ããæ å ±ãå«ãã¹ã¿ãã¯ãã¬ãŒã ã®é åãè¿ã圹å²ãæ ããŸããéçºè ã¯ãã®åŸãã¹ã¿ãã¯ãã¬ãŒã ãå埩åŠçããé¢é£æ å ±ãã³ã³ãœãŒã«ã«èšé²ã§ããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®åºæ¬ååã¯æ¯èŒçåçŽã§ãããéçºè ãèªèããŠããã¹ãããã€ãã®é«åºŠãªãã¯ããã¯ãšèæ ®äºé ããããŸãã
ã«ã¹ã¿ã äŸå€
WebAssemblyã§ã¯ãéçºè ãç¬èªã®ã«ã¹ã¿ã äŸå€ãå®çŸ©ã§ããããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ããžãã¯å ã®ç¹å®ã®ãšã©ãŒãéç¥ã§ããŸããããã«ããããã説æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããããçãçµã£ããšã©ãŒåŠçãå¯èœã«ããããšã§ãã³ãŒãã®æçæ§ãšä¿å®æ§ãåäžãããããšãã§ããŸãã
äŸå€ãã£ã«ã¿ãªã³ã°
å Žåã«ãã£ãŠã¯ãäŸå€ããã®ã¿ã€ããããããã£ã«åºã¥ããŠãã£ã«ã¿ãªã³ã°ããããšãæãŸããããšããããŸããããã«ãããéçºè ã¯ç¹å®ã®äŸå€ãç°ãªãæ¹æ³ã§åŠçã§ãããšã©ãŒåŠçããã»ã¹ããããã现ããå¶åŸ¡ã§ããŸãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã¯ãç¹ã«ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãããããã®ãã¯ããã¯ãè³¢æã«äœ¿çšãããªãŒããŒããããæå°éã«æããããã«ã³ãŒããæé©åããããšãéèŠã§ããããšãã°ãåé¡ãåŒãèµ·ããå¯èœæ§ã®ããã³ãŒããå®è¡ããåã«ãã§ãã¯ãè¡ãããšã§ãäžéšã®ã±ãŒã¹ã§ã¯äŸå€ã®ã¹ããŒãåé¿ã§ããå ŽåããããŸãã
ãããã°ããŒã«ãšã©ã€ãã©ãª
WebAssemblyã§ã®äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ãæ¯æŽããããã€ãã®ãããã°ããŒã«ãã©ã€ãã©ãªããããŸãããããã®ããŒã«ã¯ã次ã®ãããªæ©èœãæäŸã§ããŸãïŒ
- ã¹ã¿ãã¯ãã¬ãŒã¹ã®èªåçæïŒ äŸå€ããã£ããããããšãã«ã¹ã¿ãã¯ãã¬ãŒã¹ãèªåçã«çæããŸãã
- ãœãŒã¹ã³ãŒããããã³ã°ïŒ ã¹ã¿ãã¯ãã¬ãŒã ã察å¿ãããœãŒã¹ã³ãŒãã®å Žæã«ãããã³ã°ããŸãã
- ã€ã³ã¿ã©ã¯ãã£ããããã°ïŒ ã³ãŒããã¹ãããå®è¡ãããªã¢ã«ã¿ã€ã ã§ã³ãŒã«ã¹ã¿ãã¯ãæ€æ»ããŸãã
ãããã®ããŒã«ã䜿çšããããšã§ããããã°ããã»ã¹ãå€§å¹ ã«ç°¡çŽ åããWebAssemblyã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒãããç°¡åã«ç¹å®ããŠä¿®æ£ã§ããŸãã
ã¯ãã¹ãã©ãããã©ãŒã ã«é¢ããèæ ®äºé ãšåœéå
ã°ããŒãã«ãªãŠãŒã¶ãŒåãã«WebAssemblyã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ãšåœéåãèæ ®ããããšãéèŠã§ãã
ã¯ãã¹ãã©ãããã©ãŒã äºææ§
WebAssemblyã¯ãã©ãããã©ãŒã ã«äŸåããªãããã«èšèšãããŠãããåãWasmã³ãŒããç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãã¢ãŒããã¯ãã£ã§æ£ããå®è¡ãããã¯ãã§ããããããã©ã³ã¿ã€ã ç°å¢ã®åäœã«ã¯ãäŸå€åŠçãã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã«åœ±é¿ãäžããå¯èœæ§ã®ãã埮åŠãªéããååšããããšããããŸãã
äŸãã°ãã¹ã¿ãã¯ãã¬ãŒã¹ã®åœ¢åŒã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã䜿çšãããŠãããããã°ããŒã«ã«ãã£ãŠç°ãªãå ŽåããããŸãããšã©ãŒåŠçãšãããã°ã¡ã«ããºã ãæ£ããæ©èœããããšã確èªããããã«ãç°ãªããã©ãããã©ãŒã ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããããšãéèŠã§ãã
åœéå
ãŠãŒã¶ãŒã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããéã«ã¯ãåœéåãšããŒã«ã©ã€ãºãèæ ®ããããšãéèŠã§ãããšã©ãŒã¡ãã»ãŒãžã¯ããŠãŒã¶ãŒãçè§£ãããã圹ç«ã€ããã«ããŠãŒã¶ãŒã®åžæããèšèªã«ç¿»èš³ãããã¹ãã§ãã
ããã«ããšã©ãŒãã©ã®ããã«èªèãããåŠçããããã«ãããæåçãªéãã«æ³šæããããšãéèŠã§ããäŸãã°ãäžéšã®æåã§ã¯ä»ã®æåããããšã©ãŒã«å¯ŸããŠå¯å®¹ã§ããå ŽåããããŸãããããã®æåçãªéãã«é æ ®ããŠãã¢ããªã±ãŒã·ã§ã³ã®ãšã©ãŒåŠçã¡ã«ããºã ãèšèšããããšãéèŠã§ãã
äŸãšã±ãŒã¹ã¹ã¿ãã£
ãã®èšäºã§èª¬æããæŠå¿µãããã«èª¬æããããã«ãããã€ãã®äŸãšã±ãŒã¹ã¹ã¿ãã£ãèããŠã¿ãŸãããã
äŸ1ïŒãããã¯ãŒã¯ãšã©ãŒã®åŠç
ãªã¢ãŒããµãŒããŒã«ãããã¯ãŒã¯ãªã¯ãšã¹ããè¡ãWebAssemblyã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããããµãŒããŒãå©çšã§ããªãå Žåããšã©ãŒãè¿ããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ãšã©ãŒãé©åã«åŠçãããŠãŒã¶ãŒã«åœ¹ç«ã€ã¡ãã»ãŒãžãæäŸããå¿ èŠããããŸãã
try {
// ãããã¯ãŒã¯ãªã¯ãšã¹ããè¡ã
let response = await fetch("https://example.com/api/data");
// ãªã¯ãšã¹ããæåããã確èª
if (!response.ok) {
throw new Error("Network error: " + response.status);
}
// ã¬ã¹ãã³ã¹ããŒã¿ãè§£æ
let data = await response.json();
// ããŒã¿ãåŠç
processData(data);
} catch (error) {
// ãšã©ãŒãåŠç
console.error("Error fetching data:", error);
displayErrorMessage("ãµãŒããŒããããŒã¿ãååŸã§ããŸããã§ãããåŸã§ããäžåºŠã詊ããã ããã");
}
ãã®äŸã§ã¯ã`try`ãããã¯ããããã¯ãŒã¯ãªã¯ãšã¹ããè¡ããã¬ã¹ãã³ã¹ããŒã¿ãè§£æããããšããŸãããããã¯ãŒã¯ãšã©ãŒãç¡å¹ãªã¬ã¹ãã³ã¹åœ¢åŒãªã©ãäœããã®ãšã©ãŒãçºçããå Žåã`catch`ãããã¯ããšã©ãŒãåŠçãããŠãŒã¶ãŒã«é©åãªã¡ãã»ãŒãžã衚瀺ããŸãã
äŸ2ïŒãŠãŒã¶ãŒå ¥åãšã©ãŒã®åŠç
ãŠãŒã¶ãŒå ¥åãåãä»ããWebAssemblyã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããããŠãŒã¶ãŒå ¥åãæ£ãã圢åŒãšç¯å²å ã«ããããšã確èªããããã«ãå ¥åãæ€èšŒããããšãéèŠã§ãããŠãŒã¶ãŒå ¥åãç¡å¹ãªå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŠãŒã¶ãŒã«ä¿®æ£ãä¿ãå¿ èŠããããŸãã
function processUserInput(input) {
try {
// ãŠãŒã¶ãŒå
¥åãæ€èšŒ
if (!isValidInput(input)) {
throw new Error("Invalid input: " + input);
}
// å
¥åãåŠç
let result = calculateResult(input);
// çµæã衚瀺
displayResult(result);
} catch (error) {
// ãšã©ãŒãåŠç
console.error("Error processing input:", error);
displayErrorMessage("ç¡å¹ãªå
¥åã§ããæå¹ãªå€ãå
¥åããŠãã ããã");
}
}
function isValidInput(input) {
// å
¥åãæ°å€ã確èª
if (isNaN(input)) {
return false;
}
// å
¥åãæå¹ç¯å²å
ã確èª
if (input < 0 || input > 100) {
return false;
}
// å
¥åã¯æå¹
return true;
}
ãã®äŸã§ã¯ã`processUserInput`颿°ããŸã`isValidInput`颿°ã䜿çšããŠãŠãŒã¶ãŒå ¥åãæ€èšŒããŸããå ¥åãç¡å¹ãªå Žåã`isValidInput`颿°ã¯ãšã©ãŒãã¹ããŒããããã`processUserInput`颿°å ã®`catch`ãããã¯ã«ãã£ãŠãã£ãããããŸãã`catch`ãããã¯ã¯ãã®åŸããŠãŒã¶ãŒã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããŸãã
ã±ãŒã¹ã¹ã¿ãã£ïŒè€éãªWebAssemblyã¢ããªã±ãŒã·ã§ã³ã®ãããã°
è€æ°ã®ã¢ãžã¥ãŒã«ãšæ°åè¡ã®ã³ãŒããæã€å€§èŠæš¡ãªWebAssemblyã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããããšã©ãŒãçºçããå Žåãé©åãªãããã°ããŒã«ãšãã¯ããã¯ããªããã°ããšã©ãŒã®åå ãç¹å®ããã®ã¯å°é£ãªå ŽåããããŸãã
ãã®ã·ããªãªã§ã¯ãäŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ãéåžžã«åœ¹ç«ã¡ãŸããã³ãŒãã«ãã¬ãŒã¯ãã€ã³ããèšå®ããäŸå€ããã£ããããããšãã«ã³ãŒã«ã¹ã¿ãã¯ã調ã¹ãããšã§ãéçºè ã¯å®è¡ãã¹ããšã©ãŒã®åå ãŸã§ããã®ãŒãããšãã§ããŸãã
ããã«ãéçºè ã¯ãããã°ããŒã«ã䜿çšããŠãå®è¡ã®ããŸããŸãªæç¹ã§ã®å€æ°ãã¡ã¢ãªäœçœ®ã®å€ãæ€æ»ã§ãããšã©ãŒã®åå ã«é¢ãããããªãæŽå¯ãåŸãããšãã§ããŸãã
WebAssemblyã®äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ãã¹ããã©ã¯ãã£ã¹
WebAssemblyã¢ããªã±ãŒã·ã§ã³ã§äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã广çã«äœ¿çšãããããã«ããããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãïŒ
- äºæããªããšã©ãŒã®åŠçã«äŸå€åŠçã䜿çšããïŒ äŸå€åŠçã¯ãéåžžã®æäœäžã«çºçããããšãäºæãããªããšã©ãŒãåŠçããããã«äœ¿çšãããã¹ãã§ãã
- å®è¡ãã¹ã®è¿œè·¡ã«ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã䜿çšããïŒ ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã¯ããšã©ãŒã«è³ã£ãå®è¡ãã¹ã远跡ãããããã°ã®ããã®è©³çްãªã³ã³ããã¹ããæäŸããããã«äœ¿çšãããã¹ãã§ãã
- ãããã°ããŒã«ãšã©ã€ãã©ãªã䜿çšããïŒ ãããã°ããŒã«ãšã©ã€ãã©ãªã¯ããããã°ããã»ã¹ãå€§å¹ ã«ç°¡çŽ åãããšã©ãŒã®ç¹å®ãšä¿®æ£ã容æã«ããŸãã
- ããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ããïŒ äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããããããè³¢æã«äœ¿çšãããªãŒããŒããããæå°éã«æããããã«ã³ãŒããæé©åããããšãéèŠã§ãã
- ç°ãªããã©ãããã©ãŒã ã§ãã¹ãããïŒ ãšã©ãŒåŠçãšãããã°ã¡ã«ããºã ãæ£ããæ©èœããããšã確èªããããã«ãç°ãªããã©ãããã©ãŒã ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŸãã
- ãšã©ãŒã¡ãã»ãŒãžãåœéåããïŒ ãšã©ãŒã¡ãã»ãŒãžã¯ããŠãŒã¶ãŒãçè§£ãããã圹ç«ã€ããã«ããŠãŒã¶ãŒã®åžæããèšèªã«ç¿»èš³ãããã¹ãã§ãã
WebAssemblyãšã©ãŒåŠçã®æªæ¥
WebAssemblyã®ãšã³ã·ã¹ãã ã¯åžžã«é²åããŠããããã©ãããã©ãŒã ã®ãšã©ãŒåŠçèœåãåäžãããããã®ç¶ç¶çãªåãçµã¿ãè¡ãããŠããŸããæŽ»çºãªéçºåéã«ã¯ã以äžã®ãããªãã®ããããŸãïŒ
- ããæŽç·ŽãããäŸå€åŠçã¡ã«ããºã ïŒ äŸå€ã¯ã©ã¹ã®ãµããŒããããé«åºŠãªäŸå€ãã£ã«ã¿ãªã³ã°ãªã©ãäŸå€ãåŠçããæ°ããæ¹æ³ã®æ¢æ±ã
- ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ããã©ãŒãã³ã¹åäžïŒ ãªãŒããŒããããæå°éã«æããããã®ã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ããã©ãŒãã³ã¹æé©åã
- ãããã°ããŒã«ãšã®ããè¯ãçµ±åïŒ WebAssemblyãšãããã°ããŒã«ã®éã®ããè¯ãçµ±åãéçºããããé«åºŠãªãããã°æ©èœãæäŸã
ãããã®éçºã¯ãWebAssemblyã¢ããªã±ãŒã·ã§ã³ã®å ç¢æ§ãšãããã°å¯èœæ§ãããã«åäžãããè€éã§ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ããã«é åçãªãã©ãããã©ãŒã ãšãªãã§ãããã
çµè«
WebAssemblyã®äŸå€åŠçãšã¹ã¿ãã¯ãŠã©ãŒãã³ã°ã®ã¡ã«ããºã ã¯ãå ç¢ã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãéçºããããã®äžå¯æ¬ ãªããŒã«ã§ãããããã®ã¡ã«ããºã ãã©ã®ããã«æ©èœããããçè§£ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãéçºè ã¯å¹æçã«ãšã©ãŒã管çããè€éãªã³ãŒãããããã°ããWebAssemblyã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ã確ä¿ããããšãã§ããŸãã
WebAssemblyãšã³ã·ã¹ãã ãé²åãç¶ããã«ã€ããŠããšã©ãŒåŠçãšãããã°æ©èœã®ãããªãæ¹åãæåŸ ã§ããæ¬¡äžä»£ã®Webã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ããã«åŒ·åãªãã©ãããã©ãŒã ã«ãªãã§ãããã