Chrisas Lattneris, LLVM įkūrėjas ir vyriausiasis architektas bei „Swift“ programavimo kalbos kūrėjas, ir Timas Davisas, buvęs „Google“ AI projektų, tokių kaip Tensorflow ir JAX vadovas, pristatė naują programavimo kalbą Mojo, kuri apjungia paprastą naudojimą mokslinių tyrimų plėtrai ir greitas prototipų kūrimas su galimybe sukurti aukštos kokybės galutinius produktus. Pirmoji pasiekiama naudojant pažįstamą Python kalbos sintaksę, o antroji – gebėjimą kompiliuoti į mašininį kodą, atmintyje saugius mechanizmus ir aparatinės įrangos spartinimo įrankius.
Projektas orientuotas į naudojimą tobulinant mašininio mokymosi srityje, tačiau pristatomas kaip bendrosios paskirties kalba, praplečianti Python galimybes su sistemų programavimo įrankiais ir tinkama įvairioms užduotims atlikti. Pavyzdžiui, ši kalba taikoma tokioms sritims kaip didelio našumo skaičiavimas, duomenų apdorojimas ir transformavimas. Įdomi „Mojo“ savybė yra galimybė nurodyti jaustukų simbolį „🔥“ kaip kodo failų plėtinį (pvz., „helloworld.🔥“), be teksto plėtinio „.mojo“.
Šiuo metu kalba yra intensyvaus kūrimo stadijoje ir testavimui siūloma tik internetinė sąsaja. Atskirus lokaliose sistemose veikiančius mazgus žadama publikuoti vėliau, gavus atsiliepimus apie interaktyvios interneto aplinkos veikimą. Kompiliatoriaus, JIT ir kitų su projektu susijusių patobulinimų šaltinio kodą planuojama atidaryti užbaigus vidinę architektūrą (veikiančio prototipo kūrimo už uždarų durų modelis primena pradinį LLVM, Clang ir Swift). Kadangi Mojo sintaksė yra pagrįsta Python kalba, o tipų sistema artima C/C++, ateityje planuojama kurti įrankius, kurie supaprastintų esamų projektų, parašytų C/C++ ir Python kalbomis, vertimą į Mojo, taip pat kurti hibridinius projektus, jungiančius Python kodą ir Mojo.
Projektas skirtas naudoti turimus heterogeninių sistemų techninius išteklius atliekant skaičiavimus. Pavyzdžiui, GPU, specializuoti mašininio mokymosi greitintuvai ir procesoriaus nurodymų vektoriai (SIMD) gali būti naudojami Mojo programoms paleisti ir skaičiavimams lygiagretinti. Priežastys, dėl kurių reikėjo sukurti atskirą Python kalbos poaibį, o ne prisijungti prie esamo CPython optimizavimo darbų, apima susitelkimą į kompiliavimą, sistemos programavimo galimybių integravimą ir iš esmės skirtingos vidinės architektūros, leidžiančios kodą paleisti GPU ir įvairiuose įrenginiuose, naudojimą. aparatūros greitintuvai. Tačiau „Mojo“ kūrėjai ketina kuo labiau išlaikyti suderinamumą su „CPython“.
Mojo gali būti naudojamas tiek interpretavimo režimu naudojant JIT, tiek kompiliuojant į vykdomuosius failus (AOT, prieš laiką). Kompiliatorius turi įmontuotas modernias automatinio optimizavimo, talpyklos kaupimo ir paskirstyto kompiliavimo technologijas. Šaltiniai tekstai Mojo kalba konvertuojami į žemo lygio tarpinį kodą MLIR (Multi-Level Intermediate Representation), sukurtą LLVM projekto ir suteikiantį papildomų galimybių optimizuoti duomenų srauto grafiko apdorojimą. Kompiliatorius leidžia naudoti įvairias užpakalines programas, kurios palaiko MLIR, kad būtų galima generuoti mašinos kodą.
Naudojant papildomus aparatūros mechanizmus skaičiavimams paspartinti, intensyvių skaičiavimų metu galima pasiekti geresnių rezultatų nei C/C++ programos. Pavyzdžiui, testuojant programą, skirtą Mandelbrot rinkiniui generuoti, Mojo kalba sukompiliuota programa, vykdoma AWS debesyje (r7iz.metal-16xl), pasirodė 6 kartus greitesnė nei C++ diegimas (0.03 sek. . .
Vertinant našumą mašininio mokymosi problemų sprendimo srityje, Mojo kalba parašytas AI stack modulinis išvadų variklis, palyginti su sprendimu, paremtu TensorFlow biblioteka, buvo 3 kartus greitesnis apdorojant kalbos modelį sistemoje su „Intel“ procesorius, 6.4 karto greičiau apdorojant rekomendacijų generavimo modelio vykdymą ir 2.1 karto greičiau dirbant su modeliais, skirtais vaizdinei informacijai apdoroti. Naudojant AMD procesorius, prieaugiai naudojant Mojo buvo 3.2, 5 ir 2.2 karto, o naudojant ARM procesorius - atitinkamai 5.3, 7.5 ir 1.7 karto. „PyTorch“ pagrįstas sprendimas nuo „Mojo“ atsiliko 1.4, 1.1 ir 1.5 karto „Intel“ procesoriuose, 2.1, 1.2 ir 1.5 karto AMD procesoriuose ir 4, 4.3 ir 1.3 karto ARM procesoriuose.

Kalba palaiko statinį spausdinimą ir žemo lygio saugaus atminties funkcijas, primenančias Rust, pvz., nuorodos naudojimo trukmės stebėjimą ir skolinimosi tikrintuvą. Be saugaus darbo su rodyklėmis priemonių, kalba taip pat suteikia žemo lygio darbo funkcijų, pavyzdžiui, tiesioginę prieigą prie atminties nesaugiu režimu naudojant žymeklio tipą, individualių SIMD instrukcijų iškvietimą arba prieigą prie aparatinės įrangos plėtinių, tokių kaip TensorCores ir AMX. .

Siekiant supaprastinti klasikinio ir optimizuoto Python kodo atskyrimą funkcijoms su aiškiais visų kintamųjų tipų apibrėžimais, siūloma naudoti atskirą raktinį žodį „fn“, o ne „def“. Panašiai klasėms, jei jums reikia statiškai supakuoti duomenis atmintyje kompiliavimo metu (kaip C), galite naudoti "struct" tipą vietoj "class". Taip pat galima tiesiog importuoti modulius C/C++ kalbomis, pvz., norint importuoti funkciją cos iš matematikos bibliotekos, galima nurodyti „iš „math.h“ importuoti cos“.
Šaltinis: opennet.ru
