LLVM ááááºáá±á¬ááºáá°ááŸáá·áº áááá¯áá¬áá»á¯áẠChris Lattner ááẠSwift áááá¯ááááºážáááºážáá¬áá¬á áá¬ážááá¯áááºáá®ážáá°ááŒá áºááŒá®áž Tensorflow ááŸáá·áº JAX áá²á·ááá¯á·áá±á¬ Google AI ááá±á¬áá»ááºáá»á¬ážáá¡ááŒá®ážá¡áá²áá±á¬ááºáž Tim Davis ááẠR&D á¡ááœááºá¡áá¯á¶ážááŒá¯áááœááºáá°ááŒááºážááŸáá·áº áá»ááºááŒááºáá±á¬áá¯á¶áá°áá¯á¶á á¶ááŒáá·áºáá±á«ááºážá ááºáá¬ážáá±á¬ Mojo programming language á¡áá áºááá¯ááááºáááºáá±ážáá²á·áááºá á áœááºážáá±á¬ááºáááºááŒáá·áº áá¯ááºáá¯ááºáá»á¬ážá¡ááœáẠááá·áºáá»á±á¬áºááŸá¯á áááá¡áá»ááºááŸá¬ Python áá¬áá¬á áá¬ážá áááºážááŸá®ážááŒá®ážáá¬áž syntax ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áááŸáááŒá®áž áá¯áááááŸá¬ á ááºáá¯ááºáá»á¬ážá á¯á ááºážááá¯ááºááŸá¯á áá±ážáááºážáá±á¬ááŸááºáá¬ááºá á®áá¶ááá·áºááœá²ááŸá¯á¡ááœáẠááá¹ááá¬ážáá»á¬ážááŸáá·áº áá¬á·ááºáá²ááœááºáá»ááºááŸá¯á¡ááŸáááºááŒáŸáá·áºáááºá¡ááœáẠáááááá¬áá»á¬ážá¡áá¯á¶ážááŒá¯ááŒááºážááŒá±á¬áá·áºááŒá áºáááºá
ááá±á¬áá»ááºááẠá ááºáááºáá°ááŸá¯ ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠá¡áá¯á¶ážááŒá¯ááẠá¡á¬áá¯á¶á áá¯ááºáá¬ážáá±á¬áºáááºáž Python áá¬áá¬á áá¬ážá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááᯠá áá áºáááá¯ááááºáá±ážááœá²ááŒááºážááŒáá·áº ááá¯ážáá»á²á·áᬠáá¯ááºáá±á¬ááºá áá¬áá»á¬ážá áœá¬á¡ááœáẠááá·áºáá»á±á¬áºáá±á¬ áá±áá¯áá»áááºááœááºáá»ááºáá¬áá¬á áá¬ážá¡ááŒá ẠáááºááŒáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá¬áá¬á áá¬ážááẠá áœááºážáá±á¬ááºáááºááŒáá·áºáá¬ážáá±á¬ ááœááºááŒá°áá¬á áá áºá áá±áá¬áá¯ááºáá±á¬ááºááŒááºážááŸáá·áº á¡ááœááºááŒá±á¬ááºážááŒááºážáá²á·ááá¯á·áá±á¬ áááºáááºáá»á¬ážááŸáá·áº áááºááá¯ááºáá«áááºá Mojo á á áááºáááºá á¬ážá áá¬áá±á¬ááºážááá·áºá¡ááºá¹áá«áááºááŸá¬ áá¯ááºááá¯ááºáá»á¬ážá¡ááœáẠááá¯ážáá»á²á·ááŸá¯á¡ááŒá Ạá¡á®ááá¯áá»á®áááºá¹áá±á "ð¥" ááᯠáááºááŸááºááá¯ááºááẠ(á¥ááá¬á "helloworld.ð¥")á á á¬áá¬ážááá¯ážáá»á²á·ááŸá¯ ".mojo" ááá¯á·á¡ááŒááºá
áááºááŸáááœááºá áá¬áá¬á áá¬ážááᯠá¡ááŒáááºá¡ááẠáá±á¬áºáá±á¬ááºáá»ááºááŸáááŒá®áž á ááºážáááºáááºá¡ááœáẠá¡áœááºááá¯ááºážá¡ááºáá¬áá±á·á áºááá¯áᬠáááºážááŸááºážáá¬ážáááºá á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážááŒá¯áá±á¬áááºáááºáááºážáá»ááºááá¯ááºáá±á¬ááºááŸá¯á¡áá±á«áº áá¯á¶á·ááŒááºáá»ááºáááŸáááŒá®ážáá±á¬áẠáá±áááœááºážá áá áºáá»á¬ážááœáẠáá¯ááºáá±á¬ááºááẠáá®ážááŒá¬ážá á¯áá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±áááºáᯠáááááŒá¯áá«áááºá á¡ááœááºážáááá¯áá¬á áá®ááá¯ááºážááᯠááŒá®ážááŒá±á¬ááºááŒá®ážáá±á¬ááºááœáẠááá±á¬áá»ááºááŸáá·áºáááºááá¯ááºááá·áº ááœááºáááá¯ááááºá JIT ááŸáá·áº á¡ááŒá¬ážááá¯ážáááºááŸá¯áá»á¬ážá¡ááœáẠá¡áááºážá¡ááŒá áºáá¯ááºááᯠááœáá·áºááŸá áºááẠá á®á ááºáá¬ážááẠ(áá¶áá«ážááááºáá±á¬ááºááœááºááŸá áá¯ááºáááºážááœááºááŸá±á·ááŒá±ážáá¯á¶á á¶ááẠLLVMá Clang á áááŠážá¡ááá·áºááŸáá·áº áááºáá°ááẠááŸáá·áº Swift)á Mojo á syntax ááẠPython ááá¯á¡ááŒá±áá¶áá¬ážááŒá®áž á¡áá»áá¯ážá¡á á¬ážá áá áºááẠC/C++ ááŸáá·áºáá®ážá ááºáá±á¬ááŒá±á¬áá·áºá C/C++ ááŸáá·áº Python ááá¯á· Mojo ááœááºáá±ážáá¬ážáá¬ážáá±á¬ááŸáááŒá®ážáá¬ážááá±á¬áá»ááºáá»á¬ážááá¯áá¬áá¬ááŒááºááá¯áá¬ááœááºá¡áááºááŒá±áá»á±á¬ááœá±á·á á±ááá·áº toolkit áá áºáá¯ááᯠá¡áá¬áááºááœááºáá±ážááœá²áááºá¡á á®á¡á ááºáá»á¬ážááŸááá«áááºá Python áá¯ááºá ááŸáá·áº Mojo áá±á«ááºážá ááºáá¬ážáá±á¬ áá±á«ááºážá ááºááá±á¬áá»ááºáá»á¬ážá
ááá±á¬áá»ááºááẠááœááºáá»ááºááŸá¯áá»á¬ážááœáẠá áá áºá¡ááœááºážáááŸáááá¯ááºááá·áº ááœá²ááŒá¬ážáá±á¬á áá áºáá»á¬ážá áá¬á·ááºáá²á¡áááºážá¡ááŒá áºáá»á¬ážáá«áááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá GPU áá»á¬ážá á¡áá°ážááŒá¯á ááºáááºáá°ááŸá¯á¡ááŸáááºááŒáŸáá·áºá ááºáá»á¬ážááŸáá·áº vector processing ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (SIMDs) ááᯠMojo á¡ááá®áá±ážááŸááºážáá»á¬ážáááºáááºáááºááŸáá·áº ááœááºáá»ááºááŸá¯áá»á¬ážááᯠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá ááŸáááŒá®ážáá¬áž CPython á ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážáá¯ááºáááºážááœáẠáá«áááºááŒááºážááẠPython áá¬áá¬á áá¬ážá áá®ážááŒá¬ážááœá²ááœá²áá áºáá¯ááᯠáá®ááœááºáááŒááºážá¡ááŒá±á¬ááºážáááºážááŸá¬ á á¯á ááºážááŸá¯á¡á¬áá¯á¶á á°ážá áá¯ááºááŸá¯á á áá áºáááá¯ááááºážáááºážá áœááºážáá±á¬ááºááá¯ááºááŸá¯ áá±á«ááºážá ááºááŸá¯ááŸáá·áº áá¯ááºááŒá áºááœáá·áºááŒá¯ááá·áº á¡ááŒá±áá¶ááœá²ááŒá¬ážáá±á¬ á¡ááœááºážááá¯ááºážáááá¯áá¬ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá¡ááŒá Ạááá¯ážáá¬ážáá¬ážáááºá GPU áá»á¬ážááŸáá·áº áá¬á·ááºáá² á¡ááŸáááºááŒáŸáá·áºá ááºáá»á¬ážáá±á«áºááœáẠáá¯ááºáá±á¬ááºáááºá áá áºáá»áááºáááºážááŸá¬ááẠMojo á developer áá»á¬ážááẠCPython ááŸáá·áº á¡áááºááá¯ááºáá¯á¶áž ááá¯ááºáááºáá®á á±ááẠáááºááœááºáá¬ážáááºá
Mojo ááᯠJIT á á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá¯ááºááœáẠááŸáá·áº executable files áá»á¬áž (AOTá á¡áá»áááºáááá¯ááºáá®) ááœáẠááŸá áºáá»áá¯ážáá¯á¶ážá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á á¯á ááºážááŸá¯ááœáẠá¡ááá¯á¡áá»á±á¬áẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºááŒááºážá ááááºážáááºážááŒááºážááŸáá·áº ááŒáá·áºáá±á á¯á ááºážááŒááºážá¡ááœáẠáá±ááºáá®áááºážááá¬áá»á¬ážáá«ááŸááááºá Mojo áá¬áá¬á áá¬ážááŸá á¡áááºážá¡ááŒá áºá á¬áá¬ážáá»á¬ážááᯠá¡ááá·áºáááá·áºá¡áááºá¡áááºáá¯ááºá¡ááŒá ẠMLIR (Multi-Level Intermediate Representation) ááᯠLLVM ááá±á¬áá»ááºá០áááºáá®ážááŒá®áž áá±áá¬á á®ážáááºážááŸá¯ááááºááᯠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠáááºáá±á¬ááºážá¡ááºá¹áá«áááºáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá compiler ááẠááá·áºá¡á¬áž á ááºáá¯ááºáá¯ááºáá±ážáááºá¡ááœáẠMLIR ááᯠáá¶á·ááá¯ážáá±ážááá·áº backend á¡áá»áá¯ážáá»áá¯ážááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážáááºá
ááœááºáá»ááºááŸá¯áá»á¬ážááᯠá¡ááŸáááºááŒáŸáá·áºááẠáá±á¬ááºááẠáá¬á·ááºáá²ááá¹ááá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠC/C++ á¡ááá®áá±ážááŸááºážáá»á¬ážááẠááŒááºážáááºáá±á¬ ááœááºáá»ááºááŸá¯áá»á¬ážááŒáá·áº á áœááºážáá±á¬ááºáááºááᯠáááŸáá á±áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá Mandelbrot set áá áºáá¯áá¯ááºáá¯ááºááẠá¡ááºááá®áá±ážááŸááºážááᯠá ááºážáááºáá±á¬á¡áá«á AWS cloud (r7iz.metal-16xl) ááœáẠáá¯ááºáá±á¬ááºáá±á¬á¡áá« á á¯á ááºážáá¬ážáá±á¬ Mojo á¡ááá®áá±ážááŸááºážááẠC++ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááẠ6 á ááá¯ááŒááºááẠ(0.03 á áá¹ááá·áºááŸáá·áº 0.20 á áá¹ááá·áº .) á¡ááŒáẠá áá±á¬á· CPython 35 (3.10.9 á áá¹ááá·áº ááŸáá·áº 0.03 á áá¹ááá·áº) ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ Python á¡ááá®áá±ážááŸááºážááẠá¡á 1027 ááá¯ááŒááºááŒá®áž PYPY (1500 á áá¹ááá·áº ááŸáá·áº 0.03 á áá¹ááá·áº) ááᯠá¡áá¯á¶ážááŒá¯á á¡á 46.1 ááá¯ááŒááºáá«áááºá
á ááºáááºáá°ááŸá¯ááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážááŒááºážáááºáááºááŸáá áœááºážáá±á¬ááºáááºááá¯á¡áá²ááŒááºááá·áºá¡áá«á Mojo áá¬áá¬á áá¬ážááŒáá·áºáá±ážáá¬ážáá¬ážáá±á¬ Modular Inference Engine AI stack ááẠTensorFlow á á¬ááŒáá·áºááá¯ááºááá¯á¡ááŒá±áá¶ááá·áºááŒá±ááŸááºážáá»ááºááŸáá·áºááŸáá¯ááºážááŸááºáá«á Intel ááŒáá·áºá áá áºáá áºáá¯ááœáẠá áááá¯ááá¯ááŒááºáááºáá¬ááẠáá¬áá¬á áá¬ážáá±á¬áºáááºááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« áááá¯áááºáá¬á á¡ááŒá¶ááŒá¯áá»ááºáá»áá¯ážáááºáá±á¬áºáááºááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« 3 á ááá¯ááŒááºááŒá®áž á¡ááŒááºááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá¡ááœáẠáá±á¬áºáááºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááá·áºá¡áá« 6.4 á ááá¯ááŒááºáá«áááºá AMD áááá¯áááºáá¬áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á Mojo ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«á¡ááŒááºááẠ2.1á 3.2 ááŸáá·áº 5 áááŒá áºááŒá®áž ARM áááá¯áááºáá¬áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« - 2.2á 5.3 ááŸáá·áº 7.5 á á¡áá®ážáá®ážááŸááááºá PyTorch-based ááŒá±ááŸááºážáá»ááºááẠIntel CPU ááœáẠ1.7á 1.4 ááŸáá·áº 1.1 áá AMD CPU ááœáẠ1.5á 2.1 ááŸáá·áº 1.2 áááŸáá·áº ARM CPU ááœáẠ1.5, 4 ááŸáá·áº 4.3 áááá¯á·áá±á¬ááºááœáẠáá±á¬ááºáá»áá»ááºáá±áá«áááºá
áá¬áá¬á áá¬ážááẠáá¯á¶áá±á á¬ááá¯ááºááŒááºážááᯠáá¶á·ááá¯ážáá±ážááŒá®áž á¡ááá·áºáááá·áºááŸááºáá¬ááºáá±ážáááºážáá±á¬ á¡ááºá¹áá«áááºáá»á¬ážááŒá áºááá·áº áááºááœáŸááºážáá áºáááºáá¬ááŒá±áá¬áá¶ááŒááºážááŸáá·áº ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááœá±áá»á±ážááŒááºážá á áºáá±ážááŒááºáž (áá»á±ážáá°á á áºáá±ážááá·áºáááááá¬) áá²á·ááá¯á·áá±á¬ Rust á¡ááºá¹áá«áááºáá»á¬ážááᯠá¡ááŸááºáá á±áááºá pointers áá»á¬ážááŒáá·áº áá¯á¶ááŒá¯á¶áá±á¬áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠáááºážáááºážáá»á¬ážá¡ááŒááºá á¡ááá·áºáááá·áºá¡áá¯ááºá¡ááœáẠáá¬áá¬á áá¬ážááá¯áááºáž áá¶á·ááá¯ážáá±ážáááºá á¥ááá¬á Pointer á¡áá»áá¯ážá¡á á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºááá¯áá®ááᯠááá¯á¶ááŒá¯á¶áá±á¬áá¯ááºááœáẠááá¯ááºááá¯ááºáááºáá±á¬ááºááá¯ááºáááºá áá áºáŠážáá»ááºážá á® SIMD ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠáá±á«áºááá¯áá« ááá¯á·ááá¯áẠááá¯áá²á·ááá¯á·áá±á¬ áá¬á·ááºáá²ááá¯ážáá»á²á·ááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºááẠTensorCore ááŸáá·áº AMX á¡ááŒá áºá
ááááºážááŸááºá¡á¬ážáá¯á¶ážá¡ááœáẠáááá»ááŒááºáá¬ážáá±á¬ á¡áá»áá¯ážá¡á
á¬áž á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááŸáááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááœáẠááá¹ááááºááŸáá·áº ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºááŒá¯áá¯ááºáá¬ážáá±á¬ Python áá¯ááºááᯠááœá²áá¯ááºááŒááºážá¡á¬áž ááá¯ážááŸááºážá
á±áááºá "def" á¡á
á¬áž áá®ážááŒá¬ážáá±á¬á·áá»ááºá
á¬áá¯á¶áž "fn" ááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááá¯ááŒá¯áá¬ážáááºá á¡áááºážáá»á¬ážá¡ááœáẠá¡áá¬ážáá°á á¡áááºá áááºááẠcompile time (C ááœááºáá²á·ááá¯á·) ááœáẠááááºážááá¬ááºážá¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáá±áá¬ážááẠááá¯á¡ááºáá«á "class" á¡á
á¬áž "struct" á¡áá»áá¯ážá¡á
á¬ážááᯠáá¯á¶ážááá¯ááºáááºá C/C++ áá¬áá¬á
áá¬ážáá»á¬ážááŒáá·áº áá±á¬áºáá»á°ážáá»á¬ážááᯠááá¯ážááŸááºážá
áœá¬ áááºááœááºážááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá cos áá¯ááºáá±á¬ááºáá»ááºááᯠáááºá¹áá»á¬á
á¬ááŒáá·áºááá¯ááºá០áááºááœááºážááẠ"math.h" á០import cos ááᯠáááºááŸááºááá¯ááºáááºá
source: opennet.ru