Krijuesi LLVM zhvillon një gjuhë të re programimi Mojo

Chris Lattner, themeluesi dhe arkitekti kryesor i LLVM dhe krijuesi i gjuhës së programimit Swift, dhe Tim Davis, ish-kreu i projekteve të Google AI si Tensorflow dhe JAX, prezantuan një gjuhë të re programimi, Mojo, që kombinon lehtësinë e përdorimit për zhvillimin e kërkimit dhe prototipizim i shpejtë me potencial për të formuluar produkte përfundimtare me performancë të lartë. E para arrihet përmes përdorimit të sintaksës së njohur të gjuhës Python, dhe e dyta përmes aftësisë për të përpiluar në kodin e makinës, mekanizmat e sigurt për memorie dhe përdorimin e mjeteve të përshpejtimit të harduerit.

Projekti është i fokusuar në përdorimin për zhvillim në fushën e mësimit të makinerive, por paraqitet si një gjuhë me qëllime të përgjithshme që zgjeron aftësitë e Python me mjete programimi sistemesh dhe është e përshtatshme për një gamë të gjerë detyrash. Për shembull, gjuha është e zbatueshme në fusha të tilla si llogaritja me performancë të lartë, përpunimi i të dhënave dhe transformimi. Një veçori interesante e Mojo është aftësia për të specifikuar karakterin emoji "🔥" si një shtesë për skedarët e kodit (për shembull, "helloworld.🔥"), përveç shtesës së tekstit ".mojo".

Aktualisht, gjuha është në fazën e zhvillimit intensiv dhe vetëm ndërfaqja online ofrohet për testim. Asambletë e veçanta për ekzekutimin në sistemet lokale janë premtuar të publikohen më vonë, pasi të marrin reagime mbi funksionimin e mjedisit interaktiv të ueb-it. Kodi burimor për përpiluesin, JIT dhe zhvillime të tjera në lidhje me projektin është planifikuar të hapet pasi të përfundojë arkitektura e brendshme (modeli për zhvillimin e një prototipi pune pas dyerve të mbyllura të kujton fazën fillestare të zhvillimit të LLVM, Clang dhe Swift). Meqenëse sintaksa Mojo bazohet në gjuhën Python dhe sistemi i tipit është afër C/C++, në të ardhmen ata planifikojnë të zhvillojnë mjete për të thjeshtuar përkthimin e projekteve ekzistuese të shkruara në C/C++ dhe Python në Mojo, si dhe për të zhvilluar projekte hibride duke kombinuar kodin Python dhe Mojo.

Projekti është krijuar për të përfshirë burimet e disponueshme harduerike të sistemeve heterogjene në kryerjen e llogaritjeve. Për shembull, GPU-të, përshpejtuesit e specializuar të mësimit të makinerive dhe vektorët e udhëzimeve të procesorit (SIMD) mund të përdoren për të ekzekutuar aplikacionet Mojo dhe për të paralelizuar llogaritjet. Arsyet e dhëna për zhvillimin e një nëngrupi të veçantë të gjuhës Python në vend që t'i bashkohet punës ekzistuese të optimizimit të CPython përfshijnë fokusin në kompilimin, integrimin e aftësive të programimit të sistemit dhe përdorimin e një arkitekture të brendshme thelbësisht të ndryshme që lejon kodin të ekzekutohet në GPU dhe të ndryshme përshpejtuesit harduerikë. Sidoqoftë, zhvilluesit e Mojo synojnë të mbeten të pajtueshëm me CPython sa më shumë që të jetë e mundur.

Mojo mund të përdoret si në modalitetin e interpretimit duke përdorur JIT, ashtu edhe për përpilim në skedarë të ekzekutueshëm (AOT, para kohe). Përpiluesi ka teknologji moderne të integruara për optimizimin automatik, memorien dhe përpilimin e shpërndarë. Tekstet burimore në gjuhën Mojo konvertohen në kodin e ndërmjetëm të nivelit të ulët MLIR (Përfaqësimi i ndërmjetëm me shumë nivele), i zhvilluar nga projekti LLVM dhe ofron aftësi shtesë për optimizimin e përpunimit të grafikut të rrjedhës së të dhënave. Përpiluesi ju lejon të përdorni backend të ndryshëm që mbështesin MLIR për të gjeneruar kodin e makinës.

Përdorimi i mekanizmave shtesë të harduerit për të shpejtuar llogaritjet bën të mundur arritjen e performancës që është më e lartë se aplikacionet C/C++ gjatë llogaritjeve intensive. Për shembull, gjatë testimit të një aplikacioni për gjenerimin e grupit Mandelbrot, një aplikacion i përpiluar në gjuhën Mojo kur u ekzekutua në renë AWS (r7iz.metal-16xl) doli të ishte 6 herë më i shpejtë se zbatimi në C++ (0.03 sek kundrejt 0.20 sek.), dhe gjithashtu 35 mijë herë më shpejt se një aplikacion Python kur përdoret standardi CPython 3.10.9 (0.03 sek. kundrejt 1027 sek.) dhe 1500 herë më shpejt kur përdoret PYPY (0.03 sek. kundrejt 46.1 sek.) .

Gjatë vlerësimit të performancës në fushën e zgjidhjes së problemeve të mësimit të makinerive, motori i konkluzionit modular i grupit AI, i shkruar në gjuhën Mojo, krahasuar me një zgjidhje të bazuar në bibliotekën TensorFlow, ishte 3 herë më i shpejtë kur përpunonte një model gjuhësor në një sistem me një procesor Intel, 6.4 herë më i shpejtë kur përpunon ekzekutimin e modelit të gjenerimit të rekomandimeve dhe 2.1 herë më shpejt kur punon me modele për përpunimin e informacionit vizual. Kur përdorni procesorët AMD, fitimet kur përdorni Mojo ishin 3.2, 5 dhe 2.2 herë, dhe kur përdorni procesorët ARM - përkatësisht 5.3, 7.5 dhe 1.7 herë. Zgjidhja e bazuar në PyTorch mbeti pas Mojo me 1.4, 1.1 dhe 1.5 herë në CPU-të Intel, 2.1, 1.2 dhe 1.5 herë në CPU-të AMD dhe 4, 4.3 dhe 1.3 herë në CPU-të ARM.

Krijuesi LLVM zhvillon një gjuhë të re programimi Mojo

Gjuha mbështet shkrimin statik dhe veçori të nivelit të ulët të sigurt për memorie që të kujtojnë Rust, të tilla si gjurmimi gjatë gjithë jetës së referencës dhe kontrolluesi i huamarrjes. Përveç lehtësive për punë të sigurt me tregues, gjuha ofron gjithashtu veçori për punë të nivelit të ulët, për shembull, akses të drejtpërdrejtë në memorie në modalitetin e pasigurt duke përdorur llojin Pointer, thirrjen e udhëzimeve individuale SIMD ose aksesin në shtesat e harduerit si TensorCores dhe AMX .

Krijuesi LLVM zhvillon një gjuhë të re programimi Mojo

Për të thjeshtuar ndarjen e kodit klasik dhe të optimizuar të Python për funksionet me përkufizime të qarta të tipit për të gjitha variablat, propozohet të përdoret një fjalë kyçe e veçantë "fn" në vend të "def". Në mënyrë të ngjashme për klasat, nëse ju duhet të paketoni në mënyrë statike të dhënat në memorie gjatë përpilimit (si në C), mund të përdorni llojin "struct" në vend të "class". Është gjithashtu e mundur që thjesht të importoni module në gjuhët C/C++, për shembull, për të importuar funksionin cos nga biblioteka e matematikës, mund të specifikoni "nga "math.h" import cos".

Burimi: opennet.ru

Shto një koment