ãç§ãJuliaãæ¨ãçç±ãï¼ç¿»è¨³ï¼
Juliaについて書かれた海外のブログ記事ã§ã¨ã¦ãå ±æãããã®ããã£ãã®ã§ããã°ä¸»ã«ç¡æã§ç¿»è¨³ãããã®ãæ²è¼ãã¾ããï¼ããåé¡ããã¾ããããé£çµ¡ãã ãããï¼
ãã®ããã°ã®èè ã¯Evan Milleræ°ã¨ããã½ããã¦ã§ã¢éçºè ã§Wizardã¨ããããªãã¤ã±ã¦ãããªçµ±è¨åæããã±ã¼ã¸ã½ãããå°æ¥ã§éçºãã¦ãã人ã¿ããã§ããããªã¼ã©ã³ã¹ãªã®ããªãèãæ¹ãç°å¢ãããã¦ããããããå¹´é½¢ãåã¨ä¼¼ã¦ãã人ãªã®ãããããªãã
ã私がJuliaを推す理由ãï¼2014/1/23ï¼
æ®ã©ã®ããã°ã©ãã³ã°è¨èªã®åé¡ã¯ããããè¨èªã®ã¼ã¯ã«ãã£ã¦ã¤ãããã¦ãããã¨ã ãå½¼ãã¯ç§ãªãã»ã¨ãã©æ°ã«ããªããããã¨ã«å¾æ³¨ããã¡ã ãå®å ¨æ§ãåã·ã¹ãã ãåå³åæ§ããªã©ãªã©ãç§ã¯ãããããã®ã確ãã«ç´ æ´ãããã¨æã£ã¦ã¯ããããæ°ããï¼è¨³æ³¨ï¼ããããæ°ããã°ã©ãã³ã°è¨èªã¨ãã®ï¼ããã¸ã§ã¯ããèå³æ¬ä½ã§æ¼ã£ã¦ã¿ãéã«é¢å¿ãããã®ã¯ï¼ï¼ï¼å½¹ã«ç«ã¤ãï¼ï¼ï¼éãã ã®2ç¹ã ãç§ã«ã¨ã£ã¦ã¯ã³ã¼ãã¯è»ã¿ãããªãã®ã ãã¤ã¾ãããã¯ç®çå¤ã¸ã®æ段ãªã®ã ãã³ã¼ãçãæã¤âexpressiveness(表ç¾å)âã¯ããã°ææ°ã¬ã¹ã®ä¸å 触åªããã¤"expressivenessï¼è¨³æ³¨ï¼ä¸ç³ä¸é³¥çãªæå³åãï¼"ã¿ãããªéè¦ãã ã
ãã®ã¢ããã¼ãã§ã®ããã°ã©ãã³ã°ï¼è¨³æ³¨ï¼ä¸è¡ã®ã³ã¼ãã®è¡¨ç¾åãé«ããã¨ãéè¦ãã¦ã³ã¼ãã®ãããæ¸ãããããªã¹ã¿ã¤ã«ã®ãã¨ã ã¨æãããï¼ã¯ãã°ãã°ã«ã¦ãã¼ã¤ã¹ã¿ã¤ã«ã ãªãã¦ããããããããã«ã¦ãã¼ã¤ã£ã¦ã®ã¯ç§ã¯æ£ç¢ºãªã¤ã¡ã¼ã¸ãããªãã¨æããã ãã ã£ã¦ã«ã¦ãã¼ã¤ã¯é¦¬ãç¸æã«ãããã馬ã®é½åã§æã ä¼ãã ãããªããã°ãªããªããããªããï¼è¨³æ³¨ï¼ããããã¦ã£ãã好ãï¼ããã£ã¨åä¸å¿ãæããããã¤ã¡ã¼ã¸ãããã¯ç²¾å·§ã«ã¤ããããæ©æ¢°è£ ç½®ããããåºæ¥ãã°ã£ããã§æåã«ä½¿ã£ã人ãç«ã被ããããªãã®ãããã«æ°é±éãåãã¤ããã¡ãã£ãç 究è ãã©ãã®ä¸ã§ç®ãå è¡ãç²ãæã¦ã¦éç½ããªã£ã¦ãããããªæãããªã
ã¾ãç§ã®å¥½ã¿ã«ã¤ãã¦ã®è©±ã¯ãããããæ®æ®µç§ã¯ä½ããä½ãè¨èªã第ä¸è¨èªã¨ãã¦ãããã¨ä½ã£ããã®ãé«éåããè¨èªã第äºè¨èªã¨ãã¦ãããã¦ã¡ãã£ã¨ãããæ²é³´ãä¸ããã»ã©é¢ç½ãããããã®è¨èªã第ä¸è¨èªã¨ãã¦ä½¿ã£ã¦ããããããã使ãåãã¯ããªããªãè¯ããããã¿ã¼ã³ã ãå¤ãã®ããã°ã©ãã«ã¨ã£ã¦ãããã¿ã¤ãã³ã°ç¨ã®è¨èªã¯Python,Ruby,ãããã¯Rã ããã£ããã³ã¼ããåããããããã©ã¯é ãã¨ãããCãC++ã§æ¸ãç´ãããããã人ã«ãªãã¨Cã®ã«ã¼ããã¢ã»ã³ãã©ãCUDAãOpenCLã§æ¸ãç´ãã¡ãã£ããããã
ããã好ã¾ãããªããã¨ã«ããããã¿ã¤ãã³ã°ç¨ã®è¨èªã¨C/C++ã®éã«ã¯å¤§ããªå£ãããããã¦Cè¨èªã¨ã¢ã»ã³ãã©ã®éã«ãã¾ã大ããªå£ããããè·ãå¾ãããã«ï¼ã¤è¨èªãç¿å¾ããä¸ã«ããããã®å£ãè¶ ããæã«æèã®ã¹ã¤ãããå¿ è¦ã«ãªãããã£ã¨èº«è¿ãªã±ã¼ã¹ã§ããã¨ãå£ãè¶ ããããã«ã°ã«âã³ã¼ãï¼è¨³æ³¨ï¼è¤æ°ã®ããã°ã©ãã³ã°è¨èªã®ã³ã¼ããã¤ãªãããã ãã«ä½¿ãã³ã¼ãï¼ãããããæ¸ãå¿ è¦ãããããã½ã¼ã¹ãã¡ã¤ã«ãã¨ãã£ã¿ããããã¬ãããããå¥ã§åãæ¿ããªããã°ãªããªãã£ããããã
ç§ãå°ãåã«Juliaã«ã¤ãã¦èªãã§ãããã¯ã¯ã¼ã«ã ã¨æã£ããã ãã©ãããã«ä½¿ããªããã°ãããªããã®ã§ããªãã¨æã£ããJuliaã¯ããã©ã¼ãã³ã¹ãã°ã¬ã¼ããªåçè¨èªã ãããã¯ããã¨æã£ãããæ¢ã«ç§ã¯ãã©ã«ã¯ã¹ã¯ã¼ã²ã³ã®ãã¼ãã«ã¿ãããªè»ã«ãã§ã©ã¼ãªã®ã¨ã³ã¸ã³ãæè¼ãããããªãã¨ããããããã£ã¦ãã¦ããããããªãæ°è»ãå¿ è¦ãªãã ï¼ã¿ãããªãã¨ãæã£ããããã«ä»ã¯è²ããªãã©ãããã©ã¼ã ããã¤ãæãããªãJava HotSpot, PyPy, asm.jsãããããã®ãCè¨èªã¨åçã®ããã©ã¼ãã³ã¹ãä»ã®è¨èªã§ãå®ç¾ããã¨ããã£ã¦ããã
ãã®ã¡ãã£ã¨å¾ã§ãç§ã¯Juliaãä»ã®è¨èªã¨æ±ºå®çã«éãç¹ã«æ°ã¥ãããJuliaã¯ï¼çªç®ã®å£ãæã¡ç ´ããã¤ã¾ãé«ãæ½è±¡åº¦ã®ã³ã¼ãã¨ãã¤ãã£ãã¢ã»ã³ããªã®éã®å£ãè¶ ãããã®ã ã¨ãããã¨ã ãCè¨èªã¨åçã®ããã©ã¼ãã³ã¹ãåºãã³ã¼ããJuliaã§æ¸ããã ããããªããã©ããªé¢æ°ã§ãLLVMã®ä¸éè¨èªã³ã¼ãã¨ããã«ãããã¢ã»ã³ããªã³ã¼ãã«ã©ã翻訳ãããããè¦ããã®ã ããããREPLï¼ã¤ã³ã¿ããªã¿ã®å¯¾è©±ç°å¢ï¼ãã¡ãã£ã¨è©¦ãã¦ã¿ããã
emiller ~/Code/julia (master) ./julia _ _ _ _(_)_ | A fresh approach to technical computing (_) | (_) (_) | Documentation: http://docs.julialang.org _ _ _| |_ __ _ | Type "help()" to list help topics | | | | | | |/ _` | | | | |_| | | | (_| | | Version 0.3.0-prerelease+261 (2013-11-30 12:55 UTC) _/ |\__'_|_|_|\__'_| | Commit 97b5983 (0 days old master) |__/ | x86_64-apple-darwin12.5.0 julia> f(x) = x * x f (generic function with 1 method) julia> f(2.0) 4.0 julia> code_llvm(f, (Float64,)) define double @julia_f662(double) { top: %1 = fmul double %0, %0, !dbg !3553 ret double %1, !dbg !3553 } julia> code_native(f, (Float64,)) .section __TEXT,__text,regular,pure_instructions Filename: none Source line: 1 push RBP mov RBP, RSP Source line: 1 vmulsd XMM0, XMM0, XMM0 pop RBP ret
ãããï¼è¡ã®é¢æ°ãæ¸ãã¦ããLLVMã§æé©åãããx86ã¢ã»ã³ãã©ã³ã¼ãã確ãããã¾ã§ï¼ï¼ç§ãããããã«åºæ¥ã¦ãã¾ã£ãã
ãªã®ã§Juliaã«ã¤ãã¦èª¿ã¹ãã¨åºã¦ããåã·ã¹ãã ãå¤éãã£ã¹ããããåå³åæ§ãªã©ã®ç¹å¾´ã®ãã¨ã¯å¿ãã¡ãã£ã¦ãããããããã®ã¯ã¯ã¼ã«ã ã¨ç§ãæã£ã¦ããã©ãç§ã¨ä¼¼ãã¿ã¤ãã®äººã«ã¨ã£ã¦ã¯æåã«ãããã¿ã¤ããä½ã£ã¦ãããã«ãã³ã¢ãSIMDã§ããã©ã¼ãã³ã¹ãæé©åããã¾ã§ãJuliaã ãã§åºæ¥ã¡ããã®ãç¾å®çãªãããã£ãããªã®ã ã
端çã«è¨ãã°ãç§ãJuliaæ¨ããªã®ã¯ããããããã ããã®è©±ãä»ã¨å¯¾æ¯ãããã®ã¯ããã¾ãæ°ãé²ã¾ãªãã®ã ãã©ããã£ã¦ã¿ãã°ããã¯Node.jsãWebã·ã¹ãã éçºã§ãã£ã¦ãããã¨ãã¤ã¾ãå ¨ç¶éãã°ã«ã¼ãã®ããã°ã©ããåãè¨èªã使ã£ã¦ãã¨ãããã¨ãããã¨åããã¨ãç§å¦æè¡è¨ç®ã§ããã¨ãããã¨ã ãNode.jsã®ãããã§ããã³ãã¨ã³ãã®ãã¶ã¤ãã¨ããã¯ã¨ã³ãã®éçºè ãä¸ç·ã«ä»äºã§ãããJuliaãããã°ãã¡ã¤ã³ã¨ãã¹ãã¼ãã¨å®è¡é度å¨ãä¸ç·ã«ä»äºã§ãããããã¯å¤§ããªãã¨ã ã
ããããç¹ã§ã¯Juliaã®æ¬ ç¹ã¯ã©ã¤ãã©ãªãä¸è¶³ãã¦ãããã¨ã ããããã©ãã®è¨èªã¯ä»ã¨ã¯éã£ã¦å§åçã«ç°¡åã«Cã®ã©ã¤ãã©ãªãå¼ã³åºããã¨ãã§ãããä»ã®è¨èªã«ãããã¤ãã£ãã¤ã³ã¿ãã§ã¼ã¹ã¨ã¯éã£ã¦ãCå´ã«ããç¨ã®ã³ã¼ããå ¨ãæ¸ããã«JuliaããCã®ã³ã¼ããå¼ã³åºããããªã®ã§Julia対å¿ã©ã¤ãã©ãªã¯ããªãæ©ãæã£ã¦ããããããªããã¨ãµãã§ãããå人çã«ä½¿ã£ã¦ã¿ãæãã ã¨ï¼åè¡ã®Cã®ã³ã¼ãããCå´ã®ã³ã¼ããå ¨ãæ¹å¤ããã«Juliaå´ã§ï¼ï¼ï¼è¡æ¸ãã ãã§Juliaç¨ã®ã©ã¤ãã©ãªã«ãããã¨ãã§ããã
ããè²´æ¹ãPython,C,C++,Fortran,Rãã¤ãªããããªç©æãããé¡ã®æè¡ã°ã«ã¼ãã§ä»äºãã¦ãããç§ã®ããã«ãshoot-from-the-hip Lone Rangerãã«åºã¦ããã¯ãã¦ã®ã«ã¦ãã¼ã¤ã¿ãããªé度å¨ã ã£ãããJuliaããã¦ã³ãã¼ããã¦ã¡ãã£ã¨è»¢ããã¦ã¿ããã¨ããå§ããããä»®ã«è²´æ¹ãç¥ããªãããã°ã©ãã³ã°è¨èªãªããã§è·æ¥çæ´»ãè¤éåããããªã人ã ã¨ãã¦ããJuliaã使ãããæçµçã«ã¯è²´æ¹ããããããã¨ã«ãªãããã¸ã§ã¯ãã§å¿ è¦ã«ãªã£ã¦ããããã°ã©ãã³ã°è¨èªãå°ãªãã¦æ¸ãããã«ãªããã ã£ã¦ãã¨ãèãã¦ã»ããã®ã ã
ãã¨ããã¾ã§æ¢ãã¦ãããªãã£ããã ãã©ãããã©ã¼ãã³ã¹ã®ãã¨ãæãã«ãã¦ãJuliaã¯å®éã«ããè¨èªã ãç§ã¯ããã°ã©ãã³ã°è¨èªãè¦ãç®ãè¥ãã¦ããããããªãããå¦ã¶ã«ããã£ã¦é ãæ©ã¾ããããªãªã¹ã¯ã¯æ®ã©ãªãã¨ããããä»ç¾å¨ãç§ã®ä¸ã§Juliaã¯ãæ°ã«å ¥ããããï¼ã®è¨èªã ã
æå¾ã«ãæ´»çºã§ãµãã¼ãæåãJuliaã³ãã¥ããã£ããããã¨ã«ã¤ãã¦ãç§ããã®ã³ãã¥ããã£ã§å¥½ããªé¨åã¯é ãè¯ãã§ãã¬ã³ããªã¼ãªæ°å¦ã»ç§å¦ã¿ã¤ãã®äººãã¡ã§ããµãã¦ãããã¨ãããã¯Juliaãè¨èªãªã¿ã¯ã«ãã£ã¦ã¤ããããè¨èªãããªããMITã®æ°å¦ãç§å¦ãæè¡ã«æºããå¦çãã¡ãCãFORTRANã«ä»£ããéãã¦å®è·µçãªè¨èªã欲ããã¦ä½ã£ããã®ã ããã ããªã®ã§è¨èªèªä½ã®ç¾ããã§ã¯ãªãçããéãåºããã¨ã®ããã«è¨è¨ããã¦ãããç§ã«ã¨ã£ã¦ããã¯ã¾ãã«ã³ã³ãã¥ã¼ãã£ã³ã°ã®æ¬è³ªãªãã ã