Chris Lattner, az LLVM alapítója és főépítésze, valamint a Swift programozási nyelv megalkotója, és Tim Davis, a Google olyan mesterséges intelligencia projektjeinek korábbi vezetője, mint a Tensorflow és a JAX, bemutattak egy új programozási nyelvet, a Mojót, amely a kutatás és a gyors prototípuskészítés egyszerű használatát ötvözi a nagy teljesítményű végtermékek építésének alkalmasságával. Ezt a Python ismerős szintaxisával, míg az utóbbit natív fordítással, memóriabiztonsági mechanizmusokkal és hardveres gyorsítással érik el.
A projekt a gépi tanulás fejlesztésére összpontosít, de általános célú nyelvként is bemutatják, amely rendszerprogramozási képességekkel bővíti a Pythont, és számos feladatra alkalmas. A nyelv például olyan területeken alkalmazható, mint a nagy teljesítményű számítástechnika, valamint az adatfeldolgozás és -átalakítás. A Mojo egyik érdekes tulajdonsága, hogy a ".mojo" szövegkiterjesztés mellett a kódfájlokhoz a "🔥" emoji szimbólum is megadható kiterjesztéssel (pl. "helloworld.🔥").
A nyelv jelenleg intenzív fejlesztés alatt áll, és tesztelésre csak egy online felület érhető el. A helyi rendszereken futtatható önálló verziók megjelenését később ígérik, miután visszajelzéseket kapnak az interaktív webes környezetről. A fordító, a JIT és az egyéb kapcsolódó fejlesztések forráskódja a belső architektúra elkészülte után nyílt forráskódú lesz (a működő prototípus zárt ajtók mögötti fejlesztési modellje az LLVM, a Clang és a Swift kezdeti fejlesztési fázisára emlékeztet). Mivel a Mojo szintaxisa Python alapú, típusrendszere pedig hasonló a C/C++-hoz, a jövőbeli tervek között szerepel olyan eszközök fejlesztése, amelyek egyszerűsítik a meglévő C/C++ és Python projektek Mojóba való migrálását, valamint elősegítik a Python és Mojo kódot ötvöző hibrid projektek fejlesztését.
A projekt célja, hogy kihasználja a heterogén rendszerek meglévő hardver erőforrásait a számításokhoz. Például GPU-k, speciális gépi tanulási gyorsítók és egyutasításos vektoros processzorok (SIMD) használhatók Mojo alkalmazások futtatására és számítások párhuzamosítására. A különálló Python részhalmaz fejlesztésének okai – a meglévő CPython optimalizálása helyett – közé tartozik a fordításra való összpontosítás, a rendszerprogramozási képességek integrációja, valamint egy alapvetően eltérő belső architektúra használata, amely lehetővé teszi a kódfuttatást GPU-kon és különféle hardvergyorsítókon. Ugyanakkor a Mojo fejlesztői a lehető legnagyobb mértékben meg kívánják őrizni a CPythonnal való kompatibilitást.
A Mojo használható mind JIT (just-in-time), mind előrehaladott (AOT) módban. A fordító modern technológiákat tartalmaz az automatikus optimalizáláshoz, a gyorsítótárazáshoz és az elosztott fordításhoz. A Mojo forráskódja alacsony szintű köztes kóddá (MLIR) konvertálódik, amelyet az LLVM projekt fejlesztett ki, és további képességeket kínál az adatfolyam-gráfok feldolgozásának optimalizálásához. A fordító különféle MLIR-képes backendeket támogat a gépi kód generálásához.
A további hardveres gyorsítás kihasználása olyan teljesítménynövekedést tesz lehetővé az intenzív számítások során, amely meghaladja a C/C++ alkalmazások teljesítményét. Például egy Mandelbrot halmazgeneráló alkalmazás tesztelésekor a lefordított Mojo alkalmazás (r7iz.metal-16xl) hatszor gyorsabb volt, mint a C++ implementáció az AWS felhőben futtatva (0.03 mp vs. 0.20 mp), 35 6-szer gyorsabb, mint a Python alkalmazás a standard CPython 3.10.9 használatakor (0.03 mp vs. 1027 mp), és 1500-szor gyorsabb PYPY használatakor (0.03 mp vs. 46.1 mp).
A gépi tanulási teljesítmény értékelésekor a Mojo nyelven írt Modular Inference Engine AI stack 3-szor gyorsabbnak bizonyult Intel processzoron nyelvi modell feldolgozásakor, 6.4-szer gyorsabb ajánlási modell futtatásakor, és 2.1-szer gyorsabb vizuális információfeldolgozási modellek futtatásakor egy TensorFlow-alapú megoldáshoz képest. AMD processzorokon a Mojo 3.2x, 5x és 2.2x teljesítménynövekedést ért el, míg ARM processzorokon 5.3x, 7.5x és 1.7x teljesítménynövekedést. A PyTorch-alapú megoldás 1.4x, 1.1x és 1.5x-ös sebességgel maradt el a Mojo mögött Intel CPU-kon, 2.1x, 1.2x és 1.5x-ös sebességgel AMD CPU-kon, valamint 4x, 4.3x és 1.3x-es sebességgel ARM CPU-kon.

A nyelv támogatja a statikus típuskezelést és a Rust-ra emlékeztető alacsony szintű memóriabiztonsági funkciókat, mint például a referencia élettartamának nyomon követése és a kölcsönzés-ellenőrző. A mutató biztonsági funkciók mellett a nyelv alacsony szintű képességeket is kínál, például közvetlen memória-hozzáférést nem biztonságos módban a Pointer típus használatával, egyedi SIMD utasítások meghívását, valamint hardverbővítmények, például a TensorCores és az AMX elérését.

A klasszikus és az optimalizált Python kód elkülönítésének egyszerűsítése érdekében olyan függvények esetén, amelyeknél minden változóhoz explicit módon definiált típus van, javasolt egy különálló "fn" kulcsszó használata a "def" helyett. Hasonlóképpen, osztályok esetén, ha statikus adatok memóriába csomagolására van szükség fordítási időben (mint a C-ben), a "struct" típus használható a "class" helyett. A C/C++ modulok egyszerű importálása is lehetséges. Például a cos függvény importálásához a matematikai könyvtárból megadhatjuk a "from "math.h" import cos." parancsot.
Forrás: opennet.ru
