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.).
При оценке производительности в области решения задач машинного обучения, AI-стек Modular Inference Engine, написанный на языке Mojo, по сравнению с решением на базе библиотеки TensorFlow оказался на системе с процессором Intel в 3 раза быстрее при обработке языковой модели, в 6.4 раза быстрее при выполнении модели формирования рекомендаций и в 2.1 раза быстрее при работе с моделями для обработки визуальной информации. При использовании процессоров AMD выигрыш при использовании Mojo составил 3.2, 5 и 2.2 раза, а при использовании процессоров ARM — 5.3, 7.5 и 1.7 раз, соответственно. Решение на базе PyTorch отстало от Mojo в 1.4, 1.1 и 1.5 раз на CPU Intel, в 2.1, 1.2 и 1.5 раз на CPU AMD и в 4, 4.3 и 1.3 раза на CPU ARM.

Язык поддерживает статическую типизацию и средства для безопасной низкоуровневой работы с памятью, напоминающие возможности языка Rust, такие как отслеживание времени жизни ссылок и проверка заимствования переменных (borrow checker). Помимо средств для безопасной работы с указателями в языке доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD-инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX.

Для упрощения разделения классического и оптимизированного Python-кода для функций с явным определением типов для всех переменных предложено использовать отдельное ключевое слово «fn» вместо «def». Аналогично для классов, при необходимости статической упаковки данных в памяти во время компиляции (как в Си) вместо «class» можно использовать тип «struct». Также возможен простой импорт модулей на языках C/C++, например, для импорта функции cos из библиотеки math можно указать «from «math.h» import cos».
Burimi: opennet.ru
