Chris Lattner, LLVM asutaja ja peaarhitekt, samuti programmeerimiskeele Swift looja, ja Tim Davis, endine Google'i AI-projektide juht, nagu Tensorflow ja JAX, tutvustasid uut programmeerimiskeelt Mojo, mis ühendab uurimistööde jaoks kasutamise lihtsuse ja kiire prototüüpimise koos jõudluse tagamisega kõrgekvaliteediliste lõpp-produktide loomisel. Esimene saavutatakse tänu Python'i tuttavale süntaksile, teine aga võimaluse kaudu kompileerida masinkoodi, mälu turvalise kasutamise mehhanismide abil ning kasutada riistvara kiiruskaid arvutuste teostamiseks.
Projekt keskendub masinõppe arendamisele, kuid samas esitleb see end universaalse keelega, mis laiendab Python'i võimalusi süsteemi programmeerimise vahenditega ning sobib laiahaardeliste ülesannete täitmiseks. Näiteks on keel rakendatav sellistes valdkondades nagu kõrge jõudlusega arvutused, andmete töötlemine ja muudatused. Huvi tekitav omadus Mojo's on võimalus kasutada emoji-sümbolit «🔥» koodifailide laienduseks (näiteks «helloworld.🔥»), lisaks tekstilisele laiendusele «.mojo».
Keel on praegu intensiivse arengu faasis ning testimiseks on saadaval ainult veebiliides. Iseseisvad kogumikud kohalikeks süsteemideks plaanitakse avalikustada hiljem, pärast tagasiside saamist interaktiivse veebikeskkonna toimimise kohta. Kompileerija, JIT ja teiste projekti seotud töötlemiste lähtekoodid kavatsetakse avada pärast sisemise arhitektuuri projekteerimise lõpetamist (töötava prototüübi arendamise mudel suletud uste taga meenutab LLVM, Clang ja Swift varajast arendusta vaihe). Kuna Mojo süntaks põhineb Pythonil ja tüübisüsteem on lähedane C/C++-le, plaanitakse tulevikus välja töötada tööriistu olemasolevate C/C++ ja Pythonis kirjutatud projektide tõlke lihtsustamiseks Mojo'le ning hübriidprojektide arendamiseks, mis ühendavad Python ja Mojo koodi.
Projekt on kavandatud heterogeensete süsteemide olemasolevate riistvararessursside kaasamiseks arvutuste tegemiseks. Näiteks võivad Mojo keeles rakenduste täitmiseks ja arvutuste paralleelinamiseks kasutada GPU-sid, spetsialiseeritud masinõppe kiirendajaid ning vektorpinkide protsessorite juhiseid (SIMD). Põhjuseks, miks on arendatud eraldi Python'i alamsuguharu, mitte olemasoleva CPython'i optimeerimisega tegelemine, on suunatus kompileerimisele, süsteemiprogrammeerimise võimete integreerimine ja fundamentaalselt erineva sisearhitektuuri rakendamine, mis võimaldab koodi täita GPU-del ja erinevatel riistvarakiirenditel. Samuti kavatsevad Mojo arendajad järgida ühilduvust CPythoniga nii palju kui võimalik.
Mojo võib töötada nii tõlgendamise režiimis JIT-i kasutades kui ka otse tulemuste (.exe) genereerimiseks (AOT, ahead-of-time). Kompilaator sisaldab moodsaid automaatoptimeerimise, cache'imise ja jaotatud kompileerimise tehnoloogiaid. Mojo keelest kirjutatud allikakood muudetakse madala taseme vahepealseks koodiks MLIR (Multi-Level Intermediate Representation), mida arendab LLVM projekt, pakkudes täiendavaid võimalusi andmevoogude graafilise töötlemise optimeerimiseks. Kompilaator võimaldab masinkoodi genereerimiseks kasutada erinevaid MLIR-i toetavaid tausttehnoloogiaid.
Lisa riistvaramehhanismide kasutamine arvutuste kiirendamiseks võimaldab saavutada jõudlust, mis intensiivsete arvutuste korral ületab C/C++ rakenduste jõudlust. Näiteks Mandelfraktali genereerimise rakenduse testimise käigus osutus AWS-s (r7iz.metal-16xl) jooksutatud Mojo keeles kompileeritud rakendus kuus korda kiiremaks kui C++ versioon (0.03 sek. võrreldes 0.20 sek.), samuti 35 000 korda kiirem kui Pythonis töötav rakendus, millel on standardne CPython 3.10.9 (0.03 sek. võrreldes 1027 sek.) ning 1500 korda kiirem PYPY kasutamisel (0.03 sek. võrreldes 46.1 sek.).
Masinõppe probleemide lahendamise jõudluse hindamisel osutus Mojo keeles kirjutatud AI-stek Modular Inference Engine Intel protsessoril kolme korda kiiremaks kui TensorFlow raamatukogul põhinev lahendus keele mudeli töötlemisel, 6.4 korda kiirem soovituste genereerimise mudeli täitmisel ning 2.1 korda kiirem visuaalse teabe töötlemise mudelite puhul. AMD protsessorite kasutamisel oli Mojo eelis vastavalt 3.2, 5 ja 2.2 korda, samas kui ARM protsessorite kasutamisel oli see 5.3, 7.5 ja 1.7 korda. PyTorch lahendus jääb Mojo'le alla 1.4, 1.1 ja 1.5 korda Intel CPU-l, 2.1, 1.2 ja 1.5 korda AMD CPU-l ning 4, 4.3 ja 1.3 korda ARM CPU-l.

Keeles on staatiline tüpitsus ja mäluga turvaliseks madalamal tasemel töötamiseks vajalikud tööriistad, mis meenutavad Rusti keelt, sealhulgas viidatud eluea jälgimine ja muutujate laenamise kontroll (borrow checker). Peale turvaliste näidikute jaoks mõeldud tööriistade on keeles ka madala tasemega töötamise võimalused, näiteks saab kasutada otsepöördumist mällu, kui kasutada unsafe režiimi Pointer tüüpi, otse SIMD käskluste väljakutsumiseks või juurdepääsuks riistvaralaienemistele, nagu TensorCores ja AMX.

Klassikalise ja optimeeritud Python-koodi eristamiseks soovitatakse kasutada eraldi märksõna „fn” kõigi muutuja tüüpide rakendamiseks def-kae asemel. Sarnaselt klasside puhul, vajadusel staatilise andmete pakkimise jaoks mällu kompileerimise ajal (nagu C-s), võib „class” asemel kasutada tüüp „struct”. Samuti on võimalik moodulite lihtne importimine C/C++ keeltes, näiteks math teegi cos funktsiooni importimiseks võib kasutada „from 'math.h' import cos”.
Allikas: opennet.ru
