ãŸãããã«ããŽãªãªããã¹ããŒã«ãŒãããã€ããããŸãã ãããã¯ã圌ãèªèº«ãå¥ã®äŒè°ã«èšå ¥ã§ãã人ã ã§ãã ããªãã¯åœŒãã®ååãç¥ã£ãŠããŸãïŒ ãžã§ããªãŒã»ãªãã¿ãŒ ã ããã«ã»ãšã·ãã©ãŽã£ãã ã ã°ã¬ãã°ã»ã€ã³ã° ã
éåžžãã¹ããŒã«ãŒã®é£ã®Habréã®èšäºã§ã¯ãããã«åœŒã®åçãæäŸããŸãã ãžã§ããªãŒãšããŒã«ã®å Žåãç¹å¥ãªå Žå-ããªãã¯æ¬ã®è¡šçŽã«ãããã®äººã ãèŠããŠããæ¹ãè¯ãïŒ
å³ã«ããã«ãšã·ãã©ãŽã£ããã®æ¬ããããŸãã 圌ã¯ãWindows InternalsãWPF CooââkbookãMastering Windows C ++ App Developmentãããã³Pluralsightã®5ã€ã®ã³ãŒã¹ã®èè
ãšããŠç¥ãããŠããŸãã C ++ã«ãèå³ãããå ŽåãPavelã¯æè¿C ++ã¡ã¢ãªã¢ãã«ã«é¢ãããããªãYouTubeã«æçš¿ããŸããã ããã«ã圌ã¯æåãªéçºè
ããã¬ãŒããŒãè¬æŒè
ã§ããããã®åœ¹å²ã§ã¯ã»ãšãã©åœŒã«äŒããŸããã§ãã-圌ã¯ãã·ã¢ã§ã¯ã»ãšãã©èµ·ãããŸããã ãããŠãPavel-DotNextã«ãããŸãã ããã¯å€§ããªæåãšåå©ã§ããããã¹ãŠãããŸãããã圌ã¯æ¬åœã«æ¥ãã§ãããã 圌ã®æ°ããè¬çŸ©ã.NETéçºè
åãã®Windows 10ã®å
éšãã§ã¯ ã Windows 10ã®èå³æ·±ãå
éšæ©èœã«ã€ããŠèª¬æããŸãããããã®æ©èœã¯.NETéçºè
ã«ã©ã®ããã«åœ±é¿ãããµãŒãã¹ã«ã©ã®ããã«åœ¹ç«ã€ãã説æããŸãã
å·Šã¯ãžã§ããªãŒã»ãªãã¿ãŒã®æ¬ã§ãã æ¢ã«Habr ã«ã€ããŠè©³çŽ°ãªã€ã³ã¿ãã¥ãŒãè¡ã£ãŠããŸããAzureã®éçºã®æ¹åæ§ã決ãã人ãäœãèããŠããã®ãæ¬åœã«ç¥ãããå Žåã¯ãããã«è¡ã£ãŠãã ããã ãžã§ããªãŒã¯ãå€å
žçãªæ¬ã®é£ç¶ã¯ãªãšãŒã¿ãŒã§ãã 90幎代ååã«Windows 3.1ã®ããã°ã©ãã³ã°ã«é¢ããæ¬ã®ãããã§äººæ°ãåãã圌ã¯ããããŸããã§ããã 次ã®å€§ããªæ¬ãProgramming Applications for Microsoft Windowsãã¯å€å
žãšãªããåŸã«ãWindows via C / C ++ããšããŠåºçãããããã€ãã®ãšãã£ã·ã§ã³ã«èããŸããã ãCïŒçµç±ã®CLRãã§ãåãããšãèµ·ãããŸããã ãCïŒãä»ããCLRãã®æ¬¡ã®åãªãªãŒã¹ã¯ãã€ã«ãªãã®ããšäººã
ã¯äŸç¶å°ããŠããŸãïŒããèå³ããããªããã«ã³ãã¡ã¬ã³ã¹ã«æ¥ãŠãèªåèªèº«ã«å°ããŠãã ããïŒïŒã 圌ã¯çŸåšãMicrosoftã®ããŒãããŒãœãããŠã§ã¢ã¢ãŒããã¯ãã§ãããDistributed Cloud AppsïŒStorageã§åããŠããããã©ãããã©ãŒã å
šäœãæããæªæ¥ã«åŒããã蟌ãã§ããŸãã ã¯ã©ãŠãã¢ã€ãã³ã®å¹æçãªäœ¿çšã«é¢ããã¬ããŒãã§ãããã¬ã¹ãã³ã·ãã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãã«ã¢ã¯ã»ã¹ããããšã匷ããå§ãããŸãã
ã°ã¬ãã°ã»ã€ã³ã°ã«é¢ããŠã¯ ã圌ã¯ç¹ã«æåãªæ¬ãæã£ãŠããŸããã 圌ã¯CQRSãšããçšèªã®çºæè
ã§ããããã®æ¹åã§æãæåã§è±¡åŸŽçãªäººç©ã®1人ã§ãã ããããæ¢ã«ãæ³åã®ãšãããCQRSã§ã¯ãã¹ãŠãäžèŠããã»ã©åçŽã§ç解ãããããã®ã§ã¯ãããŸãããã°ã¬ãã°ã¯ãã®ãã¹ãŠã«ã€ããŠè°è«ã§ãããŸãã«ãã®äººã§ãã ã°ã¬ãã°ã®èšãããšãç¥ããããªãã圌ã¯ããã«YouTubeã§æ€çŽ¢ãã ã圌ã¯ãã€ãŠCodeBetterã§æžãã ããããŠããªããAmazonã§CQRSã®æ¬ãèŠããªãã圌ã¯ããã£ã¬ã¯ã¿ãŒExploring CQRS and Event Sourcingã®æ¬ã®çŽ¹ä»ãæžãããšãä»»ãããã¹ãã©ã³ã¯
ããŒãã³ã¢
DotNextã¯ãäž»èŠãªè¬æŒè ãç¹°ãè¿ãç»å ŽããäŒè°ãšããŠã®å°äœã確ç«ããæãè€éãªç¹å¥ãªåé¡ãæããã«ããŠããŸãã ã»ãŒãã¹ãŠã®ã¬ããŒããããŒãã³ã¢ã«å€ãããããã¯ãããã€ããããŸããããšãã°ãè€éãªãã¯ãããžãŒã®æ倧ã®ããã©ãŒãã³ã¹ãšå®è£ ã®è©³çŽ°ãæäŸããŸãã
äœã¬ãã«ã®è©³çŽ°
ãžã§ããªãŒã»ãªãã¿ãŒãšããã«ã»ãšã·ãã©ãŽã£ããã«ã€ããŠã¯ãã§ã«è©±ããŸããã ããããããã ãã§ã¯ãããŸããïŒ Raffaele RialdiãChris BaconãYegor GrishechkoãæºåããŠããããã®ãèŠãŠã¿ãŸãããã
ããŠãåãæã䜿ã£ãŠã.NETã©ã³ã¿ã€ã ãäœæããããšæã£ãããšã¯ãããŸãããïŒ ããŸããããŸãããïŒ Chris Baconã¯ããã€ããããããžã§ã¯ãDotNetAnywhereãäœæããŸãããããã¯ããã«ãã¹ã¬ãããPInvokeãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªã©ããµããŒããããæ¬åœã«äºææ§ã®ããã©ã³ã¿ã€ã ã§ãã Blazorãã¬ãŒã ã¯ãŒã¯ã®æ§ç¯ã«äœ¿çšãããã®ã¯ã圌ã®ãã®ãããžã§ã¯ãã§ãããããã«ãããWebAssemblyãã¯ãããžãŒã䜿çšããŠããã©ãŠã¶ãŒã§.NETãçŽæ¥å®è¡ã§ããŸãã ïŒã¡ãªã¿ã«ãBlazorã«ã€ããŠã®ã¬ããŒãã¯Nikita TsukanovãäœæããŸãã ããããªã¯YouTubeã«ãããŸã ïŒã äžè¬ã«ããã®DotNextã¯ãã ãããç¬èªã®.NETã©ã³ã¿ã€ã ãäœæããŸããïŒã - ã©ã³ã¿ã€ã ã®äœæã«é¢ããéåžžã«ãªã¿ã¯ã§çããã¬ããŒãã§ãã
ããã«å®çšçãªãããã¯ã«ç§»ããŸãããã DotNextã«ã¢ã¯ã»ã¹ããããšãããå Žåã¯ãRafael RialdiãšåœŒãå°éãšãããããã¯ã«æ¢ã«ç²ŸéããŠããå¿ èŠããããŸãã ããã§ãªãå Žåã¯ãä»ãããªãèªèº«ã«æ £ããæã§ãïŒ
ä»åãã©ãã¡ãšã«ã¯æ°ããã¬ããŒããçžäºéçšæ§ã·ããªãªã§ã®ã¡ã¢ãªç®¡çã®åŒ·åããçºè¡šããŸãã æ°ãã
Span<T>
ããã³
Memory<T>
APIãç»å Žãã管çãªããžã§ã¯ããžã®ç¡æå³ãªã³ããŒãè¡ãããšãªãã管çãããŠããªãã¡ã¢ãªã«ã¢ã¯ã»ã¹ã§ããããšã«æ°ä»ããããããŸããã ã¬ããŒãã®éçšã§ãRafaelã¯ãããã®APIãæãäžããIoTã®ãããªå®éã«èå³æ·±ãäŸã®è©³çŽ°ã瀺ããæ¥åžžã®æŽ»åã®åãªã人éãããããã¹ãŠå®è¡ã§ããããšã瀺ããŸãã
æè¿ãValueTaskãã¿ã¹ã¯ã®ãããªåãããã³IValueTaskSourceãæè¿ã®ããŒãžã§ã³ã®èšèªã«ç»å ŽããŸããã å€ãã®äººã¯ããããã®ã¿ã€ããååšããããšããç¥ããŸããããããŠã圌ãã®ååšãç¥ã£ãŠãã人ã
ã®ã»ãšãã©ã¯ã圌ãããªãããã§ãããç解ããŠããŸããã Egor Grishechkoã®ã¬ããŒããValueTaskïŒwhatãwhy and whyãã§ã¯ ããããã®æ°ããããŒã«ãäœã§ãããããªã䜿çšãããã®ãããã€æ£åœåãããã®ãããã€æ£åœåãããªãã®ãã説æããŸãã
æ倧ã®ããã©ãŒãã³ã¹
äœããã®æ¹æ³ã§ã®ã¬ããŒãã®ã»ãšãã©ãã¹ãŠã¯ãããšãåæ ŒããŠããŠããããã©ãŒãã³ã¹ã«é¢é£ããŠããŸãã ããã¯éçºè ã®ä»äºã®ç¹åŸŽã§ãã ãã ããç¹ã«åŒ·èª¿ãããã®ã¯ã次ã®4人ã®ã¹ããŒã«ãŒã®ã¬ããŒãã§ãã
- ã³ã³ã©ããã³ã³ãµ
- ãšãŽãŒã«ã»ãã¬ãã
- ãšãã²ããŒã»ãã·ã¥ã³ã
- ã¢ã¬ã¯ãµã³ãã«ã»ã ãã«
æ¢ã«ã.NETã©ã³ã¿ã€ã ã«ã€ããŠã®è¬æŒãèŠãŠããŸããã ããªãèªèº«ã®GCã¯ã©ãã§ããïŒ çæãããC ++ã³ãŒãã®ãµã€ãºã2ã¡ã¬ãã€ãã®ã²ã©ããã¡ã€ã«ã«ããããé©çšããå¿
èŠããããŸããïŒ å¹žããªããšã«ããã§ã¯ãããŸããã .NET Core 2.1ã§ã¯ãããŒã«ã«GCãšåŒã°ããæ°ããæ©èœãè¿œå ãããŸãããããã«ãããæšæºã®ã¬ããŒãžã³ã¬ã¯ã¿ãäžè¬çãªãã®ã«å®å
šã«çœ®ãæããããšãã§ããŸãã ã¬ããŒããã«ã¹ã¿ã .NET GCã®äœæ-ãwhysãããã³ãhowsãã§ã Konrad Kokosaããããè¡ãæ¹æ³ã玹ä»ããŸãã ããã¯ãäž»ã«ã¡ã¢ãªç®¡çãšGCã®åäœãããè¯ãç解ããã人ã«ãšã£ãŠèå³æ·±ãæçšã§ãã ã¬ããŒãã®äž»ãªæ¬è³ªã¯ãäŒè°ããåž°ã£ãŠããã«èªäœã®ãã®ã«ç§»è¡ããã»ã©ã§ã¯ãããŸããã ããããããã¯å¯èœãªããšã®å¢çãåºããã¯ãŒã«ãªã€ã³ã¹ãã¬ãŒã·ã§ã³ã®ã¬ããŒãã§ãã ãããè¡ãå¿
èŠã¯ãããŸããããä»ã¯å®éšããæ©äŒããããŸãã GCã¯ããèªäœãç解ãã«ãããã®ã«ãªãã€ã€ããã䟿å©ã§åŸé ãªããŒã«ãšããŠãŸããŸãããªãã®æã«èœã¡ãŸãã
ããããGCã¯ã»ãã®å§ãŸãã«éããŸããã æè¿ãå€ãã®ã©ã³ã¿ã€ã ã§ããŠãŒã¶ãŒã«SSEãAVXãªã©ã®SIMDããã»ããµåœä»€ã®çæãžã®ã¢ã¯ã»ã¹ãæäŸããããšãäžè¬çã«ãªããŸããã ããšãã°ãJSã§ã¯SIMD.jsãè¿œå ïŒããã³åé€ïŒãããJavaã§ã¯Panamaãããžã§ã¯ãããããè¡ããŸãã ãã®MODã.NETããã€ãã¹ããŸããã§ããã 圌ãã¯ç§ãã¡ã«è¶ 倧åœãäžããŸãããã圌ãã¯ããããæã£ãŠããã ãã§ã¯ååã§ã¯ãããŸãã-ããªãã¯ãŸã ãããã䜿çšã§ããããã«ããå¿ èŠããããããã¯é£ããã§ãã äžæ¹ã§ã¯ããã®ãããªã¬ãã«ã§ã®å¶åŸ¡ã«ã¯ãéåžžã«é«ãã¢ãããŒã·ã§ã³ãšè³æ Œãå¿ èŠã§ããã¹ã«ã©ãŒãããããã©ãŒãã³ã¹ãåªããŠãããã¯ã¿ãŒã³ãŒããæžãã«ã¯ãã¢ã©ã€ã¡ã³ããªã©ã ãã§ãªããç¹å®ã®åœä»€ã»ããã«åŸãããšãå¿ èŠã§ãããã¡ãŒã¹ããã©ãã¯ããéãããšçºçããŸãã äžæ¹ã æé«ã®ããã©ãŒãã³ã¹ã®ã¢ããªã±ãŒã·ã§ã³ãå®éã«äœæãããã¹ãŠã®ã¡ãžã£ãŒãä¿åãããšãæå 端ã®ã³ã³ãã€ã©ã§ãããããã¿ã«çŽé¢ããå¯èœæ§ããããŸãã ã¬ãžã¹ã¿å²ãåœãŠãªã©ã®æ¯èŒçç 究ãããåé¡ã§ãããNPå®å šïŒ 1ã2 ïŒã§ããã人éã®ä»å ¥ãå¿ èŠã§ãããSIMDã®ç¶æ³ã¯ãã以äžè¯ããªãããã§ãã
ä»å¹ŽãYegor Bogatovãæ°ããã¬ããŒãã.NET Coreå ã®æé©åããçºè¡šããŸããããã®ã¬ããŒãã§ã¯ãé«ã¬ãã«ã³ãŒãããSIMDãçæããæ¹æ³ã説æããŸãã Egorã§ã¯ããŸããªãHabréã®è©³çŽ°ãªã€ã³ã¿ãã¥ãŒããªãªãŒã¹ããŸãã Egorã¯Microsoftã§åããŠãããMonoãš.NET Coreãå°éãšããŠããŸãããDotNextã§ãã¬ãŒã³ããŒã·ã§ã³ãè¡ã£ãã®ã¯ãããåããŠã§ã¯ãããŸããã 以åã®ãšã³ããªãããã€ãä¿æããŸãã
Egorã¯ãããããã¹ãŠã®æé©åãé©çšã§ããã³ã³ãã¥ãŒã¿ãŒã²ãŒã ãšã¢ãã€ã«ã²ãŒã ã®äœæã«éåžžã«èå³ãæã£ãŠããŸãã æè¿ãªãªãŒã¹ãããAssassin's Creed Odysseyã®æè¿ã®è©±ã¯ããã確èªããŸãïŒéçºè 㯠ãã¯ã©ã€ã¢ã³ãããŒã¹ã®æžå°ã«ãããããããæå°ã·ã¹ãã èŠä»¶ã§AVX / SSE 4.1ããµããŒãããããã»ããµãæå®ããå¿ èŠããããŸããïŒãããã¯Intel第2äžä»£ããã»ããµïŒIntel Core i5-2400以äžã§ã以åã®ãã®ã§ãããµã³ãã£ããªããžãšåŒã°ãã誰ããæã£ãŠããããã§ã¯ãããŸããïŒã
ãã¹ãã»ã©ãŒã®ã²ãŒã ã®äŸãããªããçŽåŸãããªããªããã¢ã¬ã¯ãµã³ãã«ã»ã ãã«ã¯ééããªãããªããçŽåŸãããŸãã ããã¯ãHabrã®è©³çŽ°ãªã€ã³ã¿ãã¥ãŒãè¡ã2人ç®ã®ã¹ããŒã«ãŒã§ãã 圌ã¯ãæã人æ°ã®ããã²ãŒã ãšã³ãžã³ã®1ã€ã§ããUnityãäœæããŠããUnity Technologiesã§åããŠããŸãã ïŒãšããã§ã圌ãã¯æè¿ã CïŒã³ãŒããèªã¿åãçšã«ãªãŒãã³ããŸããïŒã Alexandreã¯ãéåžžã®CïŒã§ãŸã åŠçã§ããªããããªé倧ãªã³ãŒããããããšã確å®ã«ç¥ã£ãŠããŸãã ãã®ããã圌ãã¯ç¹å¥ãªãããŒã¹ããã³ã³ãã€ã©ãŒãçºæããŸãããLLVMã䜿çšããŠãCïŒã®éå®ãµãã»ãããæé©åããããã€ãã£ãã³ãŒãã«å€æããŸãã RyuJITãããåªããã³ãŒããçæããæ¹æ³ã¯ïŒ CïŒã®ã©ã®ãµãã»ãããè¶
é«éã³ãŒããæžãã®ã«æå³ããããŸããïŒ ãããã®è³ªåããã®ä»ã®è³ªåã¯ã ãããŒã¹ãã³ã³ãã€ã©ã®èåŸã§ãLLVMã䜿çšããŠ.NET ILãé«åºŠã«æé©åããããã€ãã£ãã³ãŒãã«å€æããããšããã¬ããŒãã§åãäžããããŸãã
ãã®ã«ããŽãªã®èª¬æããããã«çŽæ¥å©çãåŸããããã®ã§çµããããããšæããŸãã ã©ãããã ãã·ã¹ãã ã¡ããªãã¯ïŒèœãšãç©Žã®åéãã¯ãã®åœ¹å²ã«æé©ã§ãã Konturã®Evgeny Peshkovããã¡ããªãã¯ãã©ã®ããã«å
æãããã説æããŸããã¡ããªãã¯éã®éãã Process
ããã³PerformanceCounter
ããã©ãŒãã³ã¹ã®åé¡ã®Process
æ¹æ³ãããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒã®å
éšã®é
眮æ¹æ³ãããã³ããããã®çµæãªã©ã
Evgenyã®ä»¥åã®ã¬ããŒãã.NETã®ç¹å¥ãªäŸå€ãã¯ãDotNext Piter 2018ã«ã³ãã¡ã¬ã³ã¹ã§2äœã«ãªããŸããã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ãŸãã¯ã©ã³ã¿ã€ã ã¬ãã«ã§ãšã©ãŒãçºçããå Žåã«çºçããStackOverflowException
ã ThreadAbortException
ã AccessViolationException
ããã³OutOfMemoryException
ãªã©ãåã¿ã€ãã®äŸå€ã®æ©èœã«ã€ããŠèª¬æããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšã¢ãŒããã¯ãã£
çºè¡šåŸãDotNextã¯äœã¬ãã«ã®éçºè ã«ãšã£ãŠã¯å å®ãªããŒãã³ã¢ã®ããã«æãããããããŸããã å®éãããã°ã©ã ã«ã¯ä»ã«ãååãªã«ããŽãªããããŸãã ããã°ã©ã ãããèŠãŠãã ãã-ã»ãšãã©ã®ã¬ããŒãã®æšªã«ã¿ã°ããããŸãã 次ã«éä¿¡ããã¬ããŒããéžæãããšãã¯ããããã«æ³šæãæã£ãŠãã ããã ããŒãã³ã¢ã¯ãã³ã³ãã€ã©ã®ããã©ãŒãã³ã¹ãšè©³çŽ°ã«é¢ããã¿ã°ã§ããããã®é£ã«ã¯ãã€ã®ãã®ä»ãã話ãã¢ã€ã³ã³ããããŸãã ãã ããçŸåšé©çšã§ãããŠãããŒãµã«ããŒãã®æ°ã確èªããŠãã ããã
äžæ¹ããåªããå®è·µããšãã¢ãŒããã¯ãã£ãã«é¢ããåªããã¬ããŒããèŠã€ããããšã¯éåžžã«é£ããããšã§ãã 1ã€ã¯çŽ æŽãããã¢ã€ãã¢ã§ããããã«èŠãããšããäºå®ãä»ã®äººã«ãšã£ãŠã¯å®å šãªãã³ã»ã³ã¹ã®ããã«èãããŸãã ã¹ããŒã«ãŒã¯äŒç€Ÿã®ã¹ããŒã«ãŒå°çšã®ã¢ãŒããã¯ãã£ã§ãããïŒ ããã¯ã©ãããæå³ã§ããïŒ å¹žããªããšã«ã奜ã¿ã®çç±ã ãã§ãªãè°è«ã§ãããããã¯ã®ã»ããããããŸãã
ãã¹ããã©ã¯ãã£ã¹
ãŸãããããã¯æããã«åé¡ãçºçããŠããåéã§ãã é£è¡æ©ã«ä¹ããã³ã«ãé³æ¥œã®ã³ã¬ã¯ã·ã§ã³ãèŽããããšæã£ãŠããŸãããã·ã¢ã®æåãªã¯ã©ãŠããµãŒãã¹ã®1ã€ã¯ãã³ã¬ã¯ã·ã§ã³ãå èµãã£ã¹ã¯ã«ããŠã³ããŒãããŠãªãã©ã€ã³ã«ããæ¹ãè¯ããšèšã£ãŠããŸãããã©ã€ã»ã³ã¹ã確èªã§ããŸããïŒ ã©ã€ã»ã³ã¹æ€èšŒã®åã«ãåçŽæ¹åã«10ããã¡ãŒãã«ã 次åãé«è§£å床ã®ãã¹ãŠãçµã¿èŸŒã¿ãã£ã¹ã¯ã«ããŠã³ããŒããããã¬ãŒã€ãŒã¢ããªã±ãŒã·ã§ã³ããªãã¹ã³ãããšãã ãããŠããã©ã€ãã®éäžã®ã©ããã§ãæ£çŽã«è³Œå ¥ãããã¬ãŒã€ãŒãå°ããŸã-ãã¹ãŠã¯åé¡ãããŸããããã©ã€ã»ã³ã¹ã確èªããŠäœããããŠã³ããŒãããã®ãå¿ããŸããã åçŽã«10ããã¡ãŒãã«ãžã£ã³ãããŸãã éçºè ã®èŠ³ç¹ããèŠããšãããã¯ããã«å°çã«èŠããŸããããã¯ãå€ãã®äœ¿ãæ £ãããã¬ãŒã ã¯ãŒã¯ããããã¯ãŒã¯æ¥ç¶ã®æ¬ åŠããŸã£ããæå³ããªãããã§ãã å Žåã«ãã£ãŠã¯ãçŽæ¥èªã¿åãããã£ãã·ã¥èªã¿åãã®ããã®ã³ãŒãã®è€è£œãªã©ãå€ãã®ãããšãæžãå¿ èŠããããŸãã ããã§ãããããã¹ãŠãã¯ãã¹ãã©ãããã©ãŒã ã§å¢ããããã©ãã®ãŸãŸã«ããŸãã ãããšãæåã¯ããæãããŸããïŒ ã³ã¡ã³ããæžããŠãã ããã DotNextã«ã¯ããã®ãããã¯ã«é¢ããçŽ æŽãããã¬ããŒããGerald Versluisã®ãé£è¡æ©ã¢ãŒããã«ãŒãXamarinã¢ããªã±ãŒã·ã§ã³ã®äœæãããããŸããããã¯ãå€æ°ã®ã¹ããŒããããã°æçš¿ ãããã³æ°åã®æžç±ããç¥ãããšãã§ããŸãã ååã«ãããããããã®ã¬ããŒãã¯Xamarinã«æ £ããŠããªã人ã«ãšã£ãŠãèå³æ·±ããã®ã«ãªããŸãã
æ°žé ã®ãããã¯ããããæ£ç¢ºãªçãã¯ãŸã èŠã€ãã£ãŠããŸããããæ¯å¹Žãç解ã¯æ¥éã«æé·ããŠããŸãã äžæ»ã®æŠãã®1ã€ã¯ãTDD察TestLastã§ãã ãããããå€ãã®äººãããã»ã¹ã¬ãã«ã§ã®ãã¹ãå šè¬ã«åé¡ãæ±ããŠããŸã-æéé§åã®éçºã®äžçã§ã¯ãç¹ã«éçºãããããšã¯ãããŸããã ãã€ãŒã³ãã°ãšããç¹å¥ãªãã¹ãäŒè°ãè¡ããŸããã ããã°ã©ããŒã¯ããã«è€éã§ã-TDDã¯Extreme Programmingã®äžéšãšããŠ99幎ããã«çºæãããŸããã ãã®å€©æã«ãããããããããã¯äžçã決ããŠæãããŸããã§ãããããã¯å€ãã®èŠå ã«ãã£ãŠä¿é²ãããŸãã éåžžã®ç掻ã§ã¯ããã¹ããã¡ãŒã¹ãã§ã¯ãªããå®éã®ãã¹ãã©ã¹ãã§ããããŸãã ãã®ã¢ãããŒãã«ã¯ãå©ç¹ïŒæéã«ã¯ããã«ç°¡åã«é©åããïŒãšå€ãã®æãããªæ¬ ç¹ããããŸãã Ruby on Railsã®äœæè ããã®å®¹èµŠãªãèªåŒµãããèšäºãTDD is DeadããèŠããŠããŸããïŒ 2014幎ã«æžãããŸããã 4幎ãçµéããæ¯ãåã¯åºå®ãããŸããã§ããã ãããŠããã®åé¡ã«ã€ããŠã©ãæããŸããïŒ DotNextã«ã¯ã ãæåŸã«ãã¹ããæåã«ãã¹ããTDDïŒ1ã€ãŸãã¯å¥ã®ã¢ãããŒãã䜿çšããã¿ã€ãã³ã°ã-Alexander Kugushevã®è¬æŒã¿ã€ãã«ä»ãã®ã¬ããŒãããããŸãã ã¢ã¬ã¯ãµã³ããŒã¯ãããããã¹ãŠã®ã¢ãããŒãã«ã€ããŠè©³ãã説æããç¹å®ã®ããªãè€éãªäŸãžã®é©çšæ§ãæ€èšããŸãã
å¥ã®ã¬ããŒãã¯ãã®ã¬ããŒãã«äŒŒãŠããŸã -ç°ãªãçš®é¡ã®ã¹ãã·ã£ãªã¹ãã§ãããŠã©ãžããŒã«ã»ããªã³ãã«ãããå®çšçãªãŠããããã¹ããã巚倧ãªãšã³ã¿ãŒãã©ã€ãºã¬ã¬ã·ãŒãããžã§ã¯ãã®ä¿åã®ãšãã¹ããŒãã ã¯ããç§ãã¡ã¯ããã«ã€ããŠè©±ãã®ã¯å¥œãã§ã¯ãããŸããããæã«ã¯æãæããªããšã¯ã æ°žé ã«æ§ç¯ãããæãèä¹
æ§ã®ãããããžã§ã¯ãã§ãã厩å£ã«ã€ãªããããšããããŸã ã ãã¯ãããžãŒäŒæ¥ã®é·æçãªæåã®æè¡çèŠå ã®1ã€ã¯ãé©åãªåäœãã¹ãã§ãã ç§ãã¡ã¯çãå€ãã®ãã©ã¯ãã£ã¹ãç¥ã£ãŠããŸãããé·æçã«ã¯ããã¹ãŠã®ãã©ã¯ãã£ã¹ãåçã«åœ¹ç«ã€ããã§ã¯ãããŸããã ãã®ã¬ããŒãã¯åå¿è
åãã§ã¯ãããŸãã-ãã¹ããäœæã§ããç解ãæ°ããã¬ãã«ã«åŒãäžããã人åãã§ãã ãšããã§ããŠã©ãžããŒã«ã«ã¯çŽ æŽãããããã°ããããæãèå³æ·±ã建ç¯äžã®åé¡ãåæããŠããŸãã ãã£ã¯ã·ã§ã³ã¯ãåèã®ããã®åå¿è
ãšãäœç³»åã®ããã®çµéšè±å¯ãªã·ãã¢ã®äž¡æ¹ã«åŒ·ãæšå¥šãããŸãã
ã°ãããã©ã¯ãã£ã¹ã«é¢ããã»ã¯ã·ã§ã³ã§ã¯ãå¥ã®ã¬ããŒã-ã€ãŽãŒã«ã«ã«ãã³ã«ãããè² è·ã®äžã§çãæ®ãæ¹æ³ïŒãã©ãŒã«ããã¬ã©ã³ããµãŒããŒãã¹ããŒãã¯ã©ã€ã¢ã³ããã«ã€ããŠèšåããããšæããŸã ã ã€ãŽãŒã«ã¯ãKonturã®ä»£è¡šãšããŠãæè¿ã®äŒè°ã®ã»ãŒãã¹ãŠã«åå ãã人ç©ã§ãã Phillenniumãšç§ã¯ç¹°ãè¿ã圌ã«ã€ã³ã¿ãã¥ãŒãã圌ãèšå€§ãªæ°ã®å®éçãªè³ªåã«æ·±ãæ£ç¢ºãªçããäžããããšãã§ããããšã«ããã«æ°ã¥ããã ã€ãŽãŒã«ãšã®ã€ã³ã¿ãã¥ãŒã®ããã«ç¹å¥ã«æºåããããšã¯ã§ããŸããã§ãã-ç§ãã¡ã¯åœŒã«è³ªåãããŸããããããŠåœŒã¯ã»ãšãã©ãã¹ãŠã«çããŸããã æãéèŠãªè³ªåã«å ããŠãè¬æŒè
ãšããŠãã€äŒè°ã«åå ããŸããïŒ ãããŠãããèµ·ãã£ãã ã¬ããŒãã®èª¬æã«ã¯ãããã®ãããªãã€ã¯ããµãŒãã¹ãäœæããã¹ãã¬ã¹ãã¹ããå®æœããŠè² è·ã«èããããšã確èªããæ¹æ³ãã¬ããŒãããåŠç¿ããŸããã ãããªãããšã¯ééããããŸããã æçµçã«ã¯ãContourã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãããããã·ã¢ã§æ倧ã®.NETçç£ã§ãã ãããã®å Žåãããã£ã¹ã«ãã·ã§ã³ãšãªã¢ã§ã€ãŽãŒã«ã«ãã€ã§ãè¿œå ã®è³ªåãããããšãã§ããŸãã
建ç¯
æåŸã«ãä»æ¥ã®æåŸã®ã«ããŽãªã¯ã¢ãŒããã¯ãã£ã§ãã ç§ãã¡ã®å€ãã¯ãJoel Spolsky ã®èšäºã建ç¯å®å®é£è¡å£«ãããªããæããããªãã§ãã ããããèŠããŠããŸã ã ãŸã èªãã§ããªãã®ãªãããã以éäœãå€ãã£ãŠããŸããã ãã¢ãŒããã¯ãã£ããã¯éåžžã解決ã§ãããšèããåé¡ã解決ããããšãèŠããŠãããŠãã ããã 解決ã«åœ¹ç«ã€ãã®ã¯ãŸã£ãããããŸããããšãSpolskyã¯æãåºãããŠãããŸãã ã建ç¯ãã¬ããŒãã¯å ±éã®åºæºã§éžæãããŸããå ·äœçãªå®çšçæçšæ§ãç¹å®ã®å¯Ÿè±¡èªè ãã¬ããŒãã«å²ãåœãŠãããããã40åã§èããæ確ã«äŒããå¿ èŠããããŸãã ãã®ãããªèŠä»¶ã¯å€èŠçã«ã¯åçŽã§ããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãããããééããããã§ã¯ãããŸããã
ã§ã¯ãä»åã¯èª°ãããŸããïŒ èšäºã®åé ã§ãã§ã«ã°ã¬ãã°ã€ã³ã°ã«ã€ããŠèª¬æããŸããã ããã¯ãã«ããŽãªå€ãã®ã¹ããŒã«ãŒã§ãããã°ã¬ãã°ã ãããšãã£ãŠäŸ¡å€ããããŸãã
Vagif AbilovïŒ VagifAbilov ïŒã«ã¯ã ãã¯ã©ã¹ã¿ãŒå
ã®ä¿³åªã®ç掻ïŒãªãããã€ãã©ã®ããã«ããšããã¬ããŒããä»å±ããŸã ã Wagifã¯æåãªã¹ããŒã«ãŒã§ãããDotNextããã°ã©ã å§å¡äŒã®ã¡ã³ããŒã§ãã ãšããã§ãPCåå è
ã®ã¬ããŒãã«ã¯ç¹ã«é«ãèŠæ±ã課ãããŸããããã¯ãåªããã¢ãŒããã¯ãã£ã¬ããŒããäŒããæ¹æ³ã®äŸã§ãã ä»åã¯ãã¢ã¯ã¿ãŒã¢ãã«ãAkkaãããã³ãããã®é©çšå¯èœæ§ã®å¢çã«é¢ãã匷åãªã¬ããŒãããããŸãã ã¹ã±ãŒãªã³ã°ãšã¯ã©ã¹ã¿ãŒãœãªã¥ãŒã·ã§ã³ã®åºæ¬ãã¿ãŒã³ã«ã€ããŠèª¬æããŸãã ããªããããå€ããäŒããããšãã§ããããšã¯æããã§ããããã¿ãã¬ãªãã§è¡ãããšã¯å°é£ã§ãã ã¬ããŒãã«æ¥ãŠããã®ãã¹ãŠãèªåã§èª¿ã¹ãŠãã ããã ãã¹ãŠã®æ±ºå®ã¯å®å®é£è¡å£«ã®äžé£ã®æèã§ã¯ãªãããã«ãŠã§ãŒæŸéåäŒïŒNRKïŒã®çµéšã«åºã¥ããŠãã¹ããããŠããŸãã
Vagifã¯ããã«ã¯PCã®ã¡ã³ããŒã§ã¯ãããŸããã§ãããã以åã®DotNextã®ã¹ããŒã«ãŒãšããŠå§ãŸããŸããã
人ã
ã¯Javaçšã«æžãããå€ãæ¬ãã建ç¯ãåŠã³ãŸãã ãããã®æ¬ã¯åªããŠããŸãããåœæã®æ¥œåšã䜿çšããŠãåœæã®åé¡ã解決ããŠããŸãã æéã¯å€ãããCïŒã¯Javaããã軜ãScalaã«äŒŒãŠãããæ°ããåªããæ¬ã¯ã»ãšãã©ãããŸããã
ã¬ããŒããInstant Designãã§ã Maxim Arshinovã¯ãè¯ãã³ãŒããšæªãã³ãŒãã®åºæºãããã枬å®ããæ¹æ³ãšæ¹æ³ã«ã€ããŠè©±ããŸãã 圌ã¯å
žåçãªã¿ã¹ã¯ãšã¢ãããŒãã®æŠèŠã説æããè³åŠäž¡è«ãåæããŸãã æåŸã«ã圌ã¯Webã¢ããªã±ãŒã·ã§ã³ãèšèšããããã®æšå¥šäºé
ãšãã¹ããã©ã¯ãã£ã¹ãæäŸããŸãã ããã·ã -ãæ³åã®ãšãããæåãªhabro- èè
@marshinov ã 圌ã¯ã«ã¶ã³ã®ã¢ãŠããœãŒã·ã³ã°äŒç€ŸHigh Tech Groupã®å
±åèšç«è
ã§ãããããžãã¹ã«å ããŠãHigher School of Information Technologyã§æããŠããŸãã ã€ãŸããããã¯ãããªã±ãŒãã®äž¡åŽãã§åé¡ã蚪ãã人ã®ã¬ããŒãã§ããæ°ããæè¡ãåŠã¶åŽãšå®éã®ããžãã¹ã§äœ¿çšããåŽã®äž¡æ¹ããã§ãã
ãããŠæåŸã«ãä»æ¥ã®ã¬ãã¥ãŒã®æåŸã®ã¬ããŒãã Alexey Mersonã®ã¬ããŒãããã¡ã€ã³é§åèšèšïŒå®çšäž»çŸ©è
ã®ã¬ã·ããã§ã¯ ãDDDã®æ¬è³ªãæããã«ãªããŸãã ãã£ãšæ£ç¢ºã«èšãã°ãç¥ããªã人ã¯ç¥ãã§ãããã 誰ãç¥ã£ãŠãã-ããããç¥ã£ãŠããã è±å¯ãªå人ççµéšã«ãããAlexeyã¯ã·ã³ãã«ã§ç解å¯èœãªèšèªã§è€éãªããšã話ãããšãã§ããŸãã
DotNext 2018ã¢ã¹ã¯ã¯ã¯ã11æ22ã23æ¥ã«ã©ãã£ãœã³ãã€ã€ã«ã¢ã¹ã¯ã¯ã³ã³ã°ã¬ã¹ããŒã¯ã§éå¬ãããŸãã ãã±ããã¯äŒè°ãŠã§ããµã€ãã§è³Œå ¥ã§ããŸã ã
ãŸããå人ã®DevZen Podcastãæè¿PCãªãªãŒã¹DotNextããªãªãŒã¹ããŸããã®ã§ããèªç±ã«èŽãããšãã§ããŸãã