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
mojopozwalają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. whileró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]) allocideallockontrolują 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.
