Chris Lattner, themeluesi dhe arkitekti kryesor i LLVM, si dhe krijuesi i gjuhës së programimit Swift, dhe Tim Davis, ish-drejtori i projekteve të AI në Google, si Tensorflow dhe JAX, prezantuan një gjuhë të re programimi, Mojo, e cila kombinon lehtësinë e përdorimit për zhvillime kërkimore dhe krijimin e shpejtë të prototipeve me përshtatshmërinë për formimin e produkteve finale të larta në performancë. Kjo arrihet përmes përdorimit të sintaksës së njohur të gjuhës Python, dhe të dyja përfitohen nga mundësia e kompajlimit në kodin e makinerisë, mekanizmave të sigurt për menaxhimin e memories dhe angazhimit të mjeteve për rritjen harduerike të llogaritjeve.
Projekti fokusohet nĂ« pĂ«rdorimin pĂ«r zhvillimet nĂ« fushĂ«n e mĂ«simit automat, por ndĂ«rkohĂ« paraqitet si njĂ« gjuhĂ« me qĂ«llim tĂ« pĂ«rgjithshĂ«m, qĂ« zgjdhon mundĂ«sitĂ« e gjuhĂ«s Python me mjete programimi sistemor dhe Ă«shtĂ« e pĂ«rshtatshme pĂ«r njĂ« gamĂ« tĂ« gjerĂ« detyrash. PĂ«r shembull, gjuha Ă«shtĂ« e aplikueshme nĂ« fusha tĂ« tilla si llogaritjet e larta nĂ« performancĂ« dhe pĂ«rpunimi dhe transformimi i tĂ« dhĂ«nave. NjĂ« veçori interesante e Mojo Ă«shtĂ« mundĂ«sia pĂ«r tĂ« caktuar simbolin emoji "đ„" si zgjerim pĂ«r skedarĂ«t me kod (p.sh., "helloworld.đ„"), pĂ«rveç zgjerimit tekstual ".mojo".
Aktualisht, gjuha është në një fazë intensive zhvillimi dhe për testim është ofruar vetëm një ndërfaqe online. Versionet e veçanta për ekzekutim në sisteme lokale premtohen të publikohen më vonë, pas marrjes së komenteve mbi funksionimin e mjedisit web interaktiv. Kodet burimore të kompajlerit, JIT dhe zhvillimeve të tjera të lidhura me projektin pritet të hapen pas përfundimit të projektimit të arkitekturës së brendshme (modeli i zhvillimit të prototipit funksional nga pas dyerve të mbyllura i ngjason fazës fillestare të zhvillimit të LLVM, Clang dhe Swift). Duke qenë se sintaksa e Mojo bazohet në gjuhën Python dhe sistemi i tipeve i afërt me C/C++, në të ardhmen planifikojnë të zhvillojnë mjete për të lehtësuar përkthimin në Mojo të projekteve ekzistuese të shkruara në C/C++ dhe Python, si dhe për zhvillimin e projekteve hibride që kombinojnë kodin në Python dhe Mojo.
Projekti është i dedikuar për angazhimin e burimeve harduerike ekzistuese në sistemet heterogjene për kryerjen e llogaritjeve. Për shembull, për ekzekutimin e aplikacioneve në gjuhën Mojo dhe për paralelizimin e llogaritjeve mund të angazhohen GPU, përshpejtues të specializuar për mësimin automat dhe udhëzime procesori vektoriale (SIMD). Si arsyetim për zhvillimin e një nëngrupe të veçantë të gjuhës Python në vend të lidhjes me optimizimin e CPython ekzistues, përmendet orientimi ndaj kompajlimit, integrimi i mundësive të programimit sistemor dhe përdorimi i një arkitekture të brendshme çdoherë të ndryshme që lejon ekzekutimin e kodit në GPU dhe përshpejtues të ndryshëm harduerikë. Ndërkohë, zhvilluesit e Mojo kanë për qëllim të përpiqen sa më shumë që të jetë e mundur të ruajnë kompatibilitetin me CPython.
Mojo mund të përdoret si në modin e interpretimit duke përdorur JIT, ashtu edhe për kompajlim në skedarë ekzekutivë (AOT, ahead-of-time). Kompajleri përmban teknologji moderne të optimizimit automatik, memorizimit dhe kompajlimit të shpërndarë. Kodet burimore në gjuhën Mojo janë të transformuara në një kod të mesëm me nivel të ulët MLIR (Multi-Level Intermediate Representation), i zhvilluar nga projekti LLVM dhe që ofron mundësi të tjera për optimizimin e përpunimit të rrjedhës së të dhënave. Kompajleri lejon përdorimin e backend-eve të ndryshme për gjenerimin e kodit makinë, duke mbështetur MLIR.
Angazhimi i mekanizmave të ndihmës harduerike për rritjen e llogaritjeve jep mundësinë për të arritur performancë, në llogaritje intensive, që tejkalon aplikacionet në C/C++. Për shembull, në testimin e një aplikacioni për gjenerimin e shumëfishtë të Mandelbrotit, aplikacioni i kompajluar në gjuhën Mojo gjatë ekzekutimit në AWS (r7iz.metal-16xl) doli të jetë 6 herë më i shpejtë se realizimi në C++ (0.03 sek. kundrejt 0.20 sek.), gjithashtu 35 mijë herë më i shpejtë se aplikacioni në Python duke përdorur CPython 3.10.9 (0.03 sek. kundrejt 1027 sek.) dhe 1500 herë më i shpejtë duke përdorur PYPY (0.03 sek. kundrejt 46.1 sek.).
Kur vlerĂ«sohet performanca nĂ« zgjidhjen e detyrave tĂ« mĂ«simit tĂ« makinerisĂ«, staku i AI Modular Inference Engine, i shkruar nĂ« gjuhĂ«n Mojo, duke krahasuar me zgjidhjen e bazuar nĂ« bibliotekĂ«n TensorFlow, doli tĂ« ishte 3 herĂ« mĂ« i shpejtĂ« nĂ« njĂ« sistem me procesor Intel gjatĂ« pĂ«rpunimit tĂ« modelit tĂ« gjuhĂ«s, 6.4 herĂ« mĂ« i shpejtĂ« gjatĂ« ekzekutimit tĂ« modelit tĂ« rekomandimeve dhe 2.1 herĂ« mĂ« i shpejtĂ« gjatĂ« punĂ«s me modelet pĂ«r pĂ«rpunimin e informacionit vizual. Duke pĂ«rdorur procesorĂ«t AMD, pĂ«rfitimi nga pĂ«rdorimi i Mojo ishte 3.2, 5 dhe 2.2 herĂ«, ndĂ«rsa gjatĂ« pĂ«rdorimit tĂ« procesorĂ«ve ARM â 5.3, 7.5 dhe 1.7 herĂ«, pĂ«rkatĂ«sisht. Zgjidhja e bazuar nĂ« PyTorch mbeti prapa Mojo me 1.4, 1.1 dhe 1.5 herĂ« nĂ« CPU Intel, me 2.1, 1.2 dhe 1.5 herĂ« nĂ« CPU AMD dhe me 4, 4.3 dhe 1.3 herĂ« nĂ« CPU ARM.

Gjuha mbështet tipizimin statik dhe mjete për punë të sigurt me kujtesën në nivele të ulëta, të ngjashme me mundësitë e gjuhës Rust, siç janë ndjekja e jetës së referencave dhe kontrolli i huazimit të variablave (borrow checker). Përveç mjeteve për punë të sigurt me treguesit, gjuha ofron edhe mundësi për punë të ulët, për shembull, është e mundur të drejtohet direkt në kujtesë në mënyrë të pasigurt me përdorim të llojit Pointer, thirrje e instrukcioneve individuale SIMD ose qasje në zgjerime harduerike, si TensorCores dhe AMX.

Për të lehtësuar ndarjen e kodit klasik dhe të optimizuar Python për funksione me përcaktim të qartë të tipeve për të gjitha variablat, është propozuar përdorimi i një fjalë kyçe të veçantë "fn" në vend të "def". Analogjisht për klasat, kur është e nevojshme paketimi statik i të dhënave në kujtesë gjatë kompilimit (si në C), në vend të "class" mund të përdoret lloji "struct". Gjithashtu, është e mundur të importohen thjesht module nga gjuhët C/C++, për shembull, për të importuar funksionin cos nga biblioteka math mund të specifikohet "from 'math.h' import cos".
Burimi: opennet.ru
