1. Czym jest Mojo?
Mojo to nowoczesny język programowania zaprojektowany przez firmę Modular, którego celem jest połączenie prostoty Pythona z wydajnością języków systemowych, takich jak C++ czy Rust. Mojo powstał z myślą o programistach AI/ML, HPC (High-Performance Computing) i embedded, oferując pełną kontrolę nad wydajnością, jednocześnie zachowując czytelną składnię.
2. Dlaczego Mojo? Zalety języka
- ✅ Wydajność porównywalna z C++/Rust (dzięki kompilacji do MLIR → LLVM)
- ✅ Kompatybilność z Pythonem (można importować i używać kodu Python)
- ✅ Obsługa SIMD, kontrola alokacji pamięci i struktury danych na niskim poziomie
- ✅ Wsparcie dla typowania statycznego i dynamicznego
- ✅ Możliwość pisania kodu w stylu imperatywnym i funkcyjnym
- ✅ Narzędzie
mojo
pozwalające na szybki rozwój i testowanie
3. Środowisko uruchomieniowe i narzędzia
Instalacja (obecnie dostęp tylko przez waitlist / Mojo Playground)
- 🔗 playground.modular.com – oficjalne środowisko testowe online
- CLI:
mojo
(dostępne lokalnie po uzyskaniu dostępu)
Wersje języka
- Mojo nie jest jeszcze open-source
- Wersja alfa/beta dostępna przez Mojo SDK / Modular Playground
- Docelowo ma być dostępna lokalnie i jako część środowisk deweloperskich AI
4. Składnia i struktury języka
4.1 Zmienne i typy danych
mojoKopiujEdytujlet x: Int = 10
var y: Float = 3.14
let
– zmienna niemutowalna (jakconst
)var
– zmienna mutowalna- Typy:
Int
,Float
,Bool
,String
,Pointer
,List
,Struct
📌 Mojo jest językiem statycznie typowanym, ale potrafi też pracować dynamicznie jak Python (po from python import *
).
4.2 Funkcje
mojoKopiujEdytujfn add(a: Int, b: Int) -> Int:
return a + b
fn
– deklaracja funkcji- Typy parametrów i typ zwracany są obowiązkowe
- Obsługuje przeciążanie, funkcje generyczne i inline
4.3 Instrukcje warunkowe
mojoKopiujEdytujlet x = 5
if x > 0:
print("Liczba dodatnia")
else:
print("Liczba niedodatnia")
- Składnia przypomina Python, ale wymaga jawnego wcięcia (
:
)
4.4 Pętle
mojoKopiujEdytujfor i in range(0, 10):
print(i)
- Mojo obsługuje
range()
, jak Python, ale typy są statyczne. while
również dostępne:
mojoKopiujEdytujvar i = 0
while i < 5:
print(i)
i += 1
4.5 Struktury danych: Struct
mojoKopiujEdytujstruct Point:
var x: Int
var y: Int
fn move_by(self, dx: Int, dy: Int):
self.x += dx
self.y += dy
struct
– odpowiednik klasy bez dziedziczeniaself
– jawne odniesienie do instancji- Można definiować metody i modyfikować pola
4.6 Praca z pamięcią (low-level control)
mojoKopiujEdytujfn raw_pointer_example():
let p: Pointer[Int] = alloc(Int)
*p = 42
print(*p)
dealloc(p)
- Mojo daje dostęp do surowych wskaźników (
Pointer[T]
) alloc
idealloc
kontrolują pamięć- Umożliwia pisanie kodu systemowego i wysokowydajnych algorytmów
5. Mojo vs Python – podobieństwa i różnice
Cecha | Mojo | Python |
---|---|---|
Wydajność | Kompilowany (MLIR/LLVM) | Interpretowany |
Typowanie | Statyczne + dynamiczne | Dynamiczne |
Wskaźniki | Tak (Pointer[T] ) | Nie |
Dziedziczenie OOP | Brak klas/dziedziczenia | Tak |
Import Pythona | Tak (from python import * ) | – |
Zastosowanie | AI, HPC, embedded | Ogólnego przeznaczenia |
6. Zastosowania Mojo
- AI/ML – optymalizacja modeli, pisanie własnych jąder operacji (kernelów)
- High-performance computing – obliczenia naukowe, symulacje, optymalizacje
- Embedded systems – dostęp do wskaźników i pamięci
- CUDA/TPU/MLIR – integracja z nowoczesnymi narzędziami ML i akceleratorami
7. Przykładowe programy
Hello World
mojoKopiujEdytujfn main():
print("Witaj, Mojo!")
Suma liczb z listy
mojoKopiujEdytujfn sum_list(numbers: List[Int]) -> Int:
var total = 0
for n in numbers:
total += n
return total
Prosty algorytm sortowania
mojoKopiujEdytujfn bubble_sort(arr: List[Int]):
let n = arr.size
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j+1]:
let tmp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp
8. Podsumowanie
Mojo to innowacyjny język, który łączy czytelność Pythona z mocą i wydajnością języków niskopoziomowych. Dzięki wsparciu dla nowoczesnych technologii kompilacji (MLIR/LLVM), wskaźników, typowania oraz integracji z Pythonem, Mojo może zrewolucjonizować sposób, w jaki piszemy aplikacje AI i HPC.