Chris Lattner, az LLVM alapítója és főépítésze, valamint a Swift programozási nyelv létrehozója, és Tim Davis, a Google korábbi AI-projektvezetője, mint például a Tensorflow és a JAX, bemutatták az új Mojo programozási nyelvet, amely ötvözi a kutatási fejlesztések egyszerű használhatóságát és a gyors prototípus-készítést a nagy teljesítményű végtermékek létrehozásának képességével. Ezt a Python nyelv szokásos szintaxisának használata teszi lehetővé, míg a második a gépi kódra való fordítás, a biztonságos memóriakezelési mechanizmusok és a számítási teljesítményhardveres gyorsításának bevonása révén valósul meg.
A projekt a gépi tanulás területén történő fejlesztésekre összpontosít, de általános célú nyelvként is bemutatják, amely bővíti a Python nyelv képességeit rendszerprogramozási eszközökkel, és alkalmas széleskörű feladatokra. Például a nyelv alkalmazható olyan területeken, mint a nagy teljesítményű számítások vagy az adatok feldolgozása és átalakítása. Az Mojo érdekes jellemzője, hogy lehetőséget biztosít a „🔥” emoji szimbólum fájlkiterjesztésként való megadására a kód fájlokhoz (például „helloworld.🔥”), a szöveges „.mojo” kiterjesztés mellett.
Jelenleg a nyelv intenzív fejlesztési szakaszban van, és tesztelés céljából csak online interfész érhető el. A helyi rendszerekhez használható elkülönített build-eket később tervezik közzétenni, miután visszajelzéseket kaptak az interaktív webkörnyezet működéséről. A fordító, a JIT és a projekthez kapcsolódó egyéb fejlesztések forráskódját a belső architektúra tervezésének befejezését követően tervezik nyilvánosságra hozni (a zárt ajtók mögötti munkamodell a LLVM, Clang és Swift kezdeti fejlesztési szakaszát idézi). Mivel a Mojo szintaxisa a Python nyelv alapjaira épül, és a típus rendszer a C/C++-hoz hasonló, a jövőben tervezik az eszközkészlet kidolgozását, amely megkönnyíti a létező C/C++ és Python projektek Mojo-ra való átportálását, valamint a Python és Mojo kódot kombináló hibrid projektek fejlesztését.
A projekt célja a heterogén rendszerekben található hardverforrások teljesítményének kihasználása a számítási feladatok elvégzésében. Például a Mojo nyelven írt alkalmazások végrehajtásához és a számítások párhuzamosításához GPU-k, gépi tanulásra tervezett speciális gyorsítók és vektoriális processzor utasítások (SIMD) vonhatók be. A Python nyelv egy különálló részhalmazának fejlesztésének oka a meglévő CPython optimalizálása helyett a fordításra, a rendszerprogramozás lehetőségeinek integrálására és egy alapvetően eltérő belső architektúra alkalmazására vonatkozik, amely lehetővé teszi a kód futtatását GPU-kon és különböző hardveres gyorsítókön. Ugyanakkor a Mojo fejlesztői törekednek, hogy amennyire csak lehetséges, fenntartsák a CPython-nal való kompatibilitást.
A Mojo használható interaktív üzemmódban JIT (Just-In-Time) alkalmazásával, valamint előre lefordított végrehajtható fájlok készítésére (AOT, ahead-of-time). A fordítóba modern automatikus optimalizálási, caching és elosztott fordítási technológiák épültek be. A Mojo nyelven írt forráskódokat alacsony szintű köztes kódra (MLIR, Multi-Level Intermediate Representation) alakítják, amelyet az LLVM projekt fejlesztett, és amely további optimalizálási lehetőségeket biztosít az adatfolyam gráf feldolgozásához. A fordító lehetővé teszi különböző háttérprogramok alkalmazását a gépi kód generálásához, amelyek támogatják az MLIR-t.
További hardvermechanizmusok bevonása a számítások felgyorsítására lehetővé teszi, hogy a teljesítmény intenzív számítások során felülmúlja a C/C++ nyelvű alkalmazásokét. Például egy Mandelbrot halmaz generálására készült alkalmazás tesztelésekor a Mojo nyelven írt, felhőben futó (AWS, r7iz.metal-16xl) alkalmazás 6-szor gyorsabb volt, mint a C++-ban megvalósított változat (0,03 másodperc a 0,20 másodperccel szemben), és 35 ezer szer gyorsabb a Windows SSE 3.10.9 verzióval működő CPython-jal írt alkalmazásnál (0,03 másodperc a 1027 másodperccel szemben), valamint 1500-szor gyorsabb a PYPY használatával (0,03 másodperc a 46,1 másodperccel szemben).
A gépi tanulási feladatok teljesítményének értékelésekor a Mojo nyelven írt AI Modular Inference Engine stack háromszor gyorsabb volt az Intel processzorral rendelkező rendszeren a nyelvi modellek feldolgozása során, 6.4-szer gyorsabb a javaslati modellek végrehajtásakor, és 2.1-szer gyorsabb a vizuális információk feldolgozó modellek esetében a TensorFlow alapú megoldással összehasonlítva. AMD processzorok használata esetén a Mojo nyeresége 3.2, 5 és 2.2-szeres volt, míg ARM processzorok esetén 5.3, 7.5 és 1.7-szeres nyereséget mutatott. A PyTorch alapú megoldás 1.4, 1.1 és 1.5-ször hátrányban volt a Mojo-val szemben Intel CPU-n, 2.1, 1.2 és 1.5-ször AMD CPU-n, valamint 4, 4.3 és 1.3-szor ARM CPU-n.

A nyelv támogatja a statikus típust és a memória alacsony szintű, biztonságos kezelésére szolgáló eszközöket, hasonlóan a Rust nyelv által kínált lehetőségekhez, mint például a hivatkozások élettartamának nyomon követése és a változók kölcsönzésének ellenőrzése (borrow checker). A címkék biztonságos használatán túl a nyelv lehetőséget nyújt az alacsony szintű műveletekre is, például közvetlen memóriahozzáférés unsafe módban a Pointer típus használatával, egyedi SIMD utasítások végrehajtásával, vagy hardveres kiterjesztésekhez való hozzáféréssel, mint a TensorCores és az AMX.

A klasszikus és a optimalizált Python kódok elkülönítésének megkönnyítése érdekében javasolt a típusok minden változóra történő egyértelmű meghatározásakor az "fn" kulcsszó használata a "def" helyett. Hasonlóképpen, osztályok esetében, ha szükséges a statikus adatcsomagolás a memóriában a fordítási idő alatt (mint a C-ben), a "class" helyett a "struct" típus használható. Emellett egyszerű C/C++ nyelvű modulimportálás is lehetséges, például a math könyvtárból a cos függvény importálása esetén a "from "math.h" import cos" megadásával.
Forrás: opennet.ru
