LLVM looja arendab uut programmeerimiskeelt Mojo

Chris Lattner, LLVMi asutaja ja peaarhitekt ning programmeerimiskeele Swift looja, koos Tim Davise, endise Google'i AI-projektide juhi, nagu Tensorflow ja JAX, esitlesid uut programmeerimiskeelt Mojo, mis ühendab uurimisarenduse ja kiire prototüüpimise lihtsuse kõrge jõudlusega lõppproduktide loomisvõimega. Esimest saavutatakse Python'i keele tuttava süntaksi kasutamise kaudu, teist aga masinkoodi kompileerimise, mälu ohutu töö mehhanismide ja arvutuskiirendamise vahendite rakendamise kaudu.

Projekt on keskendunud masinõppe arendusele, kuid samas esitletakse seda üldotstarbelise keelena, mis laiendab Python'i võimalusi süsteemse programmeerimise kaudu ja sobib laia valiku ülesannete täitmiseks. Näiteks saab keelt rakendada sellistes valdkondades nagu kõrge jõudlusega arvutamine, andmete töötlemine ja transformeerimine. Huvitav omadus Mojo keeles on emoji-sümboli „🔥“ kasutamine koodifailide laiendina (nt „helloworld.🔥“), lisaks tekstilisele laiendile „.mojo“.

Praegu on keel intensiivse arenduse faasis ning testimiseks on saadaval ainult veebiliides. Iseseisvad versioonid kohalikele süsteemidele lubatakse avaldada hiljem, pärast tagasiside saamist interaktiivse veebikeskkonna toimimise kohta. Kompilaatori, JIT'i ja teiste projekti seotud tööde lähtekoodid plaanitakse avada pärast sisemise arhiitektuuri projekteerimise lõpetamist (tööpaberiku arenduse mudel meenutab LLVMi, Clangi ja Swifti arenduse algfaasi). Kuna Mojo süntaks põhineb Python'il ja tüübimudel on C/C+-iga sarnane, on tulevikus plaanis välja töötada tööriistad, mis lihtsustavad olemasolevate C/C++ ja Python'is kirjutatud projektide tõlkimist Mojo'sse ning hübriidprojektide, mis kombineerivad koodi Python'is ja Mojo's, arendamist.

Projekt on suunatud süsteemi riistvaraliste ressursside kaasamisele heterogeensetes süsteemides arvutuste teostamiseks. Näiteks võivad Mojo keeles rakenduste täitmiseks ja arvutuste paralleelseks jagamiseks kasutada GPU-sid, spetsialiseeritud kiirendajaid masinõppe jaoks ja vektorpinkide protsessorite käske (SIMD). Eraldi Python'i alakeele arendamise põhjuseks, selle asemel et optimeerida olemasolevat CPython'i, on välja toodud fookus kompileerimisele, süsteemse programmeerimise võimaluste integreerimisele ja täiesti erineva sisemise arhitektuuri kasutamisele, mis võimaldab koodi töödelda GPU-del ja erinevatel riistvarakiirenditel. Samuti kavatsevad Mojo arendajad võimalikult palju järgida CPython'i ühilduvust.

Mojo't saab kasutada nii tõlgendamisrežiimis JIT-i abil kui ka täitmistfailide kompileerimiseks (AOT, ahead-of-time). Kompilaatorisse on integreeritud kaasaegsed automaatse optimeerimise, vahemälu ja jaotatud kompileerimise tehnoloogiad. Mojo keeles skriptid muudetakse madala taseme vahe-koodiks MLIR (Multi-Level Intermediate Representation), mille arendab LLVM projekt ja mis pakub täiendavaid optimeerimisvõimalusi andmevoo graafide töötlemiseks. Kompilaator võimaldab kasutada masinkoodi genereerimiseks erinevaid backende, mis toetavad MLIR-i.

Lisariistvaramehhanismide kaasamine arvutuste kiirendamiseks võimaldab saavutada jõudlust, mis intensiivsete arvutuste puhul ületab C/C++ rakenduste omasid. Näiteks Mandelbroti hulga genereerimiseks mõeldud rakenduse testimisel oli Mojo keeles kompileeritud rakendus AWS (r7iz.metal-16xl) keskkonnas 6 korda kiirem kui C++ rakenduse teostus (0,03 sek. võrreldes 0,20 sek.) ning 35 000 korda kiirem kui Python'i rakendus, kasutades standardset CPython 3.10.9 (0,03 sek. võrreldes 1027 sek.) ja 1500 korda kiirem kui PYPY kasutamisel (0,03 sek. võrreldes 46,1 sek.).

Masinõppeülesannete soorituse hindamisel on AI-pakk Modular Inference Engine, mis on kirjutatud Mojo keeles, võrreldes TensorFlow raamatukogul põhineva lahendusega, Intel CPU süsteemis kolm korda kiirem keeletehnoloogia mudeli töötlemisel, 6.4 korda kiirem soovitusmudeli käitamisel ja 2.1 korda kiirem visuaalsete teadete mudelite töötlemisel. AMD protsessoritega Mojo kasutamise eelised olid vastavalt 3.2, 5 ja 2.2 korda, ning ARM protsessoritega 5.3, 7.5 ja 1.7 korda. PyTorch-lahendus jäi Mojo-le alla Intel CPU-l 1.4, 1.1 ja 1.5 korda, AMD CPU-l 2.1, 1.2 ja 1.5 korda, ning ARM CPU-l vastavalt 4, 4.3 ja 1.3 korda.

LLVM looja arendab uut programmeerimiskeelt Mojo

Keele toetab staatiline tüüpide kontroll ja tööriistad mälu madalal tasemel turvaliseks tööks, mis meenutab Rust keele võimalusi, näiteks viidete eluea jälgimine ja muutujate laenamise kontroll (borrow checker). Lisaks mälu turvalisele töötlemisele on keeles olemas ka madala taseme töövõimalused, näiteks otse mälu käsitlemine unsafe režiimis kasutades Pointer tüüpi, üksikute SIMD-käskude kutsumine või juurdepääs riistvaralistele täiendustele, nagu TensorCores ja AMX.

LLVM looja arendab uut programmeerimiskeelt Mojo

Klassikalise ja optimeeritud Python-koodi eristamise lihtsustamiseks on ettepanek kasutada eraldi võtmesõna „fn” asemele „def” funktsioonide puhul, kus on selge tüüpide määramine kõigile muutujatele. Sarnasel viisil, kui andmete staatilist pakkimist mällu on vaja kompileerimise ajal (sarnaselt C-ga), võib „class” asemel kasutada tüüpi „struct”. Samuti on võimalik lihtne moodulite import C/C++ keeltes, näiteks funktsiooni cos importimiseks math raamatukogust võib märkida „from 'math.h' import cos”.

Allikas: opennet.ru

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster