https://github.com/WebAssembly/design/issues/483ã§ã®è°è«ããåå²ïŒ
ãããã®ãŠãŒã¹ã±ãŒã¹ãæ¢åã®ã¢ãã«ã«ãããã³ã°ãã解決ã§ããªããã®ãéå¹çãªãã®ãè©äŸ¡ããããã«ãããã€ãã®åªåãæãããŠããããšã確èªããããšæããŸãã è€æ°ã®ãªã¿ãŒã³ãµã€ãã®ãŠãŒã¹ã±ãŒã¹ã¯ã catch
æäœãŸãã¯äŸå€åŠçã®ãµããŒãã«é¢é£ããŠããå¯èœæ§ããããŸããã確ãã§ã¯ãããŸããã
2015幎11æ30æ¥ååŸ1æ45åããã©ã³ã¯ã»ããã±ã€ãã¯æ¬¡ã®ããã«æžããŠããŸãã
PrologãšHaskellã¯ã©ã¡ãããçŸåšã®èšèšã«èª²é¡ããããããŸãã ããã€ãã®
ãŸããå ±éã®èŠä»¶ãããæ¹æ³ïŒéæšæºã®è©äŸ¡
ãã®çµæãè©äŸ¡ã®è¡šçŸããã现ããå¶åŸ¡ããå¿ èŠããããŸããPrologã®å Žåãè©äŸ¡çšã®ãã¹ã¿ãã¯ãããããŸãïŒåŒçšç¬Šãå¿ èŠã§ãïŒ
éåžžã®èšèªã«ã¯ãªã2ã€ã®æ©èœããããŸãïŒéããŒã«ã«ãªã¿ãŒã³
ïŒPrologããã°ã©ã ãçµäºãããšãããã®ãªã¿ãŒã³ã¯å¿ ããã
ã¹ã¿ãã¯ã ãã ãããµããŒãããã«ã¯ããã®ã¹ã¿ãã¯ãä¿æããå¿ èŠããããŸã
ããã¯ãã©ãã¯ã2çªç®ã®æ©èœã¯ããã¯ãã©ãã¯ã§ãã / that /ãæå³ããã®ã¯ã
ããã°ã©ã ãæ»ãããšãã§ãã2ã€ã®å¥ã ã®æ¹æ³ïŒæåãŸãã¯
倱æããŸããã
ãã·ã³ã³ãŒãã«ã³ã³ãã€ã«ãããããããŒã°ã¯ãå¥åã®ãã€ã³ãã£ã³ã°ã¹ã¿ãã¯ãä¿æããŸããïŒ ã³ã³ãããŒã«è»¢éãé€ããŠãå¥ã®ã¹ã¿ãã¯ã䜿çšããŠã©ããŸã§ååŸã§ããŸããïŒ ç¿»èš³ãããCã§ãããåºå®åŒæ°ãè¶ ããŠåŒæ°ãæž¡ãããã®å¥åã®ã¹ã¿ãã¯ãæã€ããšãæåŸ ãããŸãã
äžè¬ã«ãåªããPrologå®è£ ã«ã¯ãããæ確ãªãã®ãå¿ èŠã§ãã
Java / C ++èšèªãããè©äŸ¡ã¹ã¿ãã¯ãå¶åŸ¡ããŸããHaskellã¯ãŸãå¥ã®ã±ãŒã¹ã§ãã ãã®å®è£ ã«ã¯ããã€ãããããŸã
åŸæ¥ã®èšèªãšã¯éåžžã«ç°è³ªãªæ©èœã æåã«
ãã®å ŽåãåŒæ°ã¯é¢æ°ã«å ¥ãåã«è©äŸ¡ãããŸããã The
ããã®å¹æã¯ã/ all /ããŒã¿ãã³ãŒãã®ããã«èŠããããšã§ãã ããã¯ãŸããããæå³ããŸã
è©äŸ¡ã¹ã¿ãã¯ã®éåžžã®é åãããã³ã°ã¯ã
Haskellã
ããã¯ãããé«ãã¬ãã«ã®åé¡ã®ããã«èãããŸãã ãã·ã³ã³ãŒãã¯ãšã«ããããããµããŒãããŠããªãã®ã§ã確ãã«ããã¯ããåå§çãªæäœã«å€æãããŸãã ããšãã°ãåŒæ°ã¯ããŒã¿æ§é ãžã®ãã€ã³ã¿ã§ããå¯èœæ§ãããããããããããã«ã¯é¢æ°ãšã³ã³ããã¹ããžã®ã€ã³ããã¯ã¹ãå«ããå¿ èŠããããŸããïŒ
2çªç®ã®äŸã§ã¯ãé¢æ°åŒã³åºããžã®è€æ°ã®ãªã¿ãŒã³ãã€ã³ããååšããå¯èœæ§ããããŸãã
çµæãåäžã®å€ãšããŠè¡šããããã®ãããã³1ã€ä»¥äž
ããã§ãè¿åçµæã¯è¿åã®æ§æèŠçŽ ãšãšãã«ã延æããããŸã
è€æ°ã®ã¬ãžã¹ã¿ã«ãŸãããå€ã
ããã¯ãè€æ°ã®å€ïŒãµããŒããããäºå®ïŒã䜿çšããåäžã®è¿åãµã€ãã§åŠçã§ããŸããïŒ æåã®å€ã¯ãããŸããŸãªç¯å²ã®ãªã¿ãŒã³ãã¹ã«ãã£ã¹ãããããããã®ã€ã³ããã¯ã¹ã§ããå¯èœæ§ããããŸããïŒ
..ã
ãã1ã€ã®æ³šæïŒHaskellããµããŒãããããã«å¿ èŠãªæ§é ã®çš®é¡
ãšPrologã¯ãããããéåæããµããŒãããã®ã«ãéåžžã«é©ããŠããŸã
ããã°ã©ãã³ã°ã ãããã£ãŠãJavaScriptãC ++ã§ãããããã®æ©æµãåããããšãã§ããŸã
ãã¯ããã¯ã
ãããããããã¯ãšã«ãããã·ã³ã³ãŒãã«ã³ã³ãã€ã«ããããã·ã³ã³ãŒãã¯ãéåæããã°ã©ãã³ã°ããç¹å¥ã«ãµããŒãããŠããŸããã ç§ãã¡ãç¥ãå¿ èŠãããã®ã¯ãASTãå¿ èŠãªããªããã£ãæäœãå¹ççã«ãµããŒãã§ãããã©ããã§ãã
Prologã®ãµããŒã
ã¬ããŒãžã³ã¬ã¯ã¿ãŒãã¹ã¿ãã¯ãåéããã®ã¯ãPrologã§ã¯æ£åžžã§ãã Prologã®cutæŒç®åã¯ãã¬ããŒãžã¹ã¿ãã¯ãšã³ããªã«ãªããŸãã
HaskellããµããŒããã
泚ïŒç§ã¯ããã®å°é家ã§ã¯ãããŸããã
2015幎11æ29æ¥ã«ã¯ãåå8æ46åPMã§ããã©ã³ã¯ã»ããã±ã€ãã®[email protected]ã¯æžããŸããïŒ
Prologã®ãµããŒã
é¢æ°ã¯ãè€æ°åãæ»ããããšãã§ããŸãã ããã¯ãschemeã®call / ccã«å°ã䌌ãŠããŸãã ããããããã«ãã£ãŠè©äŸ¡ã®åäœãšããŠã®æ©èœã«å¯ŸããçŸåšã®åºå®ã¯ç ŽãããŸãã Prologã¹ã¿ãã¯ã¯ãããããµããŒãããããã«ãã»ãšãã©ã®èšèªã®è©äŸ¡ã¹ã¿ãã¯ãããå€§å¹ ã«è±å¯ã§ãã call / ccãšã¯ç°ãªããPrologã®ç¶ç¶ã¯åå®çŸ©ã§ããªãããšã«æ³šæããŠãã ããã
å¿ èŠãªäœã¬ãã«ã®æ©èœã¯äœã§ããïŒ è€æ°ã®é¢æ°ã®ãšã³ããªãã€ã³ãã§ããïŒ
Webã§ã®ããããŒã°ã®å®è£ ãã¹ã¿ãã¯ã®ãããªããŒã¿æ§é ãããŒãå²ãåœãŠããããããé«ã¬ãã«ã®ã¹ã¿ãã¯ãšããŠäœ¿çšããããšã劚ãããã®ã¯äœããªãããšã«æ³šæããŠãã ããã ããããŒã°ã®å®è£ ãCã³ãŒããçæãããšãã«ãããè¡ã£ãå Žåããã·ã³ã³ãŒãã察象ãšããããå·§åŠãªããšãè¡ãå®è£ ããããå šäœçãªãã³ãããŒã¯ããã©ãŒãã³ã¹ã®èŠ³ç¹ããã©ãã»ã©æªãã§ããããïŒ
Prologã«ã¯ãå€æ°-å€æ°ã®éæ¥åç §ãéåžžã«å¿ èŠã§ãã ã¡ã¢ãªåç §ã«ã¯å®éã®å€ããªãå ŽåããããŸãããå®éã®å€ãžã®ãã€ã³ã¿ããããŸãã äžéšã®ã·ã¹ãã ã§ã¯ãããã¯Prologã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®CPUãµã€ã¯ã«ã®30ã40ïŒ ãå ããŸãã
ç®çã®ãã·ã³ã³ãŒãã¯ãCã䜿çšããŠãããè¡šçŸããå Žåã«Cã³ã³ãã€ã©ãçæãããã®ãšã©ã®ããã«ç°ãªããŸããïŒ
å¹ççãªããã¯ãã©ããã³ã°ã¯å²ãåœãŠã®é åºãç¥ãããšã«äŸåããŠãããããéåžžã®å空éããŒã¹ã®GCã¢ã«ãŽãªãºã ã¯Prologã§ã¯ããŸãæ©èœããŸãããã¬ããŒãžã³ã¬ã¯ã¿ãŒãã¹ã¿ãã¯ãåéããã®ã¯ãPrologã§ã¯æ£åžžã§ãã Prologã®cutæŒç®åã¯ãã¬ããŒãžã¹ã¿ãã¯ãšã³ããªã«ãªããŸãã
wasmã®GCæ©èœã¯ãã¹ãŠãWebã®GCã»ãã³ãã£ã¯ã¹ãšäºææ§ãããå¿ èŠããããŸãã ããªãã説æããããšãäºææ§ããããã©ããã¯æããã§ã¯ãããŸããã
ãªãã¢ã¡ã¢ãªã䜿çšããã«ã¹ã¿ã GCã®å®è£ ã劚ãããã®ã¯ãããŸããã
HaskellããµããŒããã
泚ïŒç§ã¯ããã®å°é家ã§ã¯ãããŸãããè€æ°ã®æ»ãç¹ã¯ãçªå µãè¿ããåå²ããããšã§è¿äŒŒã§ããŸãã ããããããªãã®ããã©ãŒãã³ã¹ã³ã¹ããããããŸãã ãã®ãããªã·ã¹ãã ã¯ãHaskellããã€ãã£ãã«ãµããŒãããŠãããšã¯èšããŸããã
æ«å°Ÿååž°ã æ«å°ŸåŒã³åºãã¯ã芪åŒã³åºããšåãæ°ã®ãã©ã¡ãŒã¿ãŒãªã©ãæã€æ«å°ŸåŒã³åºãã«ã€ããŠä»®å®ããå¿ èŠã¯ãããŸããã é¢æ°åèšèªã®å€ãã®å Žåãåãããã«ã¯èŠããŸããã
éç·åœ¢è©äŸ¡ã¹ã¿ãã¯ã Haskellã®éåžžã®é 延è©äŸ¡ã¢ãŒãã§ã¯ãã¹ã¿ãã¯ãžã®å®è£ ãéåžžã«å°é£ã«ãªããŸãã ç§ã®ç¥ãéããHaskellã³ã³ãã€ã©ã¯è©äŸ¡ãã¹ã¿ãã¯ã«ãããããããšããŸãããéåžžã¯å€±æããããŒããå²ãåœãŠãããã¹ã¿ãã¯ã«ãªã£ãŠããŸããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
å¿ èŠãªäœã¬ãã«ã®æ©èœã¯äœã§ããïŒ è€æ°ã®é¢æ°ã®ãšã³ããªãã€ã³ãã§ããïŒ
Prologããã°ã©ã ã¯åã«éåžžã®æ©èœã«å¯Ÿå¿ããŠããŸããã Prologããã°ã©ã ã®çµäºã¯ãéåžžã®é¢æ°ã®æ»ãå€ã®ããã«åŠçããããšã¯ã§ããŸããã 察å¿ããåŒã³åºãã¯ãéåžžã®é¢æ°åŒã³åºããããå€ãã®ããšãè¡ãå¿ èŠããããŸãã
ãããCã«ãããã³ã°ãããšãéåžžã«å€§éã®ã³ãŒããçæãããããå Žåã«ãã£ãŠã¯ã解éã®å±€ãè¿œå ãããŸãã ã»ãšãã©ã®ãŸãšããªPrologã·ã¹ãã ã¯Cã«ã³ã³ãã€ã«ãããŸããã
äžéšã®ã·ã¹ãã ã§ã¯ãããã¯Prologã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®CPUãµã€ã¯ã«ã®30ã40ïŒ ãå ããŸãã
ç®çã®ãã·ã³ã³ãŒãã¯ãCã䜿çšããŠãããè¡šçŸããå Žåã«Cã³ã³ãã€ã©ãçæãããã®ãšã©ã®ããã«ç°ãªããŸããïŒ
ããã§éèŠãªã®ã¯ãããªãã¡ã€ã¢ã«å¯ŸããŠåéåã®ããã«èŠãããã®ãååŸããããšã§ãã å€ãžã®ãã€ã³ã¿ãŒã¯ãå€ãžã®ãã€ã³ã¿ãŒãžã®ãã€ã³ã¿ãŒããŸãã¯å€ãžã®ãã€ã³ã¿ãŒãžã®ãã€ã³ã¿ãŒãžã®ãã€ã³ã¿ãŒã§ããå¯èœæ§ããããŸãã ãŸãã¯ããã¯åãªãå€ãããããŸããã
Cãä»ããŠã³ã³ãã€ã«ãããšãå¿ ç¶çã«ããã©ãŒãã³ã¹ãå€§å¹ ã«äœäžããŸãã
ç·åœ¢ã¡ã¢ãªã®ãã£ã³ã¯ãå²ãåœãŠãŠããã§éã¶ããšãã§ãããšããªããèšãããã€ãã®å Žæã ããã¯æ¬åœã§ãã ãããããããåªå æŠç¥ãšããŠåæã«äœ¿çšããæ®éæ§ã䞻匵ããããšã¯ã§ããŸããã
極端ãªäŸã瀺ããããããŸããïŒããªãã¯ãã¹ãŠã®Cããã°ã©ã ãHaskellã«ãããã³ã°ããããšãã§ããŸãã 次ã«ãå¹ççãªHaskellã®å®è£ ãããã°ãCã®å¹ççãªå®è£ ããããæ®éæ§ããããšäž»åŒµããããšãã§ããŸãã å€ãã®äººããããåãå ¥ãããšã¯æããŸããã
äžæ¹ãPrologãŸãã¯Haskellã®ããããããµããŒãããå¿ èŠã¯ãããŸããã ãã®å Žåãæ®éæ§ã䞻匵ããªãã§ãã ããã
éæšæºã®å®è¡ã¢ãã«ãæã€ä»ã®èšèªã«ã¯ãSQLãSchemeãRubyãªã©ããããŸãã
ãªãã¢ã¡ã¢ãªã䜿çšããã«ã¹ã¿ã GCã®å®è£ ã劚ãããã®ã¯ãããŸããã
ããã¯äžè¬çãªããšã«ãªããšæããŸãã ç°ãªãGCã¢ãã«ãå€ããããããåäžã®VMã§ãã¹ãŠããµããŒãããããšã¯ã§ããŸããïŒå¥ã®äŸãšããŠãGCãã¡ã€ãã©ã€ã¶ãŒãå¿ èŠãšããèšèªããããŸãããJSã«ã¯ãããŸããïŒãããã§åé¡ãããŸããã ãã®ä»ã¯ããã€ãã£ãé床ã«è¿ãç·åœ¢ã¡ã¢ãªïŒ+ã¹ã¬ããïŒäžã«å®è£ ã§ããŸãã
ç·åœ¢ã¡ã¢ãªã®ãã£ã³ã¯ãå²ãåœãŠãŠããã§éã¶ããšãã§ãããšããªããèšãããã€ãã®å Žæã ããã¯æ¬åœã§ãã ãããããããåªå æŠç¥ãšããŠåæã«äœ¿çšããæ®éæ§ã䞻匵ããããšã¯ã§ããŸããã
ãã®æå³ã§åŒ·ãæ®éæ§ã䞻匵ããŠãããšã¯æããŸããã ããã¯æ±ºããŠéæãããŠããããããããäžå¯èœã§ãã
WebAssemblyã®äž»ãªç®æšã¯JavaScriptã®ã¢ã»ã³ãã©ãŒãšããŠæ©èœããããšã§ããïŒ ãã§ã«JSãåºãå®è£ ãããŠãããšæããŸããã
ãŸããåœåã®ç®æšã¯ããã©ãŠã¶ã§é åžããããã«ä»»æã®Cããã°ã©ã ãã³ã³ãã€ã«ã§ããããã«ããããšã ãšæããŸããã
ã¢ã³ãã£ãå°ãäžããŠãããšæããŸãã ãŠãããŒãµã«ã¢ã»ã³ãã©ã®å¯èœæ§ã¯ãããšæããŸãã
WebAssemblyã®ç®æšã¯ããã«è©³ãã説æãããŠã
FutureFeatures.mdããã¥ã¡ã³ãã¯ãããã€ãã®å¯èœãªã¢ã€ãã¢ïŒå®å šã«äžè¬çãªæ«å°ŸåŒã³åºããå«ãïŒã®ãªã¹ãã§ãããä»ã®ã¢ã€ãã¢ãå¯èœã§ãã å æ¬çãªãªã¹ããæå³ãããã®ã§ã¯ãããŸããã æ°ããã¢ã€ãã¢ã¯å€§æè¿ã§ãã
Haskellã«ãšã£ãŠãæ¢çŽ¢ã®è¯ãåºçºç¹ã¯GHCLLVMããã¯ãšã³ããããããŸããã LLVMã®ã©ã®ãããªç¹å¥ãªæ©èœã«äŸåããŠããŸããïŒ ãã®åŒ±ç¹ã¯äœã§ããïŒ
ååã«å ·äœçãªãã®ãç¹å®ãããŠããªããããç· ãããããŸããç¹å®ãããå Žåã¯ãæ°ããç¹å®ã®åé¡ãéãããšãããé©åã§ããããã«æãããŸãã
Haskellã«é¢ããŠCoreãè²ãŠãããŠããªãããšã«é©ããŠããŸãã
ç§ãã¡ã®ç®æšã¯ã_Haskell_ãWebAssemblyã«ã³ã³ãã€ã«ããããšã§ã¯ãªãã_Core_ãWebAssemblyã«ã³ã³ãã€ã«ããããšã§ãã Haskellã³ã³ãã€ã©GHCã¯ããã§ã«HaskellãCoreã«JVMãã€ãã³ãŒãã«ã³ã³ãã€ã«ãããŠããã®ã§ãWebAssemblyã§åæ§ã®ããšãã§ããªãã£ãçç±ãããããŸããã
ããã«é²ãã§ãã³ã³ãã€ã«ã®åŸåã§GHCãã€ã³ã¿ãŒã»ããããããšãã§ããŸãã ããšãã°ãGHCã¯ãã§ã«Coreãå°ãåçŽãªSpineless TaglessG-machineã«ã³ã³ãã€ã«ããŠããŸãã 次ã«ãSTGã³ãŒããC--ã®æ¹èšã«å€æããŸãããã®æç¹ã§ãé¢æ°åŒã³åºããåé€ãããŠããŸãã å šäœçãªèª¬æã«ã€ããŠã¯ããŠã£ãããã£ã¢ã®GHC§ã¢ãŒããã¯ãã£ãåç §ããŠãã ããã
ãã¡ãããWebAssemblyããŒã ã¯ãHaskellã®ã³ã³ãã€ã«ã·ã¹ãã ã®èšèšã®ã¿ãèæ ®ããå¿ èŠããããŸãã ä»ã®èª°ããã³ã³ãã€ã©ãæžãããšãã§ããŸã; æ¯èŒçå°ããå¹ççã§ãããªãããWebAssemblyããã®ãããªã³ã³ãã€ã©ã®é©åãªã¿ãŒã²ããã§ããããšã確èªããå¿ èŠããããŸãã ãããããHaskellãäœã¬ãã«èšèªã«ã³ã³ãã€ã«ããããã«GHCããã§ã«ã©ãã ãã®äœæ¥ãè¡ã£ãŠããããèãããšãããã¯ãã§ã«ããã§ãã
æãåèã«ãªãã³ã¡ã³ã
è¯
Haskellã«é¢ããŠCoreãè²ãŠãããŠããªãããšã«é©ããŠããŸãã
å¥ã®ã¿ãŒã²ãã
ç§ãã¡ã®ç®æšã¯ã_Haskell_ãWebAssemblyã«ã³ã³ãã€ã«ããããšã§ã¯ãªãã_Core_ãWebAssemblyã«ã³ã³ãã€ã«ããããšã§ãã Haskellã³ã³ãã€ã©GHCã¯ããã§ã«HaskellãCoreã«JVMãã€ãã³ãŒãã«ã³ã³ãã€ã«ãããŠããã®ã§ãWebAssemblyã§åæ§ã®ããšãã§ããªãã£ãçç±ãããããŸããã
GHCã¯ããã«å€ãã®ä»äºãããŸã
ããã«é²ãã§ãã³ã³ãã€ã«ã®åŸåã§GHCãã€ã³ã¿ãŒã»ããããããšãã§ããŸãã ããšãã°ãGHCã¯ãã§ã«Coreãå°ãåçŽãªSpineless TaglessG-machineã«ã³ã³ãã€ã«ããŠããŸãã 次ã«ãSTGã³ãŒããC--ã®æ¹èšã«å€æããŸãããã®æç¹ã§ãé¢æ°åŒã³åºããåé€ãããŠããŸãã å šäœçãªèª¬æã«ã€ããŠã¯ããŠã£ãããã£ã¢ã®GHC§ã¢ãŒããã¯ãã£ãåç §ããŠãã ããã
ãã ãããå¯èœã«ãã
ãã¡ãããWebAssemblyããŒã ã¯ãHaskellã®ã³ã³ãã€ã«ã·ã¹ãã ã®èšèšã®ã¿ãèæ ®ããå¿ èŠããããŸãã ä»ã®èª°ããã³ã³ãã€ã©ãæžãããšãã§ããŸã; æ¯èŒçå°ããå¹ççã§ãããªãããWebAssemblyããã®ãããªã³ã³ãã€ã©ã®é©åãªã¿ãŒã²ããã§ããããšã確èªããå¿ èŠããããŸãã ãããããHaskellãäœã¬ãã«èšèªã«ã³ã³ãã€ã«ããããã«GHCããã§ã«ã©ãã ãã®äœæ¥ãè¡ã£ãŠããããèãããšãããã¯ãã§ã«ããã§ãã