æè¿ãéçºè ã®ã³ââãã¥ããã£ã§ã¯ãPHPãšãã®å°æ¥ã«é¢é£ãããã¹ãŠã«ã€ããŠéåžžã«æŽ»çºãªè°è«ãè¡ãããŠããŸãã åã°ããããš-ãããã®äŒè©±ã®ã»ãšãã©ã¯ååããªæ¹æ³ã§è¡ãããŸãã PHP 6ãšãã®å€èŠ³ã«ã€ããŠã®è°è«ã¯äººæ°ããããŸãã 人ã ã¯ãèšèªãšã³ãã¥ããã£ã®å°æ¥ã«ãããHHVMãšãã®åœ¹å²ã«ã€ããŠå€ãã®è³ªåãããŸãã ããã§ãããã«é¢ããç§ã®èãã®ããã€ããããªããšå ±æãããŠãã ããã
äžäœäºææ§ã«ã€ããŠ
次ã®åãªãªãŒã¹ã¯ãåã®ãªãªãŒã¹ãšã®äžäœäºææ§ãç¶æããããã«å¿ èŠã§ãããšèããŠããŸãã6ã7ã99ãã象ã®æ奜家ã-奜ããªååãä»ããŠãã ããã ãããŠãããã€ãã®éäºææ§ãäŸç¶ãšããŠçºçããããããäž»ã«ããšèšããŸãã ãããããããã®éäºææ§ã¯æ£åœåããã³å¶åŸ¡ããå¿ èŠããããŸãã ãŸããå¢çç·ã®ã±ãŒã¹ã®ãã¹ãŠã®åäœã®ã¬ãã¥ãŒã®ã¿ãç®çãšããå¿ èŠããããŸãã ããã¯ãæ·±å»ãªå éšåç·šæãã§ããªãããšãæå³ãããã®ã§ã¯ãããŸããããç©äºã®çŽç²ããšåçŽããè¿œæ±ããŠããŸãã ããã¯ãéäºææ§ãéçºè ã劚害ããªãããšãæå³ããŸãã
ãã®ã¢ãããŒãã¯éåžžã«ç°¡åã«æ€èšŒã§ããŸãã
èšè¿°ããã³ãŒãã¯ãPHP 5.xãšPHP 6.xïŒããã³2ã€ã®é£ç¶ããã¡ãžã£ãŒãªãªãŒã¹ïŒã®äž¡æ¹ã§åé¡ãªãå®è¡ãããã¯ãã§ãã
ãªããããéèŠãªã®ã§ããïŒ PHP 4ããPHP 5ãžã®ç§»è¡ãèŠãŠãã ãããPHP5ãžã®æçµçãªç§»è¡ã«ã¯çŽ10幎ããããŸããããããã°ã©ããŒã¯äž¡æ¹ã®ããŒãžã§ã³ã§åäœããã³ãŒããæžãã®ã¯ç°¡åã§ããã ãããŠããããè¡ãããšãå°é£ã ã£ãå Žåãæ³åããŠã¿ãŠãã ããïŒ
çµå±ã®ãšãããäœãæ瀺ããå¿ èŠã¯ãããŸããã ããã¯ãŸãã«Pythonã§èµ·ãã£ãããšã§ãã Python 3ã®æåã®ãªãªãŒã¹ã¯çŽ5幎åã«çºè¡šãããŸããã ãããŠä»æ¥ã2014幎ã圌ã¯ãŸã å®å šã«ã¯é¢äžããŠããŸããã æªãããã§ã¯ãªããäž¡æ¹ã®ããŒãžã§ã³ã§åé¡ãªãåäœããåäžã®ã³ãŒãã䜿çšããã®ã¯éåžžã«é£ããããã§ãã ã€ãŸããPython 2ããŸãã¯Python 3ã§æ©èœããæ©èœã®ããããã䜿çšããŸãïŒãã®çµæãäž¡æ¹ã®å©ç¹ã倱ãããŸãïŒã ãŸããå¿ èŠãªã©ã€ãã©ãªãŸãã¯ãã©ãããã©ãŒã ã«Python 3ã®ããŒãžã§ã³ããªãå Žåã¯ãèªåã§ç§»æ€ããå¿ èŠããããŸãããŸã...éããããŸããã å®éãããããŸãã«èµ·ããããšã§ãã
ç§ã¯ãã®ã¢ãããŒããééã£ãŠãããšã¯èšããããããŸãããèšèªã¯ãã®ãããªå€æŽãã100äžã®ç°ãªãã°ããºãç²åŸããŸãã ããããç§ã«ãšã£ãŠã¯ãã³ãã¥ããã£ãšå¹³åçãªãŠãŒã¶ãŒã«ãšã£ãŠããã®ãããªç§»è¡ã¯äŸç¶ãšããŠäžå¿ èŠã«åºæ¬çãªããšã§ãã
ãšã³ãžã³ã®æžãæãã«ã€ããŠ
å€ãã®äººãèšãïŒããªãã¯PHPãšã³ãžã³ãæžãçŽãå¿ èŠããããŸãã ç§ã¯ééããªãããããã©ã¹ãšèããŠããŸããïŒã¯ãããšã³ãžã³ã¯éåžžã«æŽç·ŽãããŠããŸãïŒã質åãããªããã°ãªããŸããïŒããã¯æ¬åœã«å¿ èŠã§ããïŒ åºæ¬çãªç¬ã¯ã©ãã«åè¬ãããŠããŸããïŒ ç¢ºãã«ãPHPãšã³ãžã³ã«ã¯ã¢ãŒããã¯ãã£äžã®èšç®ãã¹ããããŸãããå šè¬çã«ã¯ããŸãæ©èœããŸãã
ãããã£ãŠããšã³ãžã³ã®ã³ã³ããŒãã³ãããŒã¹ãžã®ç§»è¡ããµãã·ã¹ãã ãžã®åå²ã確èªããããšæããŸãã ä»æ¥ãããã¯ãã§ã«éšåçã«è¡ãããŠããŸãã ããããç§ã¯ãšã³ãžã³ãæ¬åœã«ã³ã³ããŒãã³ãã«ããå€æŽãèŠããã§ãã ãªããããéèŠãªã®ã§ããïŒ ãã®ã¢ãããŒãã§ã¯ãåã ã®æ¹åããšã³ãžã³ã®éçºã«å€§ããè²¢ç®ã§ããããã§ãã
äŸãã°ãçŸæç¹ã§PHPã®æãæ··ä¹±ããŠããéšåã¯ãããŒãµãŒãšã³ã³ãã€ã©ãŒã§ãã ãããã¯éåžžã«å¯æ¥ã«é¢é£ããŠãããæ··ä¹±ããŠãããããéçºã«ãããŠå€ãã®åé¡ãçããŸãã äžæ¹ããããããšã³ãžã³ã®åå¥ã®ã³ã³ããŒãã³ãã§ããå Žåãã³ã³ãã€ã©ãŒã®çœ®æãã¯ããã«ç°¡åã«ãªããšããããŒãµãŒã ãããŠããããã®å ±ééšåã¯ãç¹å®ã®æœè±¡æ§æããªãŒã§ããå¯èœæ§ããããŸãã ãªãASTãªã®ãïŒ ããã¯ãäž¡æ¹ã®ã³ã³ããŒãã³ãã䜿çšã§ããäžçš®ã®äžè¬çãªã¢ã€ãã¢ã§ãã ã¯ããããã¯å€ãã®ä»äºãšè¯ãä»äºã§ããããå©çã¯é·ãã¯ããããªãã£ãã§ãããïŒäžè²«æ§ããããããäºæž¬å¯èœãªæ§æãããPHPèªäœã䜿çšããŠç¬èªã®æ§æãå®çŸ©ããæ©èœãè¿œå ããããšïŒå®éã«èšèªïŒã
ãããã£ãŠãæžãæããå¿ èŠã¯ãããŸããã ãªãã¡ã¯ã¿ãªã³ã°ãšã¯ãªãŒã³ã
æšæºã©ã€ãã©ãªã®ãªããžã§ã¯ãæåã¢ãããŒããžã®ç§»è¡ã«ã€ããŠ
äžéšã®äººã ã¯ãæšæºã®PHPã©ã€ãã©ãªããªããžã§ã¯ãæåã®ã¢ãããŒãã«ç§»è¡ããããšãææ¡ããŠããŸããã¹ã«ã©ãŒåã§ãããªããžã§ã¯ãã®æ¯ãèããããŸãã ã€ãŸãã次ã®ãããªãã®ãæžãããšãã§ããŸãã
$string = "Foo"; var_dump($string->length); // 3 var_dump($string->toLower()); // string(3) "foo" // etc
ã¯ãŒã«ã«èããããšã¯æããŸããããããè¡ãå¿ èŠã¯ãªããšæããŸãã
ãã®çç±ã¯ç°¡åã§ããã¹ã«ã©ãŒã¯ãªããžã§ã¯ãã§ã¯ãããŸããã ããããæãéèŠãªããšã¯ããããã¯ã©ã®ã¿ã€ãã«ãå±ããŠããŸããã PHPã¯ãæååãæŽæ°ãšã¿ãªãåã·ã¹ãã ã«äŸåããŠããŸãã ã·ã¹ãã ã®æè»æ§ã¯ãä»»æã®ã¹ã«ã©ãŒåãå¥ã®ã¹ã«ã©ãŒåã«ç°¡åã«å€æã§ãããšããäºå®ã«ããããŸãã ãã¡ãããããã¯éåžžã«å€ãã®ãšã©ãŒãçºçãããããåžžã«è¯ããšã¯éããŸããã
ãã ãããã®ãããªç¶æ³ã¯ãããå ·äœçãªåäœã«ãã£ãŠè§£æ±ºã§ããŸãã ããšãã°ããããŒãã£ãåãã£ã¹ããè©Šè¡ãããšãã«ãã£ããèŠåãŸãã¯äŸå€ãã¹ããŒã§ããããã誰ããã123abcããæŽæ°ã«ãã£ã¹ãããããšãããšãéšåçãªããŒã¿æ倱ã«é¢ããã¡ãã»ãŒãžã衚瀺ãããŸãã
ããã«éèŠãªã®ã¯ããã®ãããªåã·ã¹ãã ã§ã¯ãç¹å®ã®å€æ°ãç¹å®ã®æéã«ã©ã®åãæã£ãŠãããã100ïŒ ç¥ãããšãã§ããªããšããããšã§ãã ããŸããŸãªãªãã·ã§ã³ãæ³å®ã§ããŸãããå®éã«äœãååšãããã¯äžæã§ãã ãããã®åã¯åŸã§å€æŽã§ãããããåå€æåŸãŸãã¯èšèªãã¹ã«ã©ãŒåã®ãã³ãããµããŒãããŠããå Žåã§ããç¶æ³ã¯ããŸãå€ãããŸããã
ãããã£ãŠãããã¯ãã¹ãŠããªããžã§ã¯ãæåã®ã¢ãããŒãã§ã¯ããã¹ãŠã®ã¹ã«ã©ãŒæäœããã¹ãŠã®ã¹ã«ã©ãŒåã«ãã€ã³ãããå¿ èŠãããããšãæå³ããŸãã ããã¯ãã¹ã«ã©ãŒãæ°åŠçã¡ãœããã ãã§ãªããæååãæäœããã¡ãœãããæã€ãªããžã§ã¯ãã¢ãã«ã«ã€ãªãããŸãã ãªããŠãã³ã»ã³ã¹...
HHVMã«ãªã
ä»æ¥ããã®èšäºãæžããŠããæç¹ã§ã¯ãæ¬çªç°å¢ã§HHVMã䜿çšããããšã¯ãå§ãããŸããã ããã«ã¯ããã€ãã®çç±ããããŸãã ãããã¯ãã¹ãŠæ¢ç¥ã§ãããåºæ¬çãªãã®ã§ã¯ãããŸããã ãããã解決ã§ãããã©ããã¯æéãçµãŠã°ããããŸãããç§ã¯æ¬åœã«ããé¡ã£ãŠããŸãã
- HHVMã¯1ã€ã®äŒç€Ÿã«ãã£ãŠç®¡çãããŠããŸãã 誀解ããªãã§ãã ãããåé¡ã¯Facebookãéçºã«å€é¡ã®ãéãè²»ãããŠãããšããããšã§ã¯ãããŸããã ããããå®éã«ã¯ããããžã§ã¯ãã¯HHVMã䜿çšãããã©ããã«äŸåããªãããžãã¹ãå¶ãäŒç€Ÿã«ãã£ãŠç®¡çãããŠããŸãã 圌ããææãµããŒããæäŸããHHVMãæ¬æ Œçãªè£œåã«ããå Žåãããã¯1ã€ã®ããšã§ãã ãã1ã€ã¯ãçŸåšã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãåçšãããžã§ã¯ãã§ããªãããšã§ãã ãããŠããã®ãããªç¶æ³ã§çç£ãHHVMã«å€æãããšããç§ã¯éåžžã«ç·åŒµããŸãã
- HHVMã«ã¯å ¬éä»æ§ããããŸãããã€ãŸããäžè¬ã«ãZendãšã³ãžã³ã®å Žåãšåãæ¹æ³ã§ããã°ã©ãã³ã°ããŸãã ãã ããããã¯è©Šè¡é¯èª€ã®æ¹æ³ã§ããè€æ°ã®å®è£ ããµããŒãããããšãããŸã§ã¯ãã¹ãŠããŸãããããã§ãã ã©ã€ãã©ãªéçºè ãšããŠãç§ã¯ãã§ã«èªåã®èã§ãããæããŠããŸããã äžæ¹ãHHVMãšPHPãæçµçã«äœããã®å ±éä»æ§ã«ãªã£ãå Žåãå€ãã®ããšãã¯ããã«ç°¡åã«ãªããŸã...
- HHVMã¯ã¯ããŒãºããœãŒã¹ãããžã§ã¯ãã§ããããµãŒãããŒãã£ã®éçºè ããã®ã³ãŒããåãå ¥ããŸãïŒæ¢ã«è¯ãïŒã ãã ãããã«ãªã¯ãšã¹ããšãããã¹ããªãŒã ã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããçæããŸããã ããŠãããã»ã¹ã®æ確ãã¯ã©ãã«ãããŸããïŒ èŠç¹ã®æ確ãã¯ã©ãã«ãããŸããïŒ åå ã®éæŸæ§ã¯ã©ãã«ãããŸããïŒ ãªãŒããŒã·ããã¯ã©ãã«ãããŸããïŒ
åæã«ãç§ã¯èªåã®æèŠãç§ã ãã§ã¯ãªãããšãç¥ã£ãŠããŸãã HHVMã¯å°æ¥ã匷åãªç«¶äºçžæã«ãªããŸãããäžèšã®åé¡ã解決ããããŸã§ãåæ¥çç£ã«ãããHHVMã®æ代ã¯å°æ¥ããŠããªããšæããŸãã
PHPãšHHVMã¯å ±åã§ããŸããïŒ
åœç¶ã äžéšã®ãã¹ãã¯èª¬åŸåããããŸãããJITã³ã³ãã€ã©ã¯éæ³ã§ã¯ãããŸããã 圌ãã¯ç§ãã¡ã®ãã®çŸå®ã®äžçãšåŠ¥åããŸãïŒå€ãã®ãã¹ãããããæããã«ããŸãã å®éããã¹ãã®å€§éšåãããèŠããšããå®éã®ãã³ãŒããå®è¡ããŠããªãããšã«æ°ä»ãã§ãããã ã¹ãããã¹ããããã€ãŸããHelloWorldãŸãã¯ãã£ããããæ°ãžã§ãã¬ãŒã¿ãŒã®ããã©ãŒãã³ã¹ãæ¯èŒããŸããïŒïŒ ããŠã幞éãç¥ããŸããä»ã¯èœã¡çããŠãã ããããããŠãããããã¹ãŠã®ç¡é§ãªçµæãæšãŠãŠãã ããã
å®ã·ã¹ãã ã䜿çšããªããã¹ãã¯åœ¹ã«ç«ããªãããšãç¹°ãè¿ããŸããããããã¯ãã³ã»ã³ã¹ã§ãããããã«æªãããšã§ã-ãããã¯åã«å±éºã§ãã
å®éã«ã¯ãHHVMãPHPãããã¯ããã«é«éã«åŠçã§ããã¿ã¹ã¯ããããŸãã ãããåæã«ãPHPããã®é床ã瀺ãã¿ã¹ã¯ããããŸãã 確èªããå¯äžã®æ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ããã¹ãããããšã§ãã
ããããHHVMã¯ç§ã®ã³ãŒãããã€ãã£ããšããŠå®è¡ããŸãïŒ PHPã¯ã©ã®ããã«é«éåã§ããŸããïŒ
JITã¯éæ³ã§ã¯ãªããšèšã£ãã®ãèŠããŠããŸããïŒ ããã§ãããã¯å®éã«ããã§ãã PHPã¯ã€ã³ã¿ãŒããªã¿ãŒåããã°ã©ãã³ã°èšèªã§ãããããPHPãçŽæ¥ã³ã³ãã€ã«ããããšã¯ã§ããŸããã ã€ãŸãããã®ã³ãŒããå®è¡ãããŸã§ãã³ã³ãã€ã«ãã¥ãŒã«ããã³ãŒããæ£ç¢ºã«ç¥ãããšã¯ã§ããŸããã ãããã£ãŠãJITã¯ãŸãã«ãããè¡ããŸãã å®è¡å¯èœã³ãŒããåæããããã«é¢ããååãªæ å ±ãåãåã£ãŠããã€ãã£ãã³ãŒããçæããŸãã ãã®ããã»ã¹ã¯ãªãŒããŒãããã§ã¯ãããŸãããããã¯ãã³ã³ãœãŒã«ã§HHVMãé ãããã§ãã
ããã«éèŠãªããšã«ãJITã¯æ±çšã³ãŒããçæããŸããã ãã®ã³ãŒããäœæãããæç¹ã§ååšããŠããæ¡ä»¶ã«åŸã£ãŠã³ãŒããçæããŸãã ãããã£ãŠãé¢æ°ã2ã€ã®æŽæ°ãè¿œå ããå Žåããã®ãããªã³ãŒãã¯åçŽãªaddã¹ããŒãã¡ã³ãã«ã³ã³ãã€ã«ã§ããŸãã ãã ããã³ã³ãã€ã©ãŒã¯ãæŽæ°åã®ãã©ã¡ãŒã¿ãŒããã§ãã¯ããããã®åœä»€ãè¿œå ããŸãã ãããŠãé¢æ°ã«æ°å€ãæž¡ããšïŒPHPã®èŠ³ç¹ããã¯æ£åžžã§ãïŒããã§ãã¯ã®1ã€ã誀ã£ãçµæãè¿ããŸãã
ãã§ãã¯ã®çµæãåœã®å Žåãããã§ã€ã«ãªãŒããŒãã®ãããªãã®ãçºçããŸãã ç°¡åã«èšãã°ããšã³ãžã³ã¯ãã®ã¡ãœããçšã«ã³ã³ãã€ã«ãããã¹ãŠãããã£ã³ã»ã«ãããã€ã³ã¿ãŒããªã¿ãŒã¢ãŒãã«åãæ¿ããŸãã ãã®ãããªæäœã®å®è¡ã¯ãã€ã³ã¿ãŒããªã¿ãŒã¢ãŒãã§ã®äžå®ã®äœæ¥ãããã¯ããã«é«äŸ¡ã§ãã
ãããŠãããã¯JITã³ã³ãã€ã©ãŒãéæ³ã§ã¯ãªãçç±ã®1ã€ã«ãããŸããã
ç§ãJITã³ã³ãã€ã©ãŒã«å察ããŠãããšä»èããŠæ¬²ãããããŸããã ããã©ããããã»ãšãã©ã®ã¿ã¹ã¯ã§ã¯ãçç£æ§ãå€§å¹ ã«åäžããŸãã ããããããã§ãå®ç§ã§ã¯ãããŸããã
ä»ã®ã³ãã¥ããã£ãèŠããšãJITã³ã³ãã€ã©ãšãšãã«ä»®æ³ãã·ã³ã®å®è£ ã衚瀺ãããŸãã CPythonãšPyPyã¯è¯ãäŸã§ãã Pythonã«ã¯èšèªä»æ§ããããããããå®è£ ãå¥ã®å®è£ ã«ç°¡åã«å€æŽã§ããããšã«ã泚æããŠãã ããã
ããããããã¯ã¯ã¯ãŒã«ã§ãïŒ
Hackã¯Facebookã«ãã£ãŠéçºãããHHVMã«å«ãŸããæ°ããããã°ã©ãã³ã°èšèªã§ãã 倧ãŸãã«èšã£ãŠãããã¯ããã€ãã®è¿œå æ©èœãåããéçã«åä»ããããããŒãžã§ã³ã®PHPã§ã...
ãããŠãããã¯ã¯çŽ æŽãããã§ãïŒ ç§ã瀺ããHHVMã®åé¡ãã©ãã«ãããŠè§£æ±ºãããã®ã§ãæ¬åœã«è²¢ç®ãããã§ãïŒ
çµå±ã®ãšãããããã¯èå³æ·±ãã¢ã€ãã¢ã§ãã çŸåšãPHPã«åºã¥ããŠæ§ç¯ãããããã€ãã®ã¡ã¿èšèªããããŸãã ãªãŒããŒã¯HackãšZephirã§ãã ããããåé¡ããããŸãã äž¡æ¹ãšãç¹å®ã®ã©ã³ã¿ã€ã çšã§ããHackã¯HHVMäžã§å®è¡ãããZephirã¯PHPäžã§å®è¡ãããŸãã ããã解決ããã«ã¯ïŒ
æ£çŽãªãšãããZephirãããããããŠãHackããPECLãžã®ã³ã³ãã€ã©ãŒãäœæããã ãã§ãã Hackã¯éçã«åä»ããããèšèªã§ãããããHackãšPECLã®éã«ã¯ãã¹ã³ã³ãã€ã«æ©èœãå¿ èŠã§ãã ãŸããçè«çã«ã¯ãHackãæ¢ã«C ++ãã€ã³ãã£ã³ã°ïŒã·ã¹ãã ã©ã€ãã©ãªã®æ¥ç¶çšïŒããµããŒãããŠããããšãèæ ®ãããšãã³ã³ãã€ã©ãŒããããåŠçããå¿ èŠããããŸãã ãã®å ŽåãPECLæ¡åŒµæ©èœãèšè¿°ããããšã¯æå³ããããŸããã æ¡åŒµæ©èœãHackïŒéçã³ãŒãã¢ãã©ã€ã¶ãŒããããã¬ãŒãæèŒïŒã§èšè¿°ããå®å šã«äºææ§ã®ããPECLæ¡åŒµæ©èœãçæããŸãã ãã¡ããããã®ããšã¯å®è£ ã«ãããŠéåžžã«éèŠãªããšã§ãããè©ŠããŠã¿ãã®ã¯çŽ æŽãããããšã§ãïŒ ãšããã§ãããã§ãèšèªä»æ§ãæ¯æããå¥ã®è°è«ããããŸãã
èšèªä»æ§ã«ã€ããŠ
ãããããèšèªä»æ§ã®å¿ èŠæ§ã«ã€ããŠããã¹ãã§äœåºŠãèšåããŠããããšã«æ°ã¥ããã§ããã...
ããããèšèªããã©ãããã©ãŒã ããšã³ã·ã¹ãã ãããã³ã³ãã¥ããã£ãšããŠã®PHPã®å°æ¥ãæ¹åããã®ã«åœ¹ç«ã€æãéèŠãªãã®ã§ããããšã瀺åããŠããŸãã
ãŸãšãããš
PHPã¯ãéçºã®éåžžã«èå³æ·±ã段éã«å ¥ã£ãŠããŸãã 人ã ã¯ã¯ãŒã«ãªãã®ãæžããé²æ©ãä¿ããŸãã ãããã£ãŠãPHPã®ãããªãæé·ãå¿ èŠãªå Žåã¯ããããŸãã¯ãã®éžæãè¡ãéã«äœãããŠããããéåžžã«ããç解ããå¿ èŠããããšæããŸãã