Neuroróżnorodność w miejscu pracy
2.08.20234 min
Bulldogjob

Bulldogjob

Mojo - język programowania prosty jak Python i wydajny jak C++

Poznaj język programowania Mojo, który chce namieszać w obszarze AI i Machine Learning.

Mojo - język programowania prosty jak Python i wydajny jak C++

Mojo to świeżo zaprezentowany język programowania, który łączy prostotę Pythona z szybkością i bezpieczeństwem pamięci Rusta. Zarówno Python i Rust są tu wspomniane nieprzypadkowo. Nowy język jest interoperacyjny z Pythonem, tak jak Kotlin z Javą, a z Rusta został zapożyczony model własności pamięci. Mojo jest przeznaczony głównie do pracy z danymi i uczeniem maszynowym, będąc wydajnym uzupełnieniem dla Pythona. Istnieją również plany stopniowego udostępnienia języka na zasadach open-source.

Charakterystyka Mojo

Twórca Mojo, Chris Lattner, odpowiedzialny był w przeszłości za LLVM czy język programowania Swift. Teraz chce zrewolucjonizować AI, do czego, jego zdaniem, jest potrzebny lepszy język programowania, taki który pozwala na efektywne wykorzystanie sprzętu. Takie właśnie jest Mojo, bo zapewnia znaczący wzrost szybkości programów, osiągając nawet 35 000-krotnie większą wydajność niż Python (w porównaniu z PyPy 22-krotnie szybszym i Scalar C++ 5000-krotnie szybszym od Pythona). Osiąga to m.in. dzięki zastosowaniu Multi-Level Intermediate Representation (MLIR, który jest jednym z poprzednich projektów Chirsa), pozwalając na bezproblemowe wprowadzanie abstrakcji bez narzutu sprzętowego. Język jest kompilowany na kod maszynowy przy użyciu narzędzi LLVM, w przeciwieństwie do interpretowanego Pythona.

Czego jeszcze nie było, a jest w Mojo

Cechy Mojo można podzielić na dwie grupy. Po pierwsze, znajdują się w nim całkiem nowe elementy, które nie występują w Pythonie.

Po drugie, istniejące cechy Pythona, które zostały zmienione by ograniczyć dynamiczność w czasie wykonania. Mojo umożliwia używanie słów kluczowych takich jak let i var do deklarowania zmiennych, określając, czy są one niemutowalne czy mutowalne. Ograniczenia te są narzucane podczas kompilacji.

Dodatkowo, Mojo wprowadza własne słowo kluczowe struct, które pozwala definiować typy zoptymalizowane pod kątem prędkości działania na maszynach natywnych, podobnie jak w przypadku odpowiedników w C/C++ i Rust. 

Innym charakterystycznym słowem kluczowym w Mojo jest fn, służące do definiowania funkcji. Funkcje Mojo domyślnie przyjmują niemutowalne argumenty i wymagają jawnego określenia typów, jak również deklaracji zmiennych lokalnych. W takich funkcjach można też ustalać własność danych poprzez słowa kluczowe takie jak borrowed, owned czy inout, które są inspirowane Rustem.

Nowości składniowych jest więcej i warto się z nimi zapoznać w udostępnionej dokumentacji.

Zalety Mojo w porównaniu z innymi językami

W porównaniu z innymi językami programowania wykorzystywanymi w dziedzinie uczenia maszynowego, takimi jak Python, Mojo oferuje kilka znaczących zalet. Po pierwsze, jest dedykowany aplikacjom AI i uczeniu maszynowemu, przez co jest optymalizowany dla tego zastosowania.

Język ten również doskonale integruje się z popularnymi frameworkami i bibliotekami AI, takimi jak NumPy i PyTorch. W końcu jest interoperacyjny z Pythonem, więc już na starcie ma do dyspozycji największy ekosystem AI, jaki zbudowano.

Mojo oferuje również wydajną obsługę danych i możliwości ich manipulacji. Jego skalowalność i obsługa obliczeń równoległych pozwala na efektywne korzystanie z paradygmatu SIMD (pojedyncza instrukcja, wiele danych), co jest szczególnie przydatne w algorytmach algebry liniowej, często używanych w zadaniach związanych z uczeniem maszynowym.

Modular Playground

Mojo można dość łatwo wypróbować poprzez Modular Playground - środowisko Jupyter Notebook, które wspiera Mojo. Jedyny problem jest taki, że to wciąż początek Mojo i dostępu nie dostaje się od razu. Niestety wciąż nie posiada dostępnego środowiska uruchomieniowego do pobrania. Natomiast w Modular Playground znajdują się przykładowe notatniki z dokładnymi instrukcjami.

Skąd słowo Modular? Tak nazywa się firma, której współzałożycielem jest Chris Lattner. Firma zajmuje się dostarczaniem infrastruktury do AI. To właśnie tam opracowywane jest Mojo. W tym momencie język ma zamknięte źródło, ale w najbliższych miesiącach powinny pojawić się plan otworzenia źródeł.

Reakcje społeczności i wizja twórcy

Społeczność jest ciekawa postępów w rozwoju języka. Pojawiają się pozytywne opinie. Jeremy Howard podzielił się swoją perspektywą na Twitterze:

"Aplikacja Mojo może zostać skompilowana do małego, samodzielnego binarnego pliku, który szybko się uruchamia. To zmienia zasady gry! Pomyśl o rzeczach, które mogłbyś zrobić, gdybyś mógł szybko i łatwo tworzyć małe, szybkie narzędzia i dystrybuować je w jednym pliku."

Chris Lattner, w podcaście Lexa Friedmana, powiedział, że ideą stojącą za stworzeniem Mojo jest uczynienie uczenia maszynowego i jego infrastruktury bardziej dostępnymi i zrozumiałymi dla osób niebędących ekspertami w dziedzinie. To doprowadziło do powstania języka programowania z przyjaznym użytkownikowi składnią, umożliwiającego badaczom i osobom nieznającym zaawansowanych technologii, takich jak GPS, efektywne wykorzystanie uczenia maszynowego.

Czy to przyszłość rozwoju sztucznej inteligencji?

Pytanie, czy Mojo stanie się przyszłością rozwoju sztucznej inteligencji, pozostaje otwarte. Jego szybkość może przyciągnąć uwagę firm, które głównie zajmują się AI, bo po prostu użycie Mojo znacznie obniży koszty utrzymania infrastruktury. Jeżeli chodzi o społeczność, to wszystko jest jeszcze otwarte, jednak są spore szanse, że Mojo może odnieść sukces podobny do Kotlina w świecie Javy.

Warto zauważyć, że Mojo nawet jeżeli będzie wartościową alternatywą dla innych języków programowania w dziedzinie uczenia maszynowego, to liderem jeszccze długo pozostanie Python.

Ostatecznie przyszłość Mojo zależy od tego, jak dobrze sprosta wyzwaniom i czy potrafi zdobyć zaufanie programistów i badaczy na dłuższą metę. Niezależnie od tego, pomysł szybszego i bezpieczniejszego Pythona wydaje się bardzo ciekawy. Czekamy na więcej!


Przeczytaj też:

<p>Loading...</p>