
CïŒãšã¯äœã§ããïŒ ã¬ããŒãžã³ã¬ã¯ã¿ãŒãæ©èœæ§ããŒã·ã§ã³ãç¡æã®ååŸã®ãããµãŒãžãåãããªããžã§ã¯ãæåã®ãšã¹ãã©ã³ãã ã¡ã¢ãªãããã»ããµãããã³ãã®ä»ã®äœã¬ãã«ããã°ã©ãã³ã°ã§ã®äœæ¥ã®äžå¿
èŠãªè©³çŽ°ãé ããŠãæ¬åœã«éèŠãªããšãæžãããšãã§ããŸãã åœç¶ãè¡äžã®å¥œå¥å¿ã®ã¬ãã«ãé«ãŸãã.NETãå®éã«ã©ã®ããã«æ©èœããããç¥ããã人ãããŸãïŒéçºäžã®ãœãããŠã§ã¢ã®çç£æ§ãåäžãããããã ãã«.NETãç 究ããŠããŸãïŒã ä»æ¥ã圌ãã¯ç§ãã¡ãšè©±ããŠããïŒ
- ãµãŒã·ã£ã»ãŽãŒã«ãã¹ã¿ã€ã³ ã DotNextã¬ã®ã¥ã©ãŒã¹ããŒã«ãŒããPro .NET Performanceãã®èè
ã§ãããMVPãäœåºŠãåããŠããŸãã æè¿ãèšèªèªäœã®çç£æ§ã¯ã»ãšãã©ãªãã圌ã¯æ倧éã®éãæŸãåãããšã«ããŸããã
- ã«ãŒã¬ã³sz Atomics.netãåå¿è
ã®WebKitã³ããã¿ãŒãããã³Just-In-Time Compilationã¹ãã·ã£ãªã¹ãã
ãµãŒã·ã£ã»ãŽãŒã«ãã¹ã¿ã€ã³
ããã«ã¡ã¯ããµãŒã·ã£ã ã©ã®ããã«ããŠããŒããŠã§ã¢ã«å°éããŸãããïŒ èå³ãŸãã¯æ·±å»ãªããŒãºïŒç§ã¯ã³ã³ãµã«ã¿ã³ãã§ãããå€ãã®ã¯ã©ã€ã¢ã³ããšä»äºãããŠããŸãã ä»ã®æ¹æ³ã§æé©åãããªããªã£ãã¢ã«ãŽãªãºã ãŸãã¯ã³ãŒããæé©åããå¿
èŠãããå ŽåããããŸãã .NETãé«ãã¬ãã«ã§ç¥ãããšã¯ã§ããŸãããããŒããŠã§ã¢ä»¥å€ã«ãªãã·ã§ã³ã¯ãããŸããã åæã«ãããã»ããµã®ä»çµã¿ãç解ããŠããã°ããã®ä»çµã¿ãé ã®äžã§ã¯ã£ãããšç解ã§ããŸããã³ãŒããå¥ã®æ¹æ³ã§æŽçã§ããŸããä»ã®ããã»ããµã®åœä»€ã«çŠç¹ãåããããã£ãã·ã¥ããããã䜿çšã§ããŸãã ãã¯ãã«åãªã©ã®ããã€ãã®äŸã«ã€ããŠã¯ããã§ã«DotNextã®1ã€ã§èª¬æããŸãããã次ã®äŸã§ããã€ã説æããŸããããã¯æåŸã®æ段ã®ããŒã«ã§ããïŒ ãŸãã¯ãç¶ç¶çã«äœ¿çšã§ããŸããïŒç¶æ³ã«ãããŸãã å€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã匷åãªæé©åã¯å®éã«ã¯å¿
èŠãããŸãããç¶æ³ã«ãã£ãŠã¯ãäžäœã¬ãã«ã«äžããããšã¯ã§ããŸããã äžæ¹ã§ãé«äŸ¡ãªè»ã«ããããã®ãã«ããä¹ããè»ãããå Žåã¯ãããããæ倧éã«çµãããšã¯çã«ããªã£ãŠããŸãã ç§ã®å®è·µã§ã¯ã顧客ã®çŽ10ïŒ
ãããã®ãããªæé©åã®äœ¿çšãæ£åœåãããç¶æ³ã«ãããŸããã
ãªãCïŒãªã®ã§ããïŒ .NETã®äžçã§ã¯ãããã©ãŒãã³ã¹ã¯ãã©ã¹ã§ããäžæ¹ã§ãC ++èšèªã¯ããæè»ã§ããããã®ã³ã³ãã€ã©ã¯ããŒããŠã§ã¢ã®æé©åã«ããéç¹ã眮ããŠããŸãã äžæ¹ãC ++ã³ãŒãããµããŒãããããã®äŸ¡æ Œã¯ãããŸãããã¹ãŠã®éå©ãªäººããã©ã¹ãç¥ã£ãŠããããã§ã¯ãªãããã§ãã ä¿¡å·/ç»åãåŠçãããããç¥ã£ãŠããå Žåã¯ãå
ã«é²ãã§ãã ããã ããã§ãªããã°-æ²ããããªã äŸãšããŠãstackoverflowã®ã¡ã³ããŒã¯ãã³ãŒãããŒã¹ã®æãäºçŽ°ãªéšåããé ãé¢ããŠæ倧ã®ããã©ãŒãã³ã¹ãéæããå¿
èŠãããå Žåã®äŸã瀺ããŸãããã©ã¹ãæ¿å
¥ããããšã¯æ£åœåãããŸãããé©åãªå°é家ãããªãããããµããŒãã®è€éããåå¢ããŸãã ã³ãã³ãã«C ++ã¹ãã·ã£ãªã¹ããå°å
¥ããããšã¯å±éºã§ã;誰ããã¹èŠå ããã£ã³ã»ã«ããŸããã§ããã
äœã¬ãã«ã®æé©åã®å
žåçãªå¹æã¯äœã§ããïŒãã¡ãããããã¯ç¶æ³ã«å€§ããäŸåããŸãã ãã¯ãã«åã«ãããã¢ã«ãŽãªãºã ãæ倧8åé«éåã§ããŸãã ãã£ãã·ã¥-æ倧10åã æ£ããæ瀺ã®éžæã«ããæ°åããŒã»ã³ãã åèšãããšãã³ãŒãã100åé«éåã§ããŸãã ç¹°ãè¿ããŸããããããããã¯ãã«å/䞊ååã«ãã£ãŠå éã§ãããµã€ã¯ã«ã¯1ã€ã ãã§ãã ãŸãã¯ããã®ãããªå Žæãæ°ååãããããããŸããã ãã¡ããã10åã®æé©åã®å
šäœçãªå¹æã¯ããé¡èã«ãªããŸãïŒçµ¶å¯Ÿçã«ïŒã
ããŒããŠã§ã¢ãããã¯ã¹ã®æ€çŽ¢æ¹æ³ çµéšãçŽæãå®æããããŒã«ïŒã©ã³ãã æé©åã¯ä¿¡ããŠããŸããã IntelãšAMDã¯çŸåšãããŒããŠã§ã¢ã®åäœãç£èŠãããŠãŒãã£ãªãã£ããªãªãŒã¹ããŠããŸããIntelã®å Žåãããã¯AmplifierãAMDã®å ŽåãCatalystãŠãŒãã£ãªãã£ã§ãã 以åã¯ãéåžžã«åå§çãªãã®ã§ããããã£ãã·ã¥ã®ãã¹ãç¹å®ããåœä»€ã§å°ãå©ããŸããããã¡ã¢ãªã®æé©åãããã¯ãã«åã®é©çšãŸã§ãããŸããŸãªãã³ããæäŸããŸãã éçºè
ã¯ããããã®ãã³ããå®çŸããæ¹æ³ãç¥ãå¿
èŠããããŸããããŠãŒãã£ãªãã£ãå®å
šã«åæããŸãã
ãããã£ãŠãIntelããã³AMDã®ã¬ã€ãã ãããã¯ã©ããããéããŸããïŒ ä»ã«åŠã¶ããšã¯ãããŸããïŒ.NETã®äžçã®ãã¹ã¯ããããšãµãŒããŒã®å Žåãããã2ã€ã§ååã§ãããã¬ã€ããåœä»€ã»ãããšã»ãŒåãã§ãã ä»ã®èª°ãããã®åžå Žã«åå
¥ããå Žåãæ瀺ã¯ã»ãŒåãã§ããå¯èœæ§ããããŸãã
ã¢ãã€ã«ããã€ã¹ã®å ŽåãARMããããåŠç¿ã«ããã«æéãå¿
èŠã§ããç°ãªãåœä»€ã»ãããç°ãªãã¢ãŒããã¯ãã£
çŸåšãBitCoinããã€ãã³ã°ããããã®ããã€ã¹ããããŸããCUDAãããããã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã«é¢ããåãã¡ãã€ããŸãã ãåã¿ã¹ã¯ã«å¯Ÿããç¬èªã®æ¯æããã®æ代ã¯ç§ãã¡ãåŸ
ã£ãŠããŸããïŒ ãããšããJSã ãã«ããŸããŸãªãã¬ãŒã ã¯ãŒã¯ãæ®ããŸããïŒåãçš®é¡ã®ããŒããŠã§ã¢ãèŠãããªãããšãé¡ã£ãŠããŸãã ä»ã§ããç¹æ®ãªããŒãã«å ããŠãåããããã³ã€ã³ãåŸæ¥ã®ãããªã«ãŒãã§ãã€ãã³ã°ã§ããŸãã ãã¡ããããã®åŸåã¯èå³æ·±ããã®ã§ããã匷åãªçºå±ã¯æåŸ
ã§ããŸããã æè»æ§ã«æ¬ ãããœãªã¥ãŒã·ã§ã³ïŒ1ã€ã®ã¿ã¹ã¯ã®ããŒããäœæããŸãã ã€ã³ãã«ã¯ãææ°ã®ããã»ããµããããªã«ãŒããšäŸ¡æ Œ/å質ã®äºææ§ãç¶æã§ããããã«ãªãããšãç®æããŠããŸã
ã³ã³ãã€ã©ã¯ã©ãã§ããïŒ Javistsã«ã¯ãããããããããããŸãããç§ãã¡ã®ãã®ã§ããïŒãã®è³ªåã«å¯Ÿããçãã¯ã2ã€ã®éšåã§æ§æãããŠããŸãã äžæ¹ã§ãä»ã§ã¯ããªãé«éã§ç°¡åã«æ¡åŒµå¯èœãªRoslynã³ã³ãã€ã©ããããããã§ååã§ãã äžæ¹ãJITã³ã³ãã€ã«ã§ã¯äºæ
ã¯ããã«æªåããŸãã CoreCLRãã芧ãã ãããå€ãã®å¯èœãªæé©åã¯äœ¿çšãããŠããŸãããæéãç¯çŽã§ããŸãã ãã ãããããžã§ã¯ãã¯ãŸã è¥ããäœæ¥ã¯ç¶ç¶ãããŠããŸãã ãããã«ããïŒæ°ããã³ã³ãã€ã©ãç»å Žããã©ã®ãã·ã³ãã©ã®ãã©ãããã©ãŒã ã§ãã³ãŒããã³ã³ãã€ã«ã§ããããã«ãªãã°ãããã¯ç¥çŠã§ãã æšæºã®ç«¶äºãå§ãŸã£ãå Žåããšã³ã·ã¹ãã ã¯èŠããã ãã§ãã
åã®äŒè°ã®1ã€ã§ãç°ãªãããã»ããµäžã§ç°ãªãåäœãããã³ãŒãã«ã€ããŠèšåããŸããã ãã®åé¡ã¯ããŒããŠã§ã¢ã®æé©åã§ã©ãã»ã©æ·±å»ã§ããïŒ ç¹ã«ãã¯ã©ãŠãã§äœæ¥ãããšããããã¯ã©ãã»ã©éèŠã§ããïŒããã¯äžè¬ã«ãã¡ã¢ãªãI / Oãªã©ã®å€ãã®é åã§åžžã«çºçããåé¡ã§ãã SSDã§ããã°ã©ã ããã¹ãããããé
ãããã€ã¹ã§å®è¡ãããã¯ã©ãŠãã§ãæ·±å»ãªããã©ãŒãã³ã¹ã®åé¡ãçºçããŸãã ã¯ã©ãŠããšããã°ãããã©ãŒãã³ã¹ãšäŸ¡æ Œã«åã£ãå¿
èŠãªããã»ããµãèªåã§æ³šæããŸãã 移è¡ã«ãã£ãŠåé¡ãçºçããå¯èœæ§ããããŸãããæ°å¹Žåãããã®ãããªåé¡ã«ééããŠããŸããã ãããã«ããããã€ã¯ããœããã¯ææ¥ã®æã«åãçš®é¡ã®ãã¹ãŠã®ããã»ããµãå€æŽããããšã決å®ããå¯èœæ§ã¯äœãã§ãã æŽæ°ã¯å¢åã§ãããããæ°å¹Žã®ç§»è¡ãæåŸ
ã§ããŸããããã¯æºåã«ååã§ãã
ã³ãŒãã®è€éãã¯ã©ãã§ããïŒ ãã®ã¬ãã«ã®æé©åã«ã¯ã©ããããæéãããããŸããïŒããŒã ã®1人ã ããããã«å¯Ÿå¿ã§ããå Žåã¯ãæ©åšã賌å
¥ããããšããå§ãããŸãã ããããéåžžããããã¯1ã€ã®ããã©ãã¯ããã¯ã¹ãã«ããŒã«ã©ã€ãºã§ããŸããæšæºã¢ããªã±ãŒã·ã§ã³ã¯ããŒã¿ããŒã¹\ãµãŒãã¹ã«ãªã¯ãšã¹ããéä¿¡ããJSON \ XMLãã·ãªã¢ã«åïŒãïŒãããã°ãæžã蟌ã¿ãŸãã æ¬åœã«è€éãªæé©åã¯ãã£ãã«äœ¿çšããããéåžžã¯åçŽãªãã¯ãã«åã䜿çšãããããšã«æ³šæããŠãã ããã ããã§ã¯ãã³ã¬ã¯ã·ã§ã³ãšåæ§ã«ãã»ãšãã©ã®å Žåãæšæºãªã¹ã\é
å\èŸæžã䜿çšããä»ã®ãªãã·ã§ã³ã¯ããŸãèæ
®ãããŸããã
ããçš®ã®ãœãªã¥ãŒã·ã§ã³ãäœæããããããã©ãã¯ããã¯ã¹ã«é ããååãããã殺ãããšãã®ç¶æ³ã¯ã©ã®ããããããŸããïŒ ããšãã°ããã£ãã·ã¥ãæäœããŠãããšãã«ãååãããã»ããµããšã«10åã®ã¹ã¬ãããåŒã³åºããšãå€æ°ã®ãã¹ãçºçããŸããå¯èœã§ãã ååã¯ããã©ãã¯ããã¯ã¹ã®å¶éãç解ããå¿
èŠããããŸãã ããã«ãååž°ã«ããèªåãã¹ããå¿
èŠã§ãã
Andrey DreamWalker Akinshinã¯ãããã©ãŒãã³ã¹ã®èªåãã¹ãã¯å±éºã§ãããå®å
šã«ä¿¡é Œã§ãããã®ã§ã¯ãªããšè¿°ã¹ãŸããã WindowsãæŽæ°ããããããšãŒãžã§ã³ããã€ã³ã¹ããŒã«ããããã·ã³äžã®ä»ã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ãããããããã¹ãŠã®ãšãŒãžã§ã³ãããŸã£ããåãããã«æ§æããå¿
èŠããããŸããã¯ããããã¯æšæºçãªãã³ãããŒã¯ãã¹ãã®åé¡ã§ãã éåžžãæåã®å€±æãŸãã¯2çªç®ã®å€±æã¯ç¡èŠã§ããŸãããé£ç¶ããŠ5ã€ã®å€±æãããå Žåã¯ãæåãã¹ããå®è¡ããå¿
èŠããããŸãã
ä»ã®èšèªïŒ.NETã§ã¯ãªãïŒã§äœæ¥ããå Žåãéã®ç¥èã¯ã©ã®çšåºŠåœ¹ç«ã¡ãŸããïŒç§ã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ãäž»ã«C ++ãå°ãã®C ++ãæ±ããŸãã äžè¬çã«ãçãã¯èšèªã«ãã£ãŠç°ãªããŸããã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãç°¡åã«ãªãã»ã©ãã¡ãªããã¯å€§ãããªããŸãã ç§ãèŠããŠããéããåãCïŒã§ãã€ã³ã¿ãŒãJavaãæäœã§ããŸãã ãããŠJSã§ã¯ããã®ãããªããšãæ°ã«ããããšã¯äžè¬ã«ç¡æå³ã§ãã ããããäžè¬çã«ããã®ç¥èã¯ãµãŒããŒèšèªã§äœæ¥ãããšãã«æããã«åœ¹ç«ã¡ãŸãã
ã«ãŒã¬ã³ã»ã·ã¢ã³ã€ã³
ã«ãŒã¬ã³ãããªãã¯é·ãé.NETã®å
éšãç 究ããŠããŸããã ããã¯èå³ãŸãã¯å®çšçãªå¿
èŠæ§ã§ããïŒ ããªãã®å®è·µãããJITæé©åã®æãå¹æçãªäŸãããã€ãæããŠããã ããŸããïŒæåã¯ãã¡ãããèå³ããããŸããã ããããéå»4幎éã.NETã§ãã«ãã¹ã¬ããããã³åæ£ã¢ããªã±ãŒã·ã§ã³ãéçºããŠããŸãããããã«ã¯ããã©ãããã©ãŒã ã®ç¹å®ã®æ©èœããã®æ§é ã«é¢ããç¥èãå¿
èŠã§ãã ããšãã°ãGCã®äœæ¥ãå匷ããããšã¯ã§ããŸããããã¹ãŠãçžäºã«é¢é£ããŠããŸãã ãã¬ãŒã ã¯ãŒã¯APIãšJITã®äž¡æ¹ãéèŠãªåœ¹å²ãæãããŸãã ã¡ãªã¿ã«ãåŸè
ã¯ã³ãŒãã®ããã©ãŒãã³ã¹ã«çŽæ¥è²¬ä»»ããããŸãã
ç§ã«ãšã£ãŠãæãå¹æçãªæé©å/æ©äŒã®1ã€ã¯ãã©ã³ã¿ã€ã èªäœãšJITã®é£æºã§ããããã§ãã CLRã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹äžã®ã¡ãœããã®ãã£ã¹ãããã¯éåžžã«èå³æ·±ãã§ãã
ç§ã®ã¬ããŒãã®ãããã¯ã®1ã€ã¯ããã®ãããã¯ã«åœãŠãããŸãã
DotNext 2016 Moscowã§ã¯ãRyuJitã«çŠç¹ãåœãŠãŸããããããšãJITããªã¢å
šè¬ã«ã€ããŠè©±ããŸããïŒäŒè°ã§ã¯ãRyuJITãšæŽæ°ãããx86ã®äž¡æ¹ãæ€èšããŸãã ããã¯2ã€ã®èŠå ã«ãããã®ã§ãã 第äžã«ãé
ããæ©ããã32ãããã¢ããªã±ãŒã·ã§ã³ã¯ã·ãŒã³ãå»ããªããã°ãªããŸããã 第äºã«ãRyuJITã¯64ãããã¢ããªã±ãŒã·ã§ã³å°çšã§ãããARMãžã®ç§»æ€ãå«ãå€ãã®åªåãéçºã«è²»ããããŠããŸãã x86ã³ã³ãã€ã©ã®åäœã®è©³çŽ°ãªèª¿æ»ïŒããªãäºæž¬å¯èœïŒã¯åççã§ãããçæçã«ã®ã¿ã§ãã ã¬ã¬ã·ãŒã®x64 JITããããŸãããx86ãããå¹çãäœããªããŸãã
ã¬ããŒãã®æ
å ±ã.NETã®ãã¬ãŒã ã¯ãŒã¯å
ã§åœ¹ç«ã€ã ãã§ãªãããããŒãžããã©ãããã©ãŒã ã®äžçã®åºæ¬çãªæŠå¿µãç解ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã GCãšJIT'aãããã€ã¹ã®ã¡ãœãããšãªããžã§ã¯ããããã³ãã³ãããŒã¯ã®ååã«éç¹ã眮ãããŸãã
é©åãªã³ã¬ã¯ã·ã§ã³ãŸãã¯ã¢ã«ãŽãªãºã ãéžæãããšãããã°ã©ã ã倧å¹
ã«é«éåã§ããŸãã JITæé©åã¯ã©ã®çšåºŠå¹æçã§ããïŒ åœŒãã¯éåžžã®ããŒã«ãšã¿ãªãããšãã§ããŸããïŒJITã³ã³ãã€ã©ãŒã¯ãã³ãŒãå¹çãšãã€ãã£ãããã©ãŒãã³ã¹ã®ãã©ã³ã¹ãåžžã«åã£ãŠããŸãã çæãããã³ãŒããæé©åããçæããã»ã¹èªäœãé«éåããå¿
èŠããããŸãã
ãã®ãããçè«ããå€ãã®æé©åãç¥ãããŠãããC ++ã³ã³ãã€ã©ã§å®è£
ãããåæã«RyuJITã«ç§»è¡ããŸãã ç¹ã«ãã³ããŒäŒæææ³ã¯ãx86 JITã§å¯äœçšãªãã§åäœããããã¬ã¬ã·ãŒx64ããã³RyuJITã§æããã«ãªããæªããã³ãŒããå£ãå¯èœæ§ãããããšæããããããããŸããã
RyuJITã®ç»å Žã«ãããããªã人æ°ã®ããSIMDæ©èœãç»å ŽããŸããã ãžã£ã¹ãã€ã³ã¿ã€ã ã³ã³ãã€ã«ã®å©ç¹ã®1ã€ãæããã«ãªããŸããïŒã³ã³ãã€ã©ãŒã¯ãããã»ããµã¢ãŒããã¯ãã£ããã®å Žã§æ±ºå®ããæ°ãããã¯ã¿ãŒAPIã䜿çšããã³ãŒãã¯ãAOTãšã¯ç°ãªããSSE2ãŸãã¯AVXåœä»€ïŒãŸãã¯ä»ã®SIMDã»ããïŒã«å€æãããŸããæå°éã®CPUã¢ãŒããã¯ãã£ãæå®ããã³ã³ãã€ã«ã ããšãã°ãã³ãŒãã»ã¯ã·ã§ã³ã®æ¡ä»¶ä»ãã³ã³ãã€ã«ããµããŒããããã¹ããŒããªãC ++ã³ã³ãã€ã©ãªã©ã®ãªãã·ã§ã³ããããŸãããããã¯ãã§ã«ãå¥ã®ãªãã©ãããã§ãã
éçºã®äž»ãªèŠä»¶ã¯ãè€éãã®ç®¡çã§ãã JITã®ã³ãŒãã¯ã©ã®ãããè€éã§ããïŒ ãµããŒãã¯ã©ã®ãããè€éã§ããïŒã³ã³ãã€ã©ã®äž»ãªç®æšã¯ãããŸããŸãªæé©åã䜿çšããŠãçµæã®ã³ãŒãã®åäœãå€æŽããªãããšã§ãã ãããŠãããã§äž»ãªåé¡ãæããã«ãªããŸãïŒæé©åãããŠããªãã³ãŒãã§ãããç°ãªãã¢ãŒããã¯ãã£ã§ç°ãªãåäœãããããšãã§ããŸãã ããã¯KOã®ããã«èãããŸãããããã§ãã çç±ã¯ãéå°ãªé åºã®ä¹±ããå®è¡ã«å¯Ÿããããã€ãã®CPUã®æã§ãã çŸåšããã¹ã¯ãããããã³ãµãŒããŒã§ã¯ãx86-64ã¢ãŒããã¯ãã£ãæ¯é
çã§ããããã¯ãã¢ãã€ã«ã·ã¹ãã ã®ããã«ARMãã©ãã«ã§ãããå Žåãåœä»€ã®é åã«é¢ããŠéåžžã«ä¿å®çã§ãã ãããèæ
®ã«å
¥ããå¿
èŠããããŸãã CïŒã¯æ¢ã«ã¢ãã€ã«ããã€ã¹ã«èœã¡çããŠãããx86ã·ã¹ãã ã§ã³ãŒããèšè¿°ããŸãããšãã¥ã¬ãŒã¿ã¯ããããx86ã³ãŒãã䜿çšããŸãã
éçºè
ãšããŠãã¹ãŠã®è€éããè©ã«ããã£ãŠããããã«èŠãããããããŸããããããã¯éšåçã«çå®ã§ãããJITèªäœãx86-64äºæã³ãŒããçæããããšããŠããŸãã
äžè¬ã«ãã¡ã¢ãªã¢ãã«ã¯ãé åã®èš±å®¹æ§ãå¯èœãªæé©åãããã³ãããã®äºææ§ã®è³ªåã«çããå¿
èŠããããŸãã æ®å¿µãªããã.NETïŒã€ãŸããCLIå®è£
ïŒã§ã¯ãããã«ã€ããŠã®èª¬æãäžååã§ãã ãããã
ECMA335èŠæ Œã¯ã12.6ã¡ã¢ãªã¢ãã«ãšæé©åãã®ç« ã§ã¡ã¢ãªã¢ãã«ã®å®çŸ©ã瀺ããŠããŸãããããã¯åŒ±ãã¢ãã«ãåããã·ã¹ãã ãèšè¿°ããŠãããx86ã¯åŒ·ãã¢ãã«ãåããã¢ãŒããã¯ãã£ã§ãã ããã©ã«ãã®ååŸ/解æŸã»ãã³ãã£ã¯ã¹ã䜿çšãããŸãã CLR 2.0ãããã¢ãã«èªäœã¯x86ã«è¿ã¥ããJITèªäœã¯ARMããã³ItaniumïŒçŸåšãµããŒããããŠããŸããïŒãšäºææ§ã®ããã³ãŒããçæãå§ããŸããã
ã芧ã®ãšããããã®ãããã¯ã¯éåžžã«éèŠã§ãã ãäœããã¹ããããšãã質åã«å¯Ÿããçãã ãããã®åé¡ã解決ããæ¢è£œã®ããªããã£ããšAPIã®äœ¿çšã§ãã
éåžžãæé©åã®åã«ãããã«ããã¯ããæ¢ããŠããŸãã äžäœã¬ãã«ã§æ€çŽ¢ã§ããã¢ãããŒããšããŒã«ã¯äœã§ããïŒäž»ãªããŒã«ã¯ããããã¡ã€ã©ãŒãããã©ãŒãã³ã¹ãããã¡ã€ã©ãŒããŸãã¯ã¡ã¢ãªã§ãã
ã¢ããªã±ãŒã·ã§ã³ã§ããŒã«ã«ã§æãé »ç¹ã«çºçãã2ã€ã®ã¯ã©ã¹ã®åé¡ãç¹å®ããŸããããã»ããµãã£ãã·ã¥ã®æé©ã§ãªã䜿çš+ã¢ã©ã€ã¡ã³ããããŠããªãããŒã¿ã®åŠçãšé«ãããåæã§ãã
åœãã®å
±æã®ãããªæŠå¿µã¯é·ãéçããµãŒã¯ã«ã§ç¥ãããŠããŸããããæè¿ã«ãªã£ãŠå¢ããåŸãŠããŸãã ãã®ãããªå¯äœçšãæžããã«ã¯ãããŒã¿æ§é ããªãã¡ã¯ã¿ãªã³ã°ããå¿
èŠãããå ŽåããããŸããããã«ãããã·ã¹ãã ã®å¿çæ§ãå
šäœçã«åäžããŸãã
é«äŸ¡ãªåæã®åé¡ã®è§£æ±ºçã¯ãå®éã«ã¯éåžžã«éèŠã§ããããã¯ããªãŒã³ãŒããžã®åãæ¿ãã¯ç°¡åã§ã¯ãããŸããã æ€èšŒã¯ããã«å°é£ã§ãã ãŸããã¢ã ãã«ã®æ³åŸã¯åãæ¶ãããŠããŸããã
ã³ãŒããšãããã¡ã€ã©ãŒããã°ãã確èªããŠãåé¡ãæããã«ãªããªãå Žåã¯ã1ã€äžã®ã¬ãã«ã«ç§»åããå¿
èŠããããŸãã CPU ããã§ã¯ãããŒããŠã§ã¢ããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã圹ç«ã¡ãŸãã ãéãã«ãŠã³ã¿ãŒã ãã£ãã·ã¥ãã¹ãªã©ã調ã¹ãããšãã§ããŸãã éåžžããããã¯ãããããããŸãã èªã¿åãã«ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã APIã䜿çšã§ããŸãããããã¯ãã®ãããªãããã¡ã€ã©ãŒãèªåã§äœæããããšãæå³ããŸãã ã¿ãŒã²ããããã»ããµã®è£œé å
ãæäŸããåžè²©ã®ããŒã«ã䜿çšããããšããå§ãããŸãã
ãã³ãããŒã¯ ãªãŒãã¿ã€ã ãçãã»ã©ãã¬ãŒããå€ããªããŸãã 枬å®ã«äœ¿çšããããŒã«ã¯äœã§ããïŒç§ã¯è¡šæãããè«æã«å®å
šã«åæããŸãã ããããäœãã枬å®ããåã«ããŸãã¡ããªãã¯ã¹ã決å®ããå¿
èŠããããŸãã 枬å®å¯Ÿè±¡ïŒã¡ã¢ãªæ¶è²»ãCPUå¹çãå€æŽå¯èœãªã»ã¯ã·ã§ã³ãªã©ã å®éã.NETã¯GCã®ããäžçã§ãããã·ã¹ãã ã®ãšã³ããããŒã倧å¹
ã«å¢å ããŸãã äžæ¹ã§ã¯ããã³ãããŒã¯ã¯ã³ãŒãã®ãã®ã»ã¯ã·ã§ã³ããé«éãã§ããããšã瀺ãããšãã§ããŸãã ããããããã¯å¹æçãšããæå³ã§ã¯ãããŸããã ãããããã¡ã¢ãªæ¶è²»éãéåžžã«å€§ãããããåŸã§ã¬ããŒãžã³ã¬ã¯ã·ã§ã³èªäœã§æããããããã«ãªããŸãã ãããã£ãŠã質åã®å®çŸ©ã§ã¯ããäœãå¿
èŠã§ããïŒã-ç§ã¯ç 究ãå§ããŸãã
ãã³ãããŒã¯ã®åé¡ã¯ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã®å
šäœåã枬å®ããªãããšã§ãã
ãã³ãããŒã¯ãäœæããã«ã¯ã2ã€ã®ã¢ãããŒãããããŸããã³ãŒãã«åã蟌ã¿ãã«ãŠã³ã¿ãŒãã䜿çšããïŒãããã¡ã€ã©ãŒã䜿çšããã¢ãããŒãã®1ã€ïŒããã¢ããªã±ãŒã·ã§ã³ã®åã
ã®éšåããã¹ããããããã€ã¯ããã³ãããŒã¯ãå®è¡ããŸãã
1ã€ã¯éåžžã«å
æ¬çãªã¢ãããŒãã§ãããããã©ãŒãã³ã¹ãããã¡ã€ã©ãŒãšã¡ã¢ãªãããã¡ã€ã©ãŒã䜵çšããã®ãæé©ã§ãã çµæã¯å®éã®ã³ãŒããšå€å°ç°ãªãå ŽåããããŸãïŒçµå±ãã³ãŒãã¯æžãæããããŸãïŒããå
šäœåã瀺ããŠããŸãã ãã®ãããªããŒã«ã¯ãããããããŸã-ããããéžæãããšãã®å©äŸ¿æ§/奜ã¿ã®åé¡ããããŸãã
2çªç®ã®æ¹æ³ãç°¡åã§ã¯ãªããæ£ç¢ºãªæž¬å®ãçµ±èšã®ãããã¯ãããã³ãã³ãããŒã¯ã³ãŒãèªäœã®çµæãžã®åœ±é¿ãæå°éã«æããå¿
èŠããããŸãã ãã®ãããªã³ãŒããæžãããšã¯é£ãããéå±ã§ãã 泚ç®ãã¹ãBenchmarkDotNetã©ã€ãã©ãªã®åºçŸã«ãããããã¯ããç°¡åã«ãªããŸããã ç§ã¯ããã䜿çšããŸãã
éå»æ°å¹Žã§ã.NETã®äžçã¯ã³ã³ãã€ã©ãŒã§ããè±ãã«ãªããŸããã ãã®ç¹ã§Javaã«è¿œãã€ãããšã«æåããŸããïŒ ããã¯äŸ¡å€ããããŸããïŒãã¡ãããHotSpotã®JITã¯çŽ æŽãããã§ãã ããããåãã©ãããã©ãŒã ã¯ãã®ãŠãŒã¹ã±ãŒã¹ã«çŠç¹ãåãããŠããŸãã ãã®ãããJavaã§ã¯ãããã©ã«ãã®ã¡ãœããã¯ãã¹ãŠä»®æ³ã§ãã ããã¯åé¡ãåŒãèµ·ãããŸãïŒã¡ãœããåŒã³åºããæé©ã«å®è£
ããæ¹æ³ã¯ïŒ åçãªæé©å解é€æè¡ãå©ãã«ãªããŸãã ã¡ãœããã®ãªãŒããŒã©ã€ãããªãå Žåãéä»®æ³ãšèŠãªãããŸãã çžç¶äººã衚瀺ãããå ŽåãJITã¯ã³ãŒããåã³ã³ãã€ã«ããŸãã .NETã§ã¯ããã¹ãŠã®JITã³ã³ãã€ã©ãŒãã³ãŒãã®äžéšã®ã»ã¯ã·ã§ã³ïŒã¹ã¿ãïŒãåã³ã³ãã€ã«ããææ³ã䜿çšããŸãã äžã§è¿°ã¹ãããã«ãéåžžã«èå³æ·±ãã®ã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®ç¶æ³ã§ãã
ç§ã®æèŠã§ã¯ãç°å¢ã®æ©èœã«å¯Ÿããããå³å¯ãªã¢ãããŒãã«ãããHotSpotã§å¯èœãªå€ãã®æé©åã蚱容ãããŸãã.NETãšCïŒã¯ããŒããŠã§ã¢ã«è¿ãããã€ãã£ãã³ãŒããšé£æºããŸãããJavaã¯ããã§ã¯ãããŸããã ããšãã°ãJVMãšCLRã®äž¡æ¹ã®ç°å¢ã¯äž¡æ¹ãšãæé©ãªãã£ãŒã«ãã¢ã©ã€ã¡ã³ãã«é¢äžããŸãããåŸè
ã¯Cãšåæ§ã«æåå¶åŸ¡ãå¯èœã«ããŸããJavaã®å Žåã@ Contendedã¢ãããŒã·ã§ã³ã衚瀺ãããŸããã.NETã®StructLayoutããã³FieldOffsetå±æ§ãšå®å
šã«åçã§ã¯ãããŸããã ãŸããCPUã¬ãžã¹ã¿ã®ããç©æ¥µçãªäœ¿çšãšããç©æ¥µçãªã€ã³ã©ã€ããŒãããã³C2ïŒæçµçãªæé©åã³ã³ãã€ã©ïŒã¯JVMã«æ確ãªãã©ã¹ãäžããŸãããCLR JITã¯fastcallåŒã³åºãèŠçŽã«åŸããã€ã³ã©ã€ã³ã¯å°ãªããªããŸãã
ãããã.NETã¯å®å
šã§ã¯ãããŸããã 誰ããããã䜿çšãã誰ããããã䜿çšããŸããã JIT'aã®æé©åã§ã¯äžååãªå Žåã¯ãæäœæ¥ã§æé©åããŠãã ããã
RyuJITã¯ãŸã è¥ãã³ã³ãã€ã©ã§ãããäžéšã®ã¿ã¹ã¯ã§ã¯ãã³ãŒãã®å質ãæ¹åãããŠããããšã«æ°ä»ããŸããïŒã¬ã¬ã·ãŒx86ããã³x64ãšæ¯èŒããŠïŒãããã¯æå ±ã§ãã
æé©åã®çµæãã³ãŒãã¯ã©ã®çšåºŠè匱ã«ãªããŸããïŒ çµéšã®å°ãªãååããããç Žãå¯èœæ§ã¯ã©ããããã§ããïŒåæïŒïŒãã®ããã«æé©åãããã³ãŒãã®ã»ã¯ã·ã§ã³ã§ã¯ãã觊ããªãã§ãã ããïŒããªã©ã®ã³ã¡ã³ããæ®ãå¿
èŠãããããã«æããŸãã æé©åã¯éåžžãæ§é ã®æ§é ããã£ãŒã«ãã®å Žæãã¡ãœããã®åŒæ°ã®é åºãªã©ã«åœ±é¿ããŸãã ããã«ãããã³ãŒããèªã¿ã«ãããªãå¯èœæ§ããããŸãã ããšãã°ãçç£çãªã³ãŒããèšè¿°ããå ŽåãLINQã¯ãŸã£ããçºçããŸããã 代ããã«ãããã»ã©å€ãã®ã¡ã¢ãªãå²ãåœãŠãªãã¡ãœããã䜿çšããããã©ãã§ãã«ãŒãçšã®åçŽãªæ§é ã䜿çšããå¿
èŠããããŸãã åå¿è
ã«ãšã£ãŠã¯ãããã¯èŠèŠãããã³ãŒããç·šéãå§ããŸãã
æé©åã®æšæºã¯ãã¢ã«ãŽãªãºã \ãã£ãã·ã¥\䞊ååã§ãã ãã£ãã·ã¥ãšåæå®è¡ã¯JITæé©åã«ã©ã®ããã«åœ±é¿ããŸããïŒ ãããã¯ïŒ è£å®çïŒææ°ã®JITã³ã³ãã€ã©ãŒã«ãã£ãŠå®è¡ãããäž»ãªæé©åã®1ã€ã¯ãã«ãŒãã®å±éã§ãã ãããææ°ã®CPUã®åå²äºæž¬ã«ã©ãã ã圹ç«ã€ããé倧è©äŸ¡ããããšã¯å°é£ã§ãã 確ãã«ãå·»ãæ»ãèªäœã¯ãå€ãã®æ¡ä»¶ãæºããããŠããå Žåã«ã®ã¿ãã¬ã¬ã·ãŒx64 JITãå®è¡ã§ããŸãã RyuJITããã«ã¢ããããŸãããx86ã®å·»ãæ»ãã¯éåžžã«ãŸãã§ãã åœä»€ã䞊è¡ããŠå®è¡ãããšãã³ãŒãã倧å¹
ã«é«éåãããå ŽåããããŸãã .NETã®JITã¯ãã®ç¹ã§æãé«åºŠã§ã¯ãããŸããããçæãããã³ãŒãã®å
šäœçãªããã©ãŒãã³ã¹ã¯æšæºã«éããŸãã
ãã1ã€ã®çŽ æŽãããããŒãã¹ã¯ãRyuJITã§ã®ããç©æ¥µçãªã€ã³ã©ã€ã³å±éã§ããããã¯æå ±ã§ãã
JITæé©åã¯ãWin-LinuxãIntel-Amd-ARMã®ç§»è¡ãã©ã®ããã«å¶éããŸããïŒæé©åèªäœã¯å¶éãããŠããŸããã CLRã¯Win32 APIã«åŒ·ãçµã³ä»ããããŠããŸãïŒCoreCLRãäŸå€ã§ã¯ãããŸããïŒã ã¯ããPlatform Abstraction LayerããããŸãããããšãã°ã軜éããã¯ïŒã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ïŒãªã©ã¯ä»ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ç§»æ€ãããŠããŸãã æè¿ãŸã§ãããã¯ã°ã©ãŠã³ãGCã¯Linuxäžã®CoreCLRã§å©çšã§ããŸããã§ããããã³ãã¥ããã£ã®å©ããåããŠããããã¯ãã®ç¶æ³ãä¿®æ£ããŸããã
Intel-Amdã«ã€ããŠè©±ããšãIntelããã»ããµã®æ©èœã«ããéç¹ã眮ããŠããããã«æããŸãã ARMã®RyuJITããŒãã¯ç©æ¥µçã«éçºãããŠããŸãã ãã®ããã»ã¹ã¯ãŸã é²è¡äžã§ã-ã³ãŒãçæã«ãã°ããããŸãããã³ãã¥ããã£ã¯ãã®ééãæ¯æŽããŸãã ã³ãŒããã·ã³ã°ã«ã¹ã¬ããã®å ŽåãARMã§ã®åäœã®éãã«æ°ä»ãããšã¯å°é£ã§ãã å®å
šã«é äžåã®å®è¡ã¯ããã«ãã¹ã¬ããã®ã³ãŒãã§æããããŸãã ããããç§ãã¡ã¯ãã®åé¡ã解決ããŸãã
ãããã®ã€ã³ã¿ãã¥ãŒãèªãã§ååã§ã¯ãªãå Žåã¯ã DotNext 2016 Moscowã«ã¢ã¯ã»ã¹ããŠãã ããã SashaãšKarlenã«å ããŠã圌ãã¯ããã§ã®ããã©ãŒãã³ã¹ã«ã€ããŠæ¬¡ã®ããã«è¿°ã¹ãŠããŸãã