Twórcy języka programowania Mojo zaczęli przekształcać prace projektu w otwarte oprogramowanie. Pierwszym krokiem było udostępnienie kodu standardowej biblioteki, który teraz jest dostępny na licencji Apache 2.0 z wyjątkami od projektu LLVM, pozwalającymi na mieszanie z kodem na licencji GPLv2. Oprócz publikacji kodu, proces rozwoju przesunął się w kierunku większej otwartości i możliwości przekazywania zewnętrznych zmian poprzez wysyłanie pull requestów na GitHubie. Planuje się otwarcie kodu źródłowego kompilatora po zakończeniu projektowania wewnętrznej architektury.
W repozytorium utworzono dwie gałęzie z kodem standardowej biblioteki Mojo: gałąź main, synchronizowana z ostatnią stabilną wersją Mojo, oraz gałąź nightly, odzwierciedlająca bieżący proces rozwoju i synchronizowana z nocnymi kompilacjami Mojo. Gałąź nightly jest proponowana dla uczestników, którzy chcą dołączyć do rozwoju i podzielić się swoimi zmianami. Część modułów biblioteki nadal nie jest otwarta, ale po pewnym czasie planuje się przenieść pozostały zamknięty kod do otwartego repozytorium. W głównej mierze zamknięty pozostaje kod szybko rozwijających się modułów, wymagających dodatkowej stabilizacji, modułów, dla których planowany jest refaktoring, oraz modułów, które wymagają dodatkowego przeglądu i przeróbki z powodu związku z projektami proprietarnymi.
Równocześnie została opublikowana wersja narzędzi Mojo SDK 24.2, umożliwiająca kompilowanie projektów na lokalnym systemie, oraz wydanie silnika MAX Engine 24.2, oferującego platformę do prac w zakresie uczenia maszynowego. W skład Mojo SDK wchodzą komponenty niezbędne do rozwijania aplikacji w języku Mojo, w tym kompilator, runtime, interaktywna powłoka REPL do budowy i uruchamiania programów, debugger, dodatek do edytora kodu Visual Studio Code (VS Code) z obsługą autouzupełniania, formatowaniem kodu i podświetlaniem składni, moduł do integracji z Jupyterem do budowy i uruchamiania notatników Mojo. MAX Engine uzupełnia SDK narzędziami do rozwijania i debugowania aplikacji wykorzystujących modele uczenia maszynowego w różnych formatach (TensorFlow, PyTorch, ONNX itp.). Kompilacje Mojo SDK i MAX Engine przygotowane są dla platformy Linux i macOS.
Wśród najbardziej zauważalnych zmian w Mojo 24.2:
- Struktury i inne nominalne typy mogą teraz niejawnie spełniać protokoły. Na przykład, każda struktura, dla której zaimplementowano metodę __str__(), niejawnie spełnia protokół Stringable i może być używana z funkcją str().
- W narzędziach do zapewnienia zgodności z kodem w Pythonie dodano wsparcie dla przekazywania argumentów na podstawie słów kluczowych do funkcji Python. Na przykład, „plt.plot((5, 10), (10, 15), color=„red”)”.
- Dodano wsparcie dla przekazywania do funkcji zmiennej liczby argumentów, definiowanych przez przypisanie słów kluczowych. Na przykład, „print_nicely(a=7, y=8)”.
- Typ DynamicVector został przemianowany na List i przeniesiony do modułu collections.list. Dodano możliwość tworzenia listy na podstawie dowolnej liczby wartości, na przykład „var numbers = List[Int](1, 2, 3)”.
- Do funkcji print() dodano nazwane parametry sep i end, za pomocą których można ustawić wartości separatora i końcowego wyjścia. Na przykład, wykonanie print(„Hello”, „Mojo”, sep=”, “, end=„!!!\n”) spowoduje wydruk „prints Hello, Mojo!!!”.
Projekt Mojo rozwija się pod kierownictwem Chrisa Lattnera, założyciela i głównego architekta projektu LLVM oraz twórcy języka programowania Swift. Składnia Mojo opiera się na języku Python, a system typów jest zbliżony do C/C++. Projekt przedstawiany jest jako język ogólnego przeznaczenia, rozszerzający możliwości języka Python w dziedzinie programowania systemowego, odpowiedni do szerokiego zakresu zadań i łączący prostotę użycia w badaniach i szybkim tworzeniu prototypów z użytecznością do tworzenia wysoko wydajnych produktów końcowych.
Prostota jest osiągana dzięki użyciu znajomej składni języka Python, a rozwój gotowych produktów wspierają możliwość kompilacji do kodu maszynowego, mechanizmy bezpiecznej obsługi pamięci oraz wykorzystanie środków do przyspieszania obliczeń sprzętowych. W celu uzyskania wysokiej wydajności wspierane jest równoległe przetwarzanie obliczeń z wykorzystaniem wszystkich dostępnych w systemie zasobów sprzętowych heterogenicznych systemów, takich jak GPU, wyspecjalizowane akceleratory do uczenia maszynowego i instrukcje wektorowe procesorów (SIMD). W przypadku intensywnych obliczeń równoległe przetwarzanie i zaangażowanie wszystkich zasobów obliczeniowych prowadzi do wydajności przewyższającej aplikacje napisane w C/C++.
Język wspiera statyczne typowanie oraz narzędzia do bezpiecznej niskopoziomowej pracy z pamięcią, przypominające możliwości języka Rust, takie jak śledzenie czasu życia referencji oraz sprawdzanie pożyczania zmiennych (borrow checker). Ponadto w języku dostępne są możliwości niskopoziomowej pracy, na przykład bezpośredni dostęp do pamięci w trybie unsafe z wykorzystaniem typu Pointer, wywołanie poszczególnych instrukcji SIMD lub dostęp do rozszerzeń sprzętowych, takich jak TensorCores i AMX.
Mojo może być używane zarówno w trybie interpretacji z wykorzystaniem JIT, jak i do kompilacji do plików wykonywalnych (AOT, ahead-of-time). Kompilator zawiera nowoczesne technologie automatycznej optymalizacji, cachowania i rozproszonej kompilacji. Kod źródłowy w języku Mojo jest przekształcany w niskopoziomowy kod pośredni MLIR (Multi-Level Intermediate Representation), rozwijany w projekcie LLVM. Kompilator pozwala na zastosowanie różnych backendów wspierających MLIR do generacji kodu maszynowego.
Źródło: opennet.ru
