Chris Lattner, the founder and chief architect of LLVM, as well as the creator of the Swift programming language, and Tim Davis, the former head of AI projects at Google such as TensorFlow and JAX, have introduced a new programming language called Mojo. This language combines ease of use for research and rapid prototyping with the capability to create high-performance end products. The first aspect is achieved through the familiar syntax of Python, while the second is enabled by the ability to compile to machine code, safe memory handling mechanisms, and the use of hardware acceleration for computations.
The project focuses on applications in the field of machine learning but is presented as a general-purpose language that extends Python's capabilities with systems programming tools, making it suitable for a wide range of tasks. For instance, the language can be applied to high-performance computing, data processing, and transformation. An interesting feature of Mojo is the ability to specify the emoji symbol '🔥' as a file extension for code files (for example, 'helloworld.🔥'), in addition to the text extension '.mojo'.
Currently, the language is in an intensive development phase, and only an online interface is available for testing. Standalone builds for running on local systems are promised to be released later, after feedback is received on the performance of the interactive web environment. The source code of the compiler, JIT, and other related project developments is planned to be made available after the internal architecture design is completed (the model for developing a working prototype behind closed doors resembles the early stages of LLVM, Clang, and Swift development). Since Mojo's syntax is based on Python and its type system is close to C/C++, there are plans to develop tools to simplify the translation of existing projects written in C/C++ and Python into Mojo, as well as to create hybrid projects that combine code in Python and Mojo.
Projekt je osmišljen za angažovanje dostupnih hardverskih resursa u heterogenim sistemima za izvršavanje računarskih operacija. Na primer, za pokretanje aplikacija napisane u jeziku Mojo i paralelno obračunavanje, mogu se koristiti GPU, specijalizovani akceleratori za mašinsko učenje i vektorske procesorske instrukcije (SIMD). Razlog za razvoj posebnog podskupa programskog jezika Python umesto optimizacije postojećeg CPython-a je fokus na kompajlaciju, integraciju mogućnosti sistemskog programiranja i primenu fundamentalno drugačije unutrašnje arhitekture koja omogućava izvršavanje koda na GPU-ima i raznim hardverskim akceleratorima. Pri tome, developeri jezika Mojo nastoje da se, koliko je to moguće, pridržavaju kompatibilnosti sa CPython-om.
Mojo se može koristiti i u režimu interpretacije uz JIT, kao i za kompajlaciju u izvršne datoteke (AOT, anticipativno). Kompajler uključuje moderne tehnologije automatske optimizacije, keširanja i distribuirane kompajlacije. Izvorni kodovi napisani u jeziku Mojo se transformišu u niskonivo između-reprezentacije MLIR (Multi-Level Intermediate Representation), koju razvija projekat LLVM i koja pruža dodatne mogućnosti za optimizaciju obrade grafova podataka. Kompajler omogućava korišćenje različitih backend-a koji podržavaju MLIR za generisanje mašinskog koda.
Korišćenje dodatnih hardverskih mehanizama za ubrzanje proračuna omogućava postizanje performansi koje, u slučaju intenzivnog računanja, prevazilaze aplikacije napisane u C/C++. Na primer, tokom testiranja aplikacije za generisanje Mandelbrot skupa, aplikacija kompajlirana na jeziku Mojo, kada se izvodi u oblaku AWS (r7iz.metal-16xl), bila je 6 puta brža od implementacije na C++ (0.03 sekundi naspram 0.20 sekundi), kao i 35.000 puta brža od aplikacije na Pythone sa standardnim CPython 3.10.9 (0.03 sekundi naspram 1027 sekundi) i 1500 puta brža u poređenju sa PYPY (0.03 sekundi naspram 46.1 sekundi).
Pri oceni delovanja na področju reševanja nalog strojnega učenja je AI-stek Modular Inference Engine, napisan v jeziku Mojo, v primerjavi z rešitvijo na osnovi knjižnice TensorFlow na sistemu z procesorjem Intel dosegel 3-krat hitrejšo obdelavo jezikovne teme, 6.4-krat hitrejšo pri izvajanju modela priporočil in 2.1-krat hitrejšo pri delu z modeli za obdelavo vizualnih informacij. Pri uporabi procesorjev AMD je bila prednost pri uporabi Mojo 3.2, 5 in 2.2-krat, pri uporabi procesorjev ARM pa 5.3, 7.5 in 1.7-krat, ustrezno. Rešitev na osnovi PyTorch je zaostajala za Mojo za 1.4, 1.1 in 1.5-krat na CPU Intel, 2.1, 1.2 in 1.5-krat na CPU AMD ter 4, 4.3 in 1.3-krat na CPU ARM.

Jezik podpira statično tipizacijo in sredstva za varno nizkonivojsko delo z spominom, ki spominja na zmožnosti jezika Rust, kot so sledenje življenjski dobi povezav in preverjanje izposoje spremenljivk (borrow checker). Poleg sredstev za varno delo z kazalci so v jeziku na voljo tudi možnosti za nizkonivojsko delo, na primer, neposreden dostop do pomnilnika v načinu unsafe z uporabo tipa Pointer, klic posameznih SIMD-navodil ali dostop do strojnih razširitev, kot so TensorCores in AMX.

Za poenostavitev ločevanja klasičnega in optimiziranega Python-koda za funkcije z jasno določanjem tipov za vse spremenljivke je predlagana uporaba posebne ključe besede «fn» namesto «def». Podobno za razrede, ko je potrebno statično pakiranje podatkov v pomnilniku med prevajanjem (kot v C) lahko uporabimo tip «struct» namesto «class». Možen je tudi enostaven uvoz modulov v jezikih C/C++, na primer za uvoz funkcije cos iz knjižnice math lahko navedemo «from «math.h» import cos».
Izvor: opennet.ru
