Chris Lattner, grundare och huvudarkitekt för LLVM samt skaparen av programmeringssprÄket Swift, och Tim Davis, tidigare chef för AI-projekt pÄ Google, sÄsom Tensorflow och JAX, har presenterat ett nytt programmeringssprÄk vid namn Mojo, som kombinerar enkelhet för forskningsutveckling och snabb prototyptillverkning med lÀmpligheten att skapa högpresterande slutprodukter. Det första uppnÄs genom att anvÀnda den vÀlbekanta syntaxen frÄn sprÄket Python, och det andra genom möjligheten att kompilera till maskinkod, mekanismer för sÀker minneshantering och anvÀndning av verktyg för hÄrdvaruaccelerering av berÀkningar.
Projektet fokuserar pĂ„ anvĂ€ndning för utveckling inom maskininlĂ€rning, men presenteras samtidigt som ett allmĂ€nt syfte-sprĂ„k som utökar möjligheterna för sprĂ„ket Python med systemprogrammeringsverktyg och Ă€r lĂ€mpligt för ett brett spektrum av uppgifter. Till exempel Ă€r sprĂ„ket tillĂ€mpligt inom omrĂ„den som högpresterande berĂ€kningar, databehandling och datakonvertering. En intressant egenskap hos Mojo Ă€r möjligheten att ange emoji-symbolen "đ„" som en filĂ€ndelse för kodfiler (till exempel "helloworld.đ„"), förutom den textbaserade filĂ€ndelsen ".mojo".
För nÀrvarande Àr sprÄket i intensiv utveckling och endast en online-grÀnssnitt Àr tillgÀnglig för testning. Separata versioner för körning pÄ lokala system förvÀntas publiceras senare, efter att feedback har mottagits om det interaktiva webbmiljön. KÀllkoden till kompilatorn, JIT och andra relaterade projektförberedelser planeras att offentliggöras efter att den interna arkitekturen har designats (utvecklingsmodellen av den fungerande prototypen bakom stÀngda dörrar pÄminner om den initiala utvecklingsfasen av LLVM, Clang och Swift). Eftersom Mojo-syntaxen Àr baserad pÄ Python och typ systemet Àr nÀra C/C++, planerar man i framtiden att utveckla verktyg för att förenkla översÀttningen till Mojo av befintliga projekt skrivna i C/C++ och Python, samt för att utveckla hybridprojekt som kombinerar kod i Python och Mojo.
Projektet syftar till att utnyttja de befintliga hÄrdvaruresurserna i heterogena system för att utföra berÀkningar. Till exempel kan GPU:er, specialiserade acceleratorer för maskininlÀrning och vektorprocessorinstruktioner (SIMD) anvÀndas för att köra applikationer skrivna i Mojo och parallellisera berÀkningarna. Anledningen till att utveckla en separat delmÀngd av sprÄket Python, istÀllet för att optimera det befintliga CPython, Àr fokus pÄ kompilering, integration av systemprogrammeringsfunktioner och tillÀmpning av en fundamentalt annorlunda intern arkitektur som gör det möjligt att köra kod pÄ GPU:er och olika hÄrdvaruacceleratorer. Mojo-utvecklarna avser, sÄ lÄngt som möjligt, att hÄlla sig till kompatibilitet med CPython.
Mojo kan anvÀndas bÄde i tolkningslÀge med JIT och för kompilering till körbara filer (AOT, ahead-of-time). Kompilatorn innehÄller moderna automatiseringsmetoder för optimering, caching och distribuerad kompilering. KÀllkoden i Mojo omvandlas till lÄg nivÄ mellanliggande kod i MLIR (Multi-Level Intermediate Representation), utvecklad av LLVM-projektet och som erbjuder ytterligare möjligheter för optimering av datagrafflöden. Kompilatorn tillÄter anvÀndning av olika backend-alternativ för generering av maskinkod som stöder MLIR.
AnvÀndning av ytterligare hÄrdvarumechanismer för att pÄskynda berÀkningar gör det möjligt att uppnÄ prestanda som, vid intensiva berÀkningar, övertrÀffar applikationer skrivna i C/C++. Till exempel visade en testapplikation för att generera mÄnga Mandelbrot-mÀngder, dÀr applikationen var kompilera i Mojo och kördes pÄ AWS (r7iz.metal-16xl), sig vara 6 gÄnger snabbare Àn implementationen i C++ (0,03 sek. mot 0,20 sek.), samt 35 000 gÄnger snabbare Àn applikationen i Python med standard CPython 3.10.9 (0,03 sek. mot 1027 sek.) och 1500 gÄnger snabbare Àn nÀr PYPY anvÀndes (0,03 sek. mot 46,1 sek.).
Vid utvÀrderingen av prestandan inom maskininlÀrningsuppgifter visade AI-stacken Modular Inference Engine, skriven i Mojo, sig vara tre gÄnger snabbare pÄ en Intel-processor vid bearbetning av sprÄkmodeller, 6.4 gÄnger snabbare vid utförande av rekommendationsmodeller och 2.1 gÄnger snabbare vid arbete med visuella data. Vid anvÀndning av AMD-processorer var vinsten med Mojo 3.2, 5 och 2.2 gÄnger, och för ARM-processorer var vinsten 5.3, 7.5 och 1.7 gÄnger, respektive. PyTorch-lösningen var efter Mojo med 1.4, 1.1 och 1.5 gÄnger pÄ Intel-CPU, 2.1, 1.2 och 1.5 gÄnger pÄ AMD-CPU och 4, 4.3 och 1.3 gÄnger pÄ ARM-CPU.

SprÄket stöder statisk typning och verktyg för sÀker lÄg nivÄ hantering av minne, liknande funktionerna i Rust, som livscykelövervakning av referenser och kontroll av variabellÄn (borrow checker). Utöver verktygen för sÀker hantering av pekare erbjuder sprÄket Àven möjligheter för lÄg nivÄ arbete, exempelvis direktminnesÄtkomst i unsafe-lÀge med hjÀlp av typen Pointer, anrop av enskilda SIMD-instruktioner eller Ätkomst till hÄrdvaruacceleratorer som TensorCores och AMX.

För att underlÀtta separationen av klassisk och optimerad Python-kod för funktioner med tydlig typdefinition för alla variabler föreslÄs att anvÀnda ett separat nyckelord "fn" istÀllet för "def". PÄ samma sÀtt, för klasser, vid behov av statisk datakapsling i minnet under kompilering (som i C) kan typen "struct" anvÀndas istÀllet för "class". Det Àr ocksÄ möjligt att enkelt importera moduler frÄn C/C++, till exempel, för att importera funktionen cos frÄn math-biblioteket kan man skriva "from 'math.h' import cos".
KĂ€lla: opennet.ru
