æè¿ãGoogleã§ã€ã³ã¿ãŒã³ã·ãããååŸããæ¹æ³
ã«ã€ããŠè©±ããŸããã Googleã«å ããŠãçåŸãã¡ã¯JetBrainsãYandexãAcronisããã®ä»ã®äŒæ¥ã§æãè©ŠããŸãã
ãã®èšäºã§ã¯ã
JetBrains Researchã§ã®ã€ã³ã¿ãŒã³ã·ããã®çµéšãå
±æããããã§è§£æ±ºããã¿ã¹ã¯ã«ã€ããŠèª¬æããæ©æ¢°åŠç¿ãããã°ã©ã ã³ãŒãã®ãã°ãæ¢ãæ¹æ³ã«ã€ããŠè©³ãã説æããŸãã
ç§èªèº«ã«ã€ããŠ
ç§ã®ååã¯ãšãŽãŒã«ããŽã¢ããã§ããç§ã¯ãµã³ã¯ãããã«ãã«ã¯HSEã®å¿çšæ°åŠãšã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®åŠå£«å·ã®4幎çã§ãã æåã®3幎éãç§ã¯ã¯ã©ã¹ã¡ãŒããšåãããã«ã¢ã«ãããã¯å€§åŠã§åŠã³ã9æããåŠéšå
šäœã§çµæžåŠéšã«ç§»ããŸããã
2幎ç®ä»¥éãGoogle Zurichã§å€ã®ã€ã³ã¿ãŒã³ã·ããã«åå ããŸããã ããã§ã3ãæéãAndroidã«ã¬ã³ããŒããŒã ã§åããŠããŸãããã»ãšãã©ã®æéã¯ãããã³ããšã³ããšå°ãã®UXç 究ãè¡ã£ãŠããŸããã ç§ã®ä»äºã®äžã§æãèå³æ·±ãéšåã¯ãã«ã¬ã³ããŒã€ã³ã¿ãŒãã§ã€ã¹ãå°æ¥ã©ã®ããã«èŠãããã«é¢ããç 究ã§ããã ã€ã³ã¿ãŒã³ã·ããã®çµãããŸã§ã«ç§ãè¡ã£ãã»ãšãã©ãã¹ãŠã®äœæ¥ããã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ããŒãžã§ã³ã§çµäºããããšã¯æ¥œããããšãããããŸããã ããããGoogleã§ã®ã€ã³ã¿ãŒã³ã·ããã®ãããã¯ã¯ä»¥åã®æçš¿ã§éåžžã«è©³ãã説æãããŠããããããã®å€ã«äœããããã«ã€ããŠã話ããŸãã
JB Researchãšã¯äœã§ããïŒ
JetBrains Researchã¯ãããã°ã©ãã³ã°èšèªãå¿çšæ°åŠãæ©æ¢°åŠç¿ãããããå·¥åŠãªã©ãããŸããŸãªåéã§æŽ»åããç 究æã®ã»ããã§ãã åãšãªã¢å
ã«ã¯ãããã€ãã®ç§åŠã°ã«ãŒãããããŸãã ç§ã®æ瀺ã«ãããæ©æ¢°åŠç¿ã®åéã§ã®ã°ã«ãŒãã®æŽ»åã«æã粟éããŠããŸãã ãããããæ¯é±ã®ã»ãããŒãéå¬ããã°ã«ãŒãã¡ã³ããŒãŸãã¯æåŸ
ãããã²ã¹ããèªåã®ä»äºãåéã®èå³æ·±ãèšäºã«ã€ããŠè©±ããŸãã ãµã³ã¯ãããã«ãã«ã¯ã®HSEãã£ã³ãã¹ã®æ¬é€šããéè·¯ãæž¡ã£ãŠè¡ããããHSEããã®å€ãã®åŠçããããã®ã»ãããŒã«åå ããŸãã
ç§ãã¡ã®åŠå£«èª²çšã§ã¯ãç 究掻åïŒRïŒDïŒã«çŸ©åä»ããããŠãããç 究çµæã幎ã«2åçºè¡šããŠããŸãã å€ãã®å Žåããã®ä»äºã¯åŸã
ã«å€ã®ã€ã³ã¿ãŒã³ã·ããã«çºå±ããŸãã ããã¯ç§ã®ç 究掻åã§ãèµ·ãããŸãããä»å¹Žã®å€ãç 究ç£ç£è
ã®ãã£ã¢ãã§ã€ã»ããªã¯ã·ã³ãšäžç·ã«ç 究宀ããœãããŠã§ã¢å·¥åŠã®æ©æ¢°åŠç¿æ³ãã§ã€ã³ã¿ãŒã³ã·ãããããŸããã ãã®ç 究宀ã§åãçµãã§ããã¿ã¹ã¯ã«ã¯ãèªåãªãã¡ã¯ã¿ãªã³ã°ã®ææ¡ãããã°ã©ããŒåãã®ã³ãŒãã¹ã¿ã€ã«ã®åæãã³ãŒãè£å®ãããã°ã©ã ã³ãŒãã®ãšã©ãŒã®æ€çŽ¢ãªã©ããããŸãã
ç§ã®ã€ã³ã¿ãŒã³ã·ããã¯2ãæïŒ7æãš8æïŒç¶ããç§ã«ã¯ç 究ã®æ çµã¿ã®äžã§å²ãåœãŠãããã¿ã¹ã¯ã«åãçµã¿ç¶ããŸããã ç§ã¯ããã€ãã®åéã§åããŠããŸããããæãèå³æ·±ãã®ã¯ãç§ã®æèŠã§ã¯ãã³ãŒãå
ã®ãã°ã®èªåæ€çŽ¢ã§ãããããã«ã€ããŠã話ããããšæããŸãã åºçºç¹ã¯
ãã€ã±ã«ã»ãã©ãã«ã«ããèšäºã§ã
ã ã
èªåãã°æ€çŽ¢
ãã°ã¯ä»ã©ã®ããã«æ€çŽ¢ãããŸããïŒ
ãã°ãæ¢ãçç±ã¯å€ããå°ãªããæããã§ãã 圌ãã®çŸåšã®æ§åãèŠãŠã¿ãŸãããã ææ°ã®ãã°æ€åºåšã¯ãäž»ã«éçã³ãŒãåæã«åºã¥ããŠããŸãã ãšã©ãŒã®ã¿ã€ãããšã«ã以åã«æ°ã¥ãããã¿ãŒã³ãæ¢ããŠããããå€å¥ã§ããŸãã 次ã«ã誀æ€ç¥ã®æ°ãæžããããã«ãåã
ã®ã±ãŒã¹ããšã«çºæããããã¥ãŒãªã¹ãã£ãã¯ãè¿œå ãããŸãã ãã¿ãŒã³ã¯ãã³ãŒãã«ãã£ãŠæ§ç¯ãããæœè±¡æ§æããªãŒïŒASTïŒãšãå¶åŸ¡ãããŒãŸãã¯ããŒã¿ã®ã°ã©ãã®äž¡æ¹ã§æ€çŽ¢ã§ããŸãã
int foo() { if ((x < 0) || x > MAX) { return -1; } int ret = bar(x); if (ret != 0) { return -1; } else { return 1; } }
ã³ãŒããšãã®äžã«æ§ç¯ãããããªãŒã
ãããã©ã®ããã«æ©èœããããç解ããããã«ãäŸãèããŠã¿ãŸãããã ãã°ã®çš®é¡ã¯ãC ++ã§==ã®ä»£ããã«==ã䜿çšããããšã§ãã 次ã®ã³ãŒããèŠãŠã¿ãŸãããã
int value = 0; ⊠if (value = 1) { ... } else { ⊠}
æ¡ä»¶åŒã§ãšã©ãŒãçºçããŸããããå€æ°ãžã®å€ã®å²ãåœãŠã®æåã®=ã¯æ£ããã§ãã ããããã¿ãŒã³ã®ç±æ¥ã§ããifã®æ¡ä»¶å
ã§å²ãåœãŠã䜿çšãããå Žåãããã¯æœåšçãªãã°ã§ãã ASTã§ãã®ãããªãã¿ãŒã³ãæ¢ããŠããšã©ãŒãæ€åºããŠä¿®æ£ã§ããŸãã
int value = 0; ⊠if (value == 1) { ... } else { ⊠}
ããäžè¬çãªå Žåããšã©ãŒã説æããæ¹æ³ãããã»ã©ç°¡åã«èŠã€ããããšã¯ã§ããŸããã ãªãã©ã³ãã®æ£ããé åºã決å®ããããšããŸãã ç¹°ãè¿ããŸãããã³ãŒãã®æçãèŠãŠãã ããã
for (int i = 2; i < n; i++) { a[i] = a[1 - i] + a[i - 2]; }
int bitReverse(int i) { return 1 - i; }
åè
ã®å Žåã1-iã®äœ¿çšã¯èª€ãã§ãããåŸè
ã§ã¯å®å
šã«æ£ãããã®ã§ãããããã¯æèããæããã§ãã ãããããã¿ãŒã³ã®åœ¢ã§ãããèšè¿°ããæ¹æ³ã¯ïŒ ãšã©ãŒã®çš®é¡ãè€éã«ãªããããã³ãŒãã®ãã倧ããªã»ã¯ã·ã§ã³ãæ€èšããåã
ã®ã±ãŒã¹ããŸããŸãåæããå¿
èŠããããŸãã
æåŸã®åæ©ä»ãã®äŸïŒæçšãªæ
å ±ã¯ãã¡ãœãããšå€æ°ã®ååã«ãå«ãŸããŠããŸãã ããã€ãã®æåã§æå®ãããæ¡ä»¶ã§è¡šçŸããããšã¯ããã«å°é£ã§ãã
int getSquare(int xDim, int yDim) { ⊠} int x = 3, y = 4; int s = getSquare(y, x);
xã¯yDimãããxDimã«äŒŒãŠããããšãããã£ãŠãããããé¢æ°åŒã³åºãã®åŒæ°ãæ··åãããŠããå¯èœæ§ãé«ãããšã人ã¯ç解ããŠããŸãã ãããããããæ€åºåšã«å ±åããæ¹æ³ã¯ïŒ ãå€æ°åã¯åŒæ°åã®æ¥é èŸã§ãããšãã圢åŒã®ãã¥ãŒãªã¹ãã£ãã¯ãè¿œå ã§ããŸãããxã¯é«ããããå¹
ãããé »ç¹ã§ããããããã¯ãè¡šçŸããªããšä»®å®ããŸãã
åèšïŒãšã©ãŒãèŠã€ããããã®ææ°ã®ã¢ãããŒãã®åé¡ã¯ãæã§å€ãã®äœæ¥ãè¡ããªããã°ãªããªãããšã§ãïŒãã¿ãŒã³ã決å®ãããã¥ãŒãªã¹ãã£ãã¯ãè¿œå ãããããæ€åºåšã«æ°ããã¿ã€ãã®ãšã©ãŒã®ãµããŒããè¿œå ããã®ã¯æéãããããŸãã ããã«ãéçºè
ãã³ãŒãã«æ®ããæ
å ±ã®éèŠãªéšåã§ããå€æ°ãšã¡ãœããã®ååã䜿çšããããšã¯å°é£ã§ãã
æ©æ¢°åŠç¿ã¯ã©ã®ããã«åœ¹ç«ã¡ãŸããïŒ
ãæ°ã¥ããããããŸããããå€ãã®äŸã§ã¯ãšã©ãŒã¯äººã«èŠããŸãããæ£åŒã«èšè¿°ããã®ã¯å°é£ã§ãã ãã®ãããªç¶æ³ã§ã¯ãæ©æ¢°åŠç¿ã®ãã¯ããã¯ã圹ç«ã€ããšããããããŸãã é¢æ°åŒã³åºãã§åé
眮ãããåŒæ°ã®æ€çŽ¢ã«ã€ããŠè©³ãã調ã¹ãæ©æ¢°åŠç¿ã䜿çšããŠããããæ€çŽ¢ããããã«å¿
èŠãªãã®ãç解ããŸãããã
- ãã°ã®ãªãå€æ°ã®ã³ãŒããµã³ãã«
- ç¹å®ã®ã¿ã€ãã®ãšã©ãŒãå«ã倧éã®ã³ãŒã
- ã³ãŒããã©ã°ã¡ã³ãããã¯ãã«åããæ¹æ³
- ãšã©ãŒã®ããã³ãŒããšãªãã³ãŒããåºå¥ããããã«æããã¢ãã«
ãããªãã¯ãã¡ã€ã³ã«é
眮ãããã»ãšãã©ã®ã³ãŒãã§ãé¢æ°åŒã³åºãã®åŒæ°ãæ£ããé åºã§ããããšãæåŸ
ã§ããŸãã ãããã£ãŠããã°ã®ãªããµã³ãã«ã³ãŒãã®å Žåã¯ã倧ããªããŒã¿ã»ããã䜿çšã§ããŸãã å
ã®èšäºã®èè
ã®å ŽåãJS 150KïŒJavascriptã§15äžãã¡ã€ã«ïŒãç§ãã¡ã®å ŽåãPythonã®åæ§ã®ããŒã¿ã»ããã§ããã
ãã°ã®ããã³ãŒããèŠã€ããã®ã¯ã¯ããã«å°é£ã§ãã ããããç§ãã¡ã¯ä»ã®èª°ãã®ééããæ¢ãããšã¯ã§ããŸããããèªåã§ããã®ã§ãïŒ ãšã©ãŒã®çš®é¡ã«ã€ããŠã¯ãé©åãªã³ãŒãã«åŸã£ãŠç Žæããé¢æ°ãæå®ããå¿
èŠããããŸãã ãã®å Žåãé¢æ°åŒã³åºãã®åŒæ°ãåé
眮ããŸãã
ã³ãŒãããã¯ãã«åããæ¹æ³ã¯ïŒ
å€ãã®è¯ãã³ãŒããšæªãã³ãŒãã§æŠè£
ããŠãç§ãã¡ã¯èª°ãã«äœããæããæºåãã»ãšãã©ã§ããŠããŸãã ãã®åã«ããŸã 質åã«çããå¿
èŠããããŸãïŒã³ãŒããã©ã°ã¡ã³ããã©ã®ããã«è¡šçŸãããïŒ
é¢æ°åŒã³åºãã¯ãã¡ãœããã®ååããã®ã¡ãœããã®ååãå€æ°ã«æž¡ãããåŒæ°ã®ååãšã¿ã€ãã®ã¿ãã«ãšããŠè¡šãããšãã§ããŸãã åã
ã®ããŒã¯ã³ïŒå€æ°ãšã¡ãœããã®ååãã³ãŒãã§èŠã€ãã£ããã¹ãŠã®ãåèªãïŒããã¯ãã«åããæ¹æ³ãåŠç¿ããã°ãç®çã®ããŒã¯ã³ã®ãã¯ãã«ã®é£çµãååŸããŠããã©ã°ã¡ã³ãã«å¿
èŠãªãã¯ãã«ãååŸã§ããŸãã
ããŒã¯ã³ããã¯ãã«åããããã«ãéåžžã®ããã¹ãã®åèªãã©ã®ããã«ãã¯ãã«åããããèŠãŠã¿ãŸãããã æãæåãã人æ°ã®ããæ¹æ³ã®1ã€ã¯ã2013幎ã«ææ¡ãããword2vecã§ãã
ããã¯æ¬¡ã®ããã«æ©èœããŸãããããã¯ãŒã¯ã§ãããã¹ãå
ã§ãã®é£ã«è¡šç€ºãããä»ã®åèªãåèªã§äºæž¬ããããšãæããŸãã åæã«ãããã¯ãŒã¯ã¯ãèŸæžã®ãµã€ãºã®å
¥åå±€ãååŸããããã¯ãã«åã®ãµã€ãºã®é ãå±€ãããã³èŸæžã®ãµã€ãºã®åºåå±€ã®ããã«èŠããŸãã ãã¬ãŒãã³ã°äžã«ããããã¯ãŒã¯ã«ã¯åé¡ã®åèªïŒãããïŒã®ä»£ããã«1åäœã®å
¥ååäœãã¯ãã«ãäŸçµŠãããåºåã§ã¯ããã®åèªã®åšå²ã®ãŠã£ã³ããŠå
ã§çºçããåèªïŒã¯ã€ãã¯ããã©ãŠã³ããžã£ã³ãããªãŒããŒïŒãååŸããŸãã ãã®å Žåããããã¯ãŒã¯ã¯æåã«ãã¹ãŠã®åèªãé ãå±€ã®ãã¯ãã«ã«å€æããŠãããäºæž¬ãè¡ããŸãã
çµæãšããŠåŸãããåã
ã®åèªã®ãã¯ãã«ã«ã¯ãåªããç¹æ§ããããŸãã ããšãã°ãé¡äŒŒããæå³ãæã€åèªãã¯ãã«ã¯äºãã«è¿ãããã¯ãã«ã®åèšãšå·®ã¯ãåèªã®ãæå³ãã®å ç®ãšå·®ã§ãã
ã³ãŒãå
ã§ããŒã¯ã³ã®åæ§ã®ãã¯ãã«åãè¡ãã«ã¯ãäœããã®æ¹æ³ã§äºæž¬ãããç°å¢ãèšå®ããå¿
èŠããããŸãã ãããã¯ãASTããã®æ
å ±ã§ããå¯èœæ§ããããŸãïŒåšå²ã®é ç¹ã®ã¿ã€ããééããããŒã¯ã³ãããªãŒå
ã®äœçœ®ã
ãã¯ãã«åãåä¿¡ãããšãã©ã®ããŒã¯ã³ãäºãã«é¡äŒŒããŠãããã確èªã§ããŸãã ãããè¡ãã«ã¯ããããã®éã®äœåŒŠè·é¢ãèšç®ããŸãã ãã®çµæãJavascriptã«å¯ŸããŠæ¬¡ã®é£æ¥ãã¯ãã«ãååŸãããŸãïŒæ°å€ã¯ã³ãµã€ã³è·é¢ã§ãïŒã
å
é ã«è¿œå ãããIDãšLITã¯ãããŒã¯ã³ãèå¥åïŒå€æ°ãã¡ãœããã®ååïŒã§ãããããªãã©ã«ïŒå®æ°ïŒã§ãããã瀺ããŸãã è¿æ¥æ§ã«ã¯æå³ãããããšãããããŸãã
åé¡åšãã¬ãŒãã³ã°
åã
ã®ããŒã¯ã³ã®ãã¯ãã«åãåãåããšãæœåšçãªãšã©ãŒã®ããã³ãŒãã®ãã¥ãŒãååŸããã®ã¯éåžžã«ç°¡åã§ããããã¯ãããŒã¯ã³ãåé¡ããããã«éèŠãªãã¯ãã«ã®é£çµã§ãã 2å±€ã®ããŒã»ãããã³ã¯ãReLUãã¢ã¯ãã£ããŒã·ã§ã³é¢æ°ãšããŠäœ¿çšãããªãŒããŒãã£ãããæžããããã®ããããã¢ãŠãã䜿çšããŠã³ãŒãã®äžéšã§ãã¬ãŒãã³ã°ãããŸãã åŠç¿ã¯è¿
éã«åæããçµæã®ã¢ãã«ã¯å°ãããæ¯ç§æ°çŸã®äŸã®äºæž¬ãè¡ãããšãã§ããŸãã ããã«ãããåŸã§äœ¿çšããããšãã§ããŸããããã«ã€ããŠã¯åŸã§èª¬æããŸãã
çµæ
åŸãããåé¡åã®å質è©äŸ¡ã¯ã2ã€ã®éšåã«åå²ãããŸãããå€æ°ã®äººçºçã«çæãããäŸã®è©äŸ¡ãšãäºæž¬ç¢ºçãæãé«ãå°æ°ïŒåæ€åºåšã«ã€ã50ïŒã®äŸã®æåæ€èšŒã§ãã 3ã€ã®æ€åºåšã®çµæïŒåé
眮ãããåŒæ°ã2é
æŒç®åãš2é
ãªãã©ã³ãã®æ£ç¢ºæ§ïŒã¯æ¬¡ã®ãšããã§ãã
äºæž¬ããããšã©ãŒã®äžéšã¯ãåŸæ¥ã®æ€çŽ¢æ¹æ³ã§ã¯èŠã€ããã®ãé£ããã§ãããã p.doneã®åŒã³åºãã§resãšerrãåé
眮ããäŸïŒ
var p = new Promise (); if ( promises === null || promises . length === 0) { p. done (error , result ) } else { promises [0](error, result).then( function(res, err) { p.done(res, err); }); }
ãšã©ãŒããªãã£ãäŸããããŸããããã³ãŒããç解ããããšãã人ã誀解ãããªãããã«å€æ°ã®ååãå€æŽããå¿
èŠããããŸãã ããšãã°ãå¹
ãšãããããè¿œå ããã®ã¯è¯ãèãã§ã¯ãªãããã§ããããã°ã§ã¯ãªãããšãå€æããŸããã
var cw = cs[i].width + each;
Pythonã®ç§»æ€
Michael Pradelã®äœæ¥ãjsããpythonã«ç§»æ€ããäžèšã®æ¹æ³ã«åºã¥ããŠæ€æ»ãå®è£
ããPyCharmã®ãã©ã°ã€ã³ãäœæããããšã«é¢äžããŸããã
Python 150KããŒã¿ã»ããã䜿çšããŸããïŒGitHubã§å©çšå¯èœãª15äžã®Pythonãã¡ã€ã«ïŒã
ãŸããPythonã«ã¯javascriptãããå€ãã®ç°ãªãããŒã¯ã³ãããããšãå€æããŸããã jsã§ã¯ãæã人æ°ã®ãã10,000åã®ããŒã¯ã³ãééãããã¹ãŠã®90ïŒ
以äžãå ããŸããããPythonã§ã¯çŽ40,000åã䜿çšããå¿
èŠããããŸãããããã«ããããã¯ã¿ãŒå
ã®ããŒã¯ã³ã®ãµã€ãºãå¢å ãããã©ã°ã€ã³ãžã®ç§»æ€ãå°é£ã«ãªããŸããã
第äºã«ãPythonã§é¢æ°åŒã³åºãã®èª€ã£ãåŒæ°ã®æ€çŽ¢ãå®è£
ããçµæãæåã§ç¢ºèªãããšãjsã®çµæãšã¯ç°ãªããšã©ãŒçã90ïŒ
ãè¶
ããŸããã çç±ãç解ããçµæãjavascriptã§ã¯åŒã³åºããšåããã¡ã€ã«ã§ããå€ãã®é¢æ°ã宣èšãããŠããããšãå€æããŸããã ç§ã¯ãèšäºã®èè
ã®äŸã«åŸã£ãŠãæåã¯ä»ã®ãã¡ã€ã«ããã®é¢æ°ã®å®£èšãèš±å¯ããŸããã§ããã
8ææ«ã«ãPythonã®å®è£
ãå®äºãããã©ã°ã€ã³ã®åºç€ãæžããŸããã ãã©ã°ã€ã³ã¯åŒãç¶ãéçºãããŠãããçŸåšãç§ãã¡ã®ç 究宀ã®åŠçAnastasia Tuchinaãããã«åãçµãã§ããŸãã
ãªããžããªwikiã§ãã©ã°ã€ã³ã®åäœãè©Šãæé ãèŠã€ããããšãã§ããŸãã
githubã®ãªã³ã¯ïŒ
Pythonãå®è£
ãããªããžããªãã©ã°ã€ã³ä»ãã®ãªããžããª