ื™ื•ืฆืจ LLVM ืžืคืชื— ืฉืคืช ืชื›ื ื•ืช ื—ื“ืฉื” Mojo

ื›ืจื™ืก ืœื˜ื ืจ, ืžื™ื™ืกื“ ื•ืืจื›ื™ื˜ืงื˜ ืจืืฉื™ ืฉืœ LLVM ื•ื™ื•ืฆืจ ืฉืคืช ื”ืชื›ื ื•ืช Swift, ื•ื˜ื™ื ื“ื™ื™ื•ื™ืก, ืœืฉืขื‘ืจ ืจืืฉ ืคืจื•ื™ืงื˜ื™ ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช ืฉืœ ื’ื•ื’ืœ ื›ืžื• Tensorflow ื•-JAX, ื”ืฆื™ื’ื• ืฉืคืช ืชื›ื ื•ืช ื—ื“ืฉื”, Mojo, ื”ืžืฉืœื‘ืช ืงืœื•ืช ืฉื™ืžื•ืฉ ืœืคื™ืชื•ื— ืžื—ืงืจ ืื‘ ื˜ื™ืคื•ืก ืžื”ื™ืจ ืขื ืคื•ื˜ื ืฆื™ืืœ ืœื’ื‘ืฉ ืžื•ืฆืจื™ ืงืฆื” ื‘ืขืœื™ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื. ื”ืจืืฉื•ืŸ ืžื•ืฉื’ ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื‘ืชื—ื‘ื™ืจ ื”ืžื•ื›ืจ ืฉืœ ืฉืคืช Python, ื•ื”ืฉื ื™ ื‘ืืžืฆืขื•ืช ื™ื›ื•ืœืช ืงื•ืžืคื™ืœืฆื™ื” ืœืงื•ื“ ืžื›ื•ื ื”, ืžื ื’ื ื•ื ื™ื ื‘ื˜ื•ื—ื™ื ื‘ื–ื™ื›ืจื•ืŸ ื•ืฉื™ืžื•ืฉ ื‘ื›ืœื™ ื”ืืฆืช ื—ื•ืžืจื”.

ื”ืคืจื•ื™ืงื˜ ืžืชืžืงื“ ื‘ืฉื™ืžื•ืฉ ืœืคื™ืชื•ื— ื‘ืชื—ื•ื ืœืžื™ื“ืช ืžื›ื•ื ื”, ืืš ืžื•ืฆื’ ื›ืฉืคื” ื›ืœืœื™ืช ื”ืžืจื—ื™ื‘ื” ืืช ื”ื™ื›ื•ืœื•ืช ืฉืœ Python ืขื ื›ืœื™ ืชื›ื ื•ืช ืžืขืจื›ื•ืช ื•ืžืชืื™ืžื” ืœืžื’ื•ื•ืŸ ืจื—ื‘ ืฉืœ ืžืฉื™ืžื•ืช. ืœื“ื•ื’ืžื”, ื”ืฉืคื” ื™ืฉื™ืžื” ืœืชื—ื•ืžื™ื ื›ืžื• ืžื—ืฉื•ื‘ ื‘ืขืœ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื, ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ื•ื˜ืจื ืกืคื•ืจืžืฆื™ื”. ืชื›ื•ื ื” ืžืขื ื™ื™ื ืช ืฉืœ Mojo ื”ื™ื ื”ื™ื›ื•ืœืช ืœืฆื™ื™ืŸ ืืช ืชื• ื”ืื™ืžื•ื’'ื™ "๐Ÿ”ฅ" ื‘ืชื•ืจ ื”ืจื—ื‘ื” ืœืงื•ื‘ืฆื™ ืงื•ื“ (ืœื“ื•ื’ืžื”, "helloworld.๐Ÿ”ฅ"), ื‘ื ื•ืกืฃ ืœืกื™ื•ืžืช ื”ื˜ืงืกื˜ ".mojo".

ื ื›ื•ืŸ ืœื”ื™ื•ื, ื”ืฉืคื” ื ืžืฆืืช ื‘ืฉืœื‘ ืฉืœ ืคื™ืชื•ื— ืื™ื ื˜ื ืกื™ื‘ื™ ื•ืจืง ื”ืžืžืฉืง ื”ืžืงื•ื•ืŸ ืžื•ืฆืข ืœื‘ื“ื™ืงื”. ื”ืจื›ื‘ื•ืช ื ืคืจื“ื•ืช ืœื”ืคืขืœื” ื‘ืžืขืจื›ื•ืช ืžืงื•ืžื™ื•ืช ืžื•ื‘ื˜ื—ื•ืช ืœื”ืชืคืจืกื ื‘ื”ืžืฉืš, ืœืื—ืจ ืงื‘ืœืช ืžืฉื•ื‘ ืขืœ ืคืขื•ืœืช ืกื‘ื™ื‘ืช ื”ืื™ื ื˜ืจื ื˜ ื”ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช. ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ ื”ืžื”ื“ืจ, JIT ื•ืคื™ืชื•ื—ื™ื ื ื•ืกืคื™ื ื”ืงืฉื•ืจื™ื ืœืคืจื•ื™ืงื˜ ืžืชื•ื›ื ืŸ ืœื”ื™ืคืชื— ืœืื—ืจ ื”ืฉืœืžืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื”ืคื ื™ืžื™ืช (ื”ืžื•ื“ืœ ืœืคื™ืชื•ื— ืื‘ ื˜ื™ืคื•ืก ืขื•ื‘ื“ ืžืื—ื•ืจื™ ื“ืœืชื•ืช ืกื’ื•ืจื•ืช ืžื–ื›ื™ืจ ืืช ื”ืฉืœื‘ ื”ืจืืฉื•ื ื™ ืฉืœ ื”ืคื™ืชื•ื— ืฉืœ LLVM, Clang ื• ืžึธื”ึดื™ืจ). ืžื›ื™ื•ื•ืŸ ืฉืชื—ื‘ื™ืจ Mojo ืžื‘ื•ืกืก ืขืœ ืฉืคืช Python, ื•ืžืขืจื›ืช ื”ื˜ื™ืคื•ืก ืงืจื•ื‘ื” ืœ-C/C++, ื‘ืขืชื™ื“ ื”ื ืžืชื›ื ื ื™ื ืœืคืชื— ื›ืœื™ื ืœืคืฉื˜ ืืช ื”ืชืจื’ื•ื ืฉืœ ืคืจื•ื™ืงื˜ื™ื ืงื™ื™ืžื™ื ืฉื ื›ืชื‘ื• ื‘-C/C++ ื•-Python ืœ-Mojo, ื•ื›ืŸ ืœืคืชื— ืคืจื•ื™ืงื˜ื™ื ื”ื™ื‘ืจื™ื“ื™ื™ื ื‘ืฉื™ืœื•ื‘ ืงื•ื“ Python ื•-Mojo.

ื”ืคืจื•ื™ืงื˜ ื ื•ืขื“ ืœืขืจื‘ ืืช ืžืฉืื‘ื™ ื”ื—ื•ืžืจื” ื”ื–ืžื™ื ื™ื ืฉืœ ืžืขืจื›ื•ืช ื”ื˜ืจื•ื’ื ื™ื•ืช ื‘ื‘ื™ืฆื•ืข ื—ื™ืฉื•ื‘ื™ื. ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืžืขื‘ื“ื™ GPU, ืžืื™ืฆื™ ืœืžื™ื“ืช ืžื›ื•ื ื” ืžื™ื•ื—ื“ื™ื ื•ื‘ื•ืงื˜ื•ืจื™ื ืฉืœ ื”ื•ืจืื•ืช ืžืขื‘ื“ (SIMD) ื›ื“ื™ ืœื”ืคืขื™ืœ ื™ื™ืฉื•ืžื™ Mojo ื•ืœื”ืงื‘ื™ืœ ื—ื™ืฉื•ื‘ื™ื. ื”ืกื™ื‘ื•ืช ื”ื ื™ืชื ื•ืช ืœืคื™ืชื•ื— ืชืช-ืงื‘ื•ืฆื” ื ืคืจื“ืช ืฉืœ ืฉืคืช Python ื‘ืžืงื•ื ืœื”ืฆื˜ืจืฃ ืœืขื‘ื•ื“ืช ื”ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื”ืงื™ื™ืžืช ืฉืœ CPython ื›ื•ืœืœื•ืช ื”ืชืžืงื“ื•ืช ื‘ื”ื™ื“ื•ืจ, ืื™ื ื˜ื’ืจืฆื™ื” ืฉืœ ื™ื›ื•ืœื•ืช ืชื›ื ื•ืช ืžืขืจื›ืช ื•ืฉื™ืžื•ืฉ ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ืคื ื™ืžื™ืช ืฉื•ื ื” ืžื”ื•ืชื™ืช ื”ืžืืคืฉืจืช ืœืจื•ืฅ ืงื•ื“ ืขืœ ืžืขื‘ื“ื™ GPU ื•ืขื•ื“. ืžืื™ืฆื™ ื—ื•ืžืจื”. ืขื ื–ืืช, ืžืคืชื—ื™ Mojo ืžืชื›ื•ื•ื ื™ื ืœื”ื™ืฉืืจ ืชื•ืืžื™ื ืœ-CPython ื›ื›ืœ ื”ืืคืฉืจ.

ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-Mojo ื”ืŸ ื‘ืžืฆื‘ ืคืจืฉื ื•ืช ื‘ืืžืฆืขื•ืช JIT, ื•ื”ืŸ ืœื”ื™ื“ื•ืจ ืœืงื‘ืฆื™ ื”ืคืขืœื” (AOT, ืžื‘ืขื•ื“ ืžื•ืขื“). ื”ืžื”ื“ืจ ื›ื•ืœืœ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืžื•ื“ืจื ื™ื•ืช ืžื•ื‘ื ื•ืช ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืื•ื˜ื•ืžื˜ื™ืช, ืฉืžื™ืจื” ื‘ืžื˜ืžื•ืŸ ื•ื”ื™ื“ื•ืจ ืžื‘ื•ื–ืจ. ื˜ืงืกื˜ื™ ืžืงื•ืจ ื‘ืฉืคืช Mojo ืžื•ืžืจื™ื ืœืงื•ื“ ื‘ื™ื ื™ื™ื ื‘ืจืžื” ื ืžื•ื›ื” MLIR (Multi-Level Intermediate Representation), ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ LLVM ื•ืžืกืคืง ื™ื›ื•ืœื•ืช ื ื•ืกืคื•ืช ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉืœ ื”ืขื™ื‘ื•ื“ ืฉืœ ื’ืจืฃ ื–ืจื™ืžืช ื”ื ืชื•ื ื™ื. ื”ืžื”ื“ืจ ืžืืคืฉืจ ืœืš ืœื”ืฉืชืžืฉ ื‘-backends ืฉื•ื ื™ื ื”ืชื•ืžื›ื™ื ื‘-MLIR ื›ื“ื™ ืœื™ืฆื•ืจ ืงื•ื“ ืžื›ื•ื ื”.

ืฉื™ืžื•ืฉ ื‘ืžื ื’ื ื•ื ื™ ื—ื•ืžืจื” ื ื•ืกืคื™ื ืœื”ืืฆืช ื—ื™ืฉื•ื‘ื™ื ืžืืคืฉืจ ืœื”ืฉื™ื’ ื‘ื™ืฆื•ืขื™ื ืขื“ื™ืคื™ื ืขืœ ื™ื™ืฉื•ืžื™ C/C++ ื‘ืžื”ืœืš ื—ื™ืฉื•ื‘ื™ื ืื™ื ื˜ื ืกื™ื‘ื™ื™ื. ืœื“ื•ื’ืžื, ื‘ืขืช ื‘ื“ื™ืงืช ืืคืœื™ืงืฆื™ื” ืœื”ืคืงืช ืขืจื›ืช ืžื ื“ืœื‘ืจื•ื˜, ื™ื™ืฉื•ื ืงื•ืžืคื™ืœื“ ื‘ืฉืคืช Mojo ื‘ืขืช ื‘ื™ืฆื•ืข ื‘ืขื ืŸ AWS (r7iz.metal-16xl) ื”ืชื‘ืจืจ ื›ืžื”ื™ืจื•ืช ืคื™ 6 ืžื”ื™ื™ืฉื•ื ื‘-C++ (0.03 ืฉื ื™ื•ืช ืœืขื•ืžืช 0.20 ืฉื ื™ื•ืช. 35 ืฉื ื™ื•ืช), ื•ื’ื ืคื™ 3.10.9 ืืœืฃ ืžื”ื™ืจ ื™ื•ืชืจ ืžืืคืœื™ืงืฆื™ื™ืช Python ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-CPython 0.03 ื”ืกื˜ื ื“ืจื˜ื™ (1027 ืฉื ื™ื•ืช ืœืขื•ืžืช 1500 ืฉื ื™ื•ืช) ื•ืคื™ 0.03 ืžื”ืจ ื™ื•ืชืจ ื‘ืฉื™ืžื•ืฉ ื‘-PYPY (46.1 ืฉื ื™ื•ืช ืœืขื•ืžืช XNUMX ืฉื ื™ื•ืช) .

ื‘ืขืช ื”ืขืจื›ืช ื‘ื™ืฆื•ืขื™ื ื‘ืชื—ื•ื ืคืชืจื•ืŸ ื‘ืขื™ื•ืช ืœืžื™ื“ืช ืžื›ื•ื ื”, ืžื ื•ืข ื”-AI-Stack Modular Inference Engine, ืฉื ื›ืชื‘ ื‘ืฉืคืช Mojo, ื‘ื”ืฉื•ื•ืื” ืœืคืชืจื•ืŸ ื”ืžื‘ื•ืกืก ืขืœ ืกืคืจื™ื™ืช TensorFlow, ื”ื™ื” ืžื”ื™ืจ ืคื™ 3 ื‘ืขืช ืขื™ื‘ื•ื“ ืžื•ื“ืœ ืฉืคื” ื‘ืžืขืจื›ืช ืขื ืžืขื‘ื“ ืื™ื ื˜ืœ, ืžื”ื™ืจ ืคื™ 6.4 ื‘ืขืช ืขื™ื‘ื•ื“ ื‘ื™ืฆื•ืข ืžื•ื“ืœ ื™ืฆื™ืจืช ื”ื”ืžืœืฆื•ืช ื•ืคื™ 2.1 ืžื”ื™ืจ ื™ื•ืชืจ ื‘ืขื‘ื•ื“ื” ืขื ืžื•ื“ืœื™ื ืœืขื™ื‘ื•ื“ ืžื™ื“ืข ื—ื–ื•ืชื™. ื‘ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ื™ AMD, ื”ืจื•ื•ื—ื™ื ื‘ืฉื™ืžื•ืฉ ื‘-Mojo ื”ื™ื• ืคื™ 3.2, 5 ื•-2.2, ื•ื‘ืฉื™ืžื•ืฉ ื‘ืžืขื‘ื“ื™ ARM - ืคื™ 5.3, 7.5 ื•-1.7, ื‘ื”ืชืืžื”. ื”ืคืชืจื•ืŸ ืžื‘ื•ืกืก PyTorch ืคื™ื’ืจ ืื—ืจื™ Mojo ืคื™ 1.4, 1.1 ื•-1.5 ื‘ืžืขื‘ื“ื™ ืื™ื ื˜ืœ, ืคื™ 2.1, 1.2 ื•-1.5 ื‘ืžืขื‘ื“ื™ AMD ื•ืคื™ 4, 4.3 ื•-1.3 ื‘ืžืขื‘ื“ื™ ARM.

ื™ื•ืฆืจ LLVM ืžืคืชื— ืฉืคืช ืชื›ื ื•ืช ื—ื“ืฉื” Mojo

ื”ืฉืคื” ืชื•ืžื›ืช ื‘ื”ืงืœื“ื” ืกื˜ื˜ื™ืช ื•ื‘ืชื›ื•ื ื•ืช ื‘ื˜ื•ื—ื•ืช ื‘ื–ื™ื›ืจื•ืŸ ื‘ืจืžื” ื ืžื•ื›ื” ื”ืžื–ื›ื™ืจื•ืช ืืช ื”-Rust, ื›ื’ื•ืŸ ืžืขืงื‘ ืื—ืจ ื›ืœ ื”ื—ื™ื™ื ื•ื‘ื“ื™ืงืช ื”ื”ืฉืืœื”. ื‘ื ื•ืกืฃ ืœืžืชืงื ื™ื ืœืขื‘ื•ื“ื” ื‘ื˜ื•ื—ื” ืขื ืžืฆื‘ื™ืขื™ื, ื”ืฉืคื” ืžืกืคืงืช ื’ื ืชื›ื•ื ื•ืช ืœืขื‘ื•ื“ื” ื‘ืจืžื” ื ืžื•ื›ื”, ืœืžืฉืœ, ื’ื™ืฉื” ื™ืฉื™ืจื” ืœื–ื™ื›ืจื•ืŸ ื‘ืžืฆื‘ ืœื ื‘ื˜ื•ื— ื‘ืืžืฆืขื•ืช ืกื•ื’ Pointer, ืงืจื™ืื” ืœื”ื•ืจืื•ืช SIMD ื‘ื•ื“ื“ื•ืช ืื• ื’ื™ืฉื” ืœื”ืจื—ื‘ื•ืช ื—ื•ืžืจื” ื›ื’ื•ืŸ TensorCores ื•- AMX .

ื™ื•ืฆืจ LLVM ืžืคืชื— ืฉืคืช ืชื›ื ื•ืช ื—ื“ืฉื” Mojo

ื›ื“ื™ ืœืคืฉื˜ ืืช ื”ื”ืคืจื“ื” ื‘ื™ืŸ ืงื•ื“ Python ื”ืงืœืืกื™ ืœืžื•ื˜ื‘ ืขื‘ื•ืจ ืคื•ื ืงืฆื™ื•ืช ืขื ื”ื’ื“ืจื•ืช ืกื•ื’ ืžืคื•ืจืฉ ืขื‘ื•ืจ ื›ืœ ื”ืžืฉืชื ื™ื, ืžื•ืฆืข ืœื”ืฉืชืžืฉ ื‘ืžื™ืœืช ืžืคืชื— ื ืคืจื“ืช "fn" ื‘ืžืงื•ื "def". ื‘ืื•ืคืŸ ื“ื•ืžื” ืขื‘ื•ืจ ืžื—ืœืงื•ืช, ืื ืืชื” ืฆืจื™ืš ืœืืจื•ื– ื ืชื•ื ื™ื ืกื˜ื˜ื™ื™ื ื‘ื–ื™ื›ืจื•ืŸ ื‘ืžื”ืœืš ื”ื”ื™ื“ื•ืจ (ื›ืžื• ื‘-C), ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืกื•ื’ "struct" ื‘ืžืงื•ื "ืžื—ืœืงื”". ืืคืฉืจ ื’ื ืคืฉื•ื˜ ืœื™ื™ื‘ื ืžื•ื“ื•ืœื™ื ื‘ืฉืคื•ืช C/C++, ืœื“ื•ื’ืžื”, ื›ื“ื™ ืœื™ื™ื‘ื ืืช ืคื•ื ืงืฆื™ื™ืช cos ืžืกืคืจื™ื™ืช ื”ืžืชืžื˜ื™ืงื”, ื ื™ืชืŸ ืœืฆื™ื™ืŸ "ืž-"math.h" import cos.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”