Creatorul LLVM dezvoltă un nou limbaj de programare Mojo

Chris Lattner, fondatorul și arhitectul principal al LLVM, precum și creatorul limbajului de programare Swift, și Tim Davis, fost director al proiectelor AI la Google, cum ar fi TensorFlow și JAX, au prezentat un nou limbaj de programare numit Mojo, care combină ușurința de utilizare pentru dezvoltările de cercetare și prototipuri rapide cu adecvarea pentru crearea produselor finale de înaltă performanță. Prima caracteristică este realizată prin utilizarea sintaxei familiare a limbajului Python, iar a doua prin posibilitatea de compilare în cod mașină, mecanismele de gestionare sigură a memoriei și utilizarea resurselor pentru accelerarea hardware-ului în calcule.

Proiectul se concentrează pe utilizarea în dezvoltările din domeniul învățării automate, dar se prezintă ca un limbaj de uz general, extinzând capabilitățile limbajului Python cu instrumente de programare de sistem, fiind potrivit pentru o gamă largă de sarcini. De exemplu, limbajul este aplicabil în domenii precum calculul de înaltă performanță, procesarea și transformarea datelor. O caracteristică interesantă a Mojo este posibilitatea de a specifica simbolul emoji „🔥” ca extensie pentru fișierele cu cod (de exemplu, „helloworld.🔥”), pe lângă extensia text „.mojo”.

În prezent, limbajul se află în stadiul de dezvoltare intensă și pentru testare este disponibil doar un interfață online. Se promite că vor fi publicate versiuni separate pentru rularea pe sisteme locale ulterior, după primirea feedback-ului cu privire la funcționarea mediului web interactiv. Codurile sursă ale compilatorului, JIT-ului și alte lucrări legate de proiect urmează să fie deschise după finalizarea proiectării arhitecturii interne (modelul de dezvoltare al prototipului de lucru închise amintește de stadiul inițial de dezvoltare al LLVM, Clang și Swift). Dat fiind că sintaxa Mojo se bazează pe limbajul Python, iar sistemul de tipuri este apropiat de C/C++, în viitor se plănuiește dezvoltarea de instrumente pentru a simplifica transferul proiectelor existente scrise în C/C++ și Python pe Mojo, precum și pentru dezvoltarea de proiecte hibride care combină coduri în Python și Mojo.

Proiectul este conceput pentru a atrage resursele hardware existente ale sistemului în calcularea sistemelor heterogene. De exemplu, pentru a rula aplicații în limbajul Mojo și a paraleliza calculele, pot fi utilizate GPU-uri, acceleratoare specializate pentru învățarea automată și instrucțiuni vectoriale pentru procesare (SIMD). Motivul dezvoltării unui sub-set separat al limbajului Python, în loc de a conecta pentru optimizarea CPython existent, este orientarea spre compilare, integrarea capacităților de programare de sistem și aplicarea unei arhitecturi interioare fundamental diferite, care permite executarea codului pe GPU-uri și diverse acceleratoare hardware. În acest context, dezvoltatorii Mojo intenționează să păstreze, în măsura posibilităților, compatibilitatea cu CPython.

Mojo poate fi utilizat atât în modul de interpretare cu JIT, cât și pentru compilarea în fișiere executabile (AOT, ahead-of-time). Compilatorul integrează tehnologii moderne de optimizare automată, caching și compilare distribuită. Codurile sursă în limbajul Mojo sunt transformate în cod intermediar de nivel scăzut MLIR (Multi-Level Intermediate Representation), dezvoltat de proiectul LLVM și care oferă oportunități suplimentare pentru optimizarea procesării grafului fluxului de date. Compilatorul permite utilizarea diferitelor backend-uri care suportă MLIR pentru generarea codului mașină.

Implicarea mecanismelor hardware suplimentare pentru accelerarea calculelor permite atingerea unei performanțe, în cazul calculilor intense, care depășește aplicațiile scrise în C/C++. De exemplu, în testarea unei aplicații pentru generarea unei mulțimi de Mandelbrot, aplicația compilată în limbajul Mojo, atunci când este rulată în cloud AWS (r7iz.metal-16xl), s-a dovedit a fi de 6 ori mai rapidă decât implementarea în C++ (0.03 sec. față de 0.20 sec.), precum și de 35.000 de ori mai rapidă decât aplicația în Python utilizând CPython standard 3.10.9 (0.03 sec. față de 1027 sec.) și de 1500 de ori mai rapidă utilizând PYPY (0.03 sec. față de 46.1 sec.).

At evaluarea performanței în domeniul rezolvării problemelor de învățare automată, stiva AI Modular Inference Engine, scrisă în limbajul Mojo, s-a dovedit a fi de 3 ori mai rapidă pe un sistem cu procesor Intel la procesarea modelului lingvistic, de 6.4 ori mai rapidă la implementarea modelului de generare a recomandărilor și de 2.1 ori mai rapidă în lucrul cu modelele de procesare a informațiilor vizuale. Utilizând procesoare AMD, avantajul adus de Mojo a fost de 3.2, 5 și 2.2 ori, iar în cazul procesoarelor ARM — 5.3, 7.5 și 1.7 ori, respectiv. Soluția bazată pe PyTorch a fost depășită de Mojo cu 1.4, 1.1 și 1.5 ori pe CPU Intel, cu 2.1, 1.2 și 1.5 ori pe CPU AMD și cu 4, 4.3 și 1.3 ori pe CPU ARM.

Creatorul LLVM dezvoltă un nou limbaj de programare Mojo

Limbajul suportă tipizarea statică și instrumente pentru lucrul sigur la nivel de memorie, asemănătoare cu facilitățile limbajului Rust, cum ar fi urmărirea duratei de viață a referințelor și verificarea împrumutului variabilelor (borrow checker). Pe lângă instrumentele pentru lucrul sigur cu pointere, limbajul oferă și oportunități pentru lucrul la un nivel inferior, de exemplu, acces direct la memorie în modul unsafe folosind tipul Pointer, apelarea unor instrucțiuni SIMD separate sau accesul la extensii hardware, cum ar fi TensorCores și AMX.

Creatorul LLVM dezvoltă un nou limbaj de programare Mojo

Pentru a simplifica separarea codului Python clasic și optimizat pentru funcții cu definirea explicită a tipurilor pentru toate variabilele, s-a propus utilizarea unei cuvânt cheie separate „fn” în loc de „def”. În mod similar, pentru clase, atunci când este necesară ambalarea statică a datelor în memorie în timpul compilării (ca în C), se poate folosi tipul „struct” în loc de „class”. De asemenea, este posibil un import simplu de module în limbajele C/C++, de exemplu, pentru a importa funcția cos din biblioteca math, se poate specifica „from «math.h» import cos”.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster