Czy Mojo jest najlepszym językiem do rozwoju sztucznej inteligencji?

W przypadku uczenia maszynowego i sztucznej inteligencji Python zawsze wydawał się dominującym językiem programowania, z potężnymi bibliotekami, takimi jak NumPy, TensorFlow i PyTorch. Ale szybkie sprawdzenie na stronach GitHub tych bibliotek pokaże, że większość ich kodu źródłowego jest napisana w C i C++.

Dzieje się tak, ponieważ Python jest zbyt wolny dla sztucznej inteligencji. Mojo to nowy język programowania, który próbuje połączyć szybkość C/C++ z elegancją Pythona.

Mojo: Przegląd

Mojo to nowy język programowania, który jest składniowo podobny do Pythona, ale ma szybkość C. Jest przeznaczony przede wszystkim do sztucznej inteligencji i rozwoju systemów, z których oba są dziedzinami wymagającymi oprogramowania o wysokiej wydajności.

Wykorzystuje paradygmat SIMD — pojedyncza instrukcja, wiele danych, aby skorzystać z równoległości. Jest również kompilowany na czas i jest wydajny pod względem pamięci.

Mojo nie jest jednak językiem zupełnie nowym; jest nadzbiorem Pythona. Oznacza to, że jest to Python plus dodatkowe funkcje. Podobnie jak TypeScript rozszerza JavaScript. To dobrze, ponieważ jeśli znasz już Pythona, nie powinno być zbyt trudno wybrać Mojo.

Mojo jest rozwijane przez Modular, firmę założoną przez Chrisa Lattnera – twórcę LLVM i języka programowania Swift.

Podsumowując, Mojo to nowy język programowania zaprojektowany tak, aby był składniowo podobny do Pythona, ale tak szybki jak C/C++. Ma być używany w rozwoju sztucznej inteligencji i programowaniu systemów. Chociaż projekt nie jest ukończony, jest niezwykle obiecujący, aw następnej sekcji omówimy, dlaczego.

Cechy Mojo w stosunku do innych języków programowania

Mojo stało się niezwykle popularne, mimo że nie jest jeszcze publicznie dostępne. Dzieje się tak dlatego, że ma kilka znaczących zalet w porównaniu z innymi językami programowania podczas wykonywania uczenia maszynowego i budowania oprogramowania na poziomie systemu. W tej sekcji omówimy te zalety.

# 1. Natywna obsługa zadań AI i uczenia maszynowego

Mojo jest przeznaczony do tworzenia aplikacji sztucznej inteligencji. W rezultacie zawiera funkcje i moduły w standardowej bibliotece do budowy sieci neuronowych, wykonywania wizji komputerowej i przygotowywania danych.

Większość języków ogólnego przeznaczenia, takich jak Python, wymagałaby dodatkowych bibliotek, aby to osiągnąć, ale Mojo obsługuje to od razu po wyjęciu z pudełka.

#2. Uproszczona składnia i abstrakcje wysokiego poziomu

Aby napisać szybkie i wydajne oprogramowanie, normalnie musielibyśmy używać języków takich jak C, C++ i Rust. Chociaż te języki są szybkie, nauka i praca z nimi są trudniejsze. Dzieje się tak, ponieważ zmuszają cię do pracy na niskim poziomie, dzięki czemu masz większą kontrolę.

Jednak Mojo nadal zapewnia abstrakcje wyższego poziomu, takie jak Python i prostą składnię. Ułatwia to pracę z innymi językami o porównywalnej wydajności.

#3. Integracja z popularnymi frameworkami i bibliotekami AI

Jak wspomniano wcześniej, Mojo nie jest całkowicie nowym językiem – jest nadzbiorem Pythona. W rezultacie dobrze integruje się z istniejącymi bibliotekami, takimi jak NumPy i PyTorch. Oznacza to, że domyślnie Mojo ma ekosystem tak duży jak Python.

#4. Wydajna obsługa danych i możliwości manipulacji

Mojo jest przeznaczony do wydajnego równoległego manipulowania wieloma wartościami. Jest to najbardziej przydatne podczas wykonywania algebry liniowej, na której tak bardzo polega uczenie maszynowe. Mojo jest również kompilowane na czas, więc kod bajtowy jest zoptymalizowany pod kątem szybkości. Dzięki temu praca z danymi i uczeniem maszynowym w Mojo jest wydajna.

#5. Skalowalność i obsługa obliczeń równoległych

Jak wspomniano wcześniej, Mojo jest zbudowane w celu obsługi paradygmatu pojedynczej instrukcji – wielu danych przetwarzania równoległego. Jest to wbudowane w Mojo i sprawia, że ​​jest szybsze po wyjęciu z pudełka. Przewyższa również biblioteki Pythona, takie jak NumPy.

Kluczowe elementy Mojo

W tej sekcji omówimy, jak pisać programy w Mojo. Ponieważ Mojo ma być nadzbiorem Pythona, podobnie jak TypeScript jest nadzbiorem JavaScript, cały poprawny kod Pythona jest poprawnym kodem Mojo, ale nie każdy kod Mojo jest poprawnym kodem Pythona.

Prace nad Mojo wciąż trwają, a niektóre funkcje języka Python nie są jeszcze obsługiwane — na przykład klasy. Ponadto kompilator nie jest jeszcze dostępny, ale możesz używać Mojo w notatniku na placu zabaw. Jednak najpierw będziesz potrzebować konta, które możesz utworzyć na ich stronie internetowej.

W tej chwili trudno jest przedstawić kompleksowy samouczek dotyczący języka, ponieważ niektóre funkcje nie zostały jeszcze dodane, a nie wszystkie są obecnie obsługiwane. Zamiast tego omówimy kilka kluczowych dodatków, które Mojo dodaje do tego, co już ma Python.

Składnia i gramatyka

Ponieważ Mojo jest nadzbiorem Pythona, ich składnia jest identyczna. Podobnie jak Python, program składa się z instrukcji. Instrukcje te można pogrupować w bloki w ramach funkcji, pętli lub warunków. Instrukcje wewnątrz bloku są wcięte. Oto przykładowy program napisany w Mojo:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Jest to całkowicie identyczne z programem w Pythonie. Jednak Mojo oferuje dodatkowe funkcje, które zobaczysz w kolejnych sekcjach.

Deklaracje zmiennych

Dzięki Mojo masz dwa dodatkowe sposoby deklarowania zmiennych. Możesz użyć słowa kluczowego let lub var. Słowo kluczowe let deklaruje niezmienną zmienną. Po zainicjowaniu nie można ponownie przypisać jego wartości do czegoś innego. Z drugiej strony zmienne zadeklarowane przy użyciu var mogą zostać ponownie przypisane, ponieważ są zmienne.

Główną zaletą zmiennych zadeklarowanych za pomocą let lub var jest to, że obsługują specyfikatory typów. Poniższy przykład ilustruje sposób deklarowania zmiennych w Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Struktury

Oprócz innego sposobu deklarowania zmiennych, Mojo obsługuje struktury. Prostym sposobem postrzegania struktur jest to, że przypominają one klasy, z wyjątkiem tego, że są bardziej sztywne. W przeciwieństwie do klas, nie można dodawać/usuwać ani modyfikować metod podczas działania, a wszystkie składowe muszą być zadeklarowane przy użyciu słów kluczowych var lub let. Ta sztywniejsza struktura umożliwia Mojo efektywniejsze zarządzanie pamięcią i wydajnością. Oto przykładowa struktura:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Funkcje

Z powyższej struktury mogłeś zauważyć, że zadeklarowaliśmy metodę __init__ przy użyciu słowa kluczowego fn zamiast def. Dzieje się tak dlatego, że w Mojo możesz deklarować funkcje za pomocą fn i def. Funkcja zadeklarowana przy użyciu fn jest bardziej restrykcyjna niż jej odpowiednik def.

W szczególności funkcja zadeklarowana przy użyciu fn ma domyślnie niezmienne argumenty. Ponadto wymagane jest określenie typu danych argumentów oraz wartości zwracanej przez funkcję. Wszystkie zmienne lokalne muszą być zadeklarowane przed użyciem.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Jeśli funkcja zgłasza wyjątek, musi to być jawnie określone, gdy funkcja jest deklarowana za pomocą słowa kluczowego raises. Ponadto Mojo nie używa klasy Exception, tak jak robi to Python, zamiast tego używa klasy Error.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Przeciążenie

Mojo obsługuje również przeciążanie operatorów w oparciu o różne typy danych. Potwierdza to zorientowaną obiektowo zasadę polimorfizmu.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Jak Mojo jest wykorzystywane w rozwoju sztucznej inteligencji

Mojo zawiera biblioteki do budowania modeli uczenia maszynowego. Należą do nich biblioteki do budowy sieci neuronowych. Ponadto możesz także wykonywać zadania, takie jak przetwarzanie języka naturalnego i widzenie komputerowe.

Chociaż sam język nie został jeszcze ukończony, a jego ekosystem praktycznie nie istnieje, nadal możemy spodziewać się, że Mojo wniesie wiele funkcji do wykonywania zadań, takich jak przetwarzanie danych, tworzenie modeli, optymalizacja, zarządzanie modelami i monitorowanie.

Czy Mojo jest przyszłością rozwoju sztucznej inteligencji

Trudno przewidzieć, w jaki sposób technologia będzie ewoluowała i zostanie przyjęta. Większość przewidywań jest błędna, ale to nie znaczy, że nie możemy próbować. Aby przewidzieć, czy Mojo prawdopodobnie zastąpi Pythona, rozważmy zalety i wady/ograniczenia Mojo:

Korzyści

  • Jest bardzo szybki i zbudowany tak, aby wykorzystać równoległość bez wykonywania wielu czynności, co jest niezbędne w przypadku uczenia maszynowego, ponieważ modele szkoleniowe mogą zająć dużo czasu.
  • Jest to nadzbiór Pythona, dlatego jest łatwiejszy do nauczenia i ma łagodniejszą krzywą uczenia się. Zmniejsza to tarcie o adopcję.
  • Zmniejsza to ryzyko wystąpienia błędów w produkcji, ponieważ podczas kompilacji wychwytywane są takie błędy, jak błędne nazwy zmiennych lub niezgodności typów. To czyni go preferowanym.

Wady

  • Obecnie jest niekompletny. Ale oczywiście zespół Modular pracuje nad wydaniem języka i jego tłumacza.
  • Chociaż upraszcza to pracę producentów frameworków, może nie przynosić większych korzyści konsumentom frameworków, ponieważ już korzystają oni z frameworków uczenia maszynowego w Pythonie.
  • Nie ma jeszcze dużego ekosystemu narzędzi i zasobów edukacyjnych. Chociaż możesz używać bibliotek Pythona w Mojo, nadal możesz używać bibliotek Pythona w Pythonie. Aby Mojo miało jakąkolwiek przewagę nad Pythonem, potrzebuje bibliotek o szybkości Mojo.

Ostatnie słowa

Jeśli obecny szum jest czymś, przez co można przejść, Mojo prawdopodobnie stanie się popularnym językiem sztucznej inteligencji. Myślę, że sama jego szybkość wystarczy, aby zachęcić ludzi do zmiany. Plusem jest jego prostota. Ale podobnie jak TypeScript nie zastąpił całkowicie JavaScript, jest prawdopodobne, że Mojo nie zastąpi całkowicie Pythona.

Mojo to zdecydowanie język, który warto mieć na uwadze, gdy w końcu dojrzeje.

Następnie sprawdź typ a interfejs w TypeScript.