Er Mojo det beste språket for AI-utvikling?

For maskinlæring og kunstig intelligens har Python alltid sett ut til å være det dominerende programmeringsspråket, med kraftige biblioteker som NumPy, TensorFlow og PyTorch. Men en rask sjekk på disse bibliotekenes GitHub-sider vil vise deg at mye av kildekoden deres er skrevet i C og C++.

Dette er fordi Python er for treg for AI. Mojo er et nytt programmeringsspråk som prøver å kombinere hastigheten til C/C++ med elegansen til Python.

Mojo: En oversikt

Mojo er et nytt programmeringsspråk som syntaktisk ligner Python, men som har hastigheten til C. Det er først og fremst ment for kunstig intelligens og systemutvikling, som begge er felt som krever høyytelses programvare.

Den bruker SIMD – Single Instruction, Multiple Data-paradigmet for å dra nytte av parallellitet. Den er også just-in-time kompilert og er minneeffektiv.

Mojo er imidlertid ikke et helt nytt språk; det er et supersett av Python. Dette betyr at det er Python pluss tilleggsfunksjoner. I likhet med hvordan TypeScript utvider JavaScript. Dette er bra fordi hvis du allerede kjenner Python, burde det ikke være for vanskelig å plukke opp Mojo.

Mojo er utviklet av Modular, et selskap grunnlagt av Chris Lattner – skaperen av LLVM og programmeringsspråket Swift.

Avslutningsvis er Mojo et nytt programmeringsspråk designet for å være syntaktisk lik Python, men like raskt som C/C++. Det er ment å brukes i AI-utvikling og systemprogrammering. Selv om prosjektet ikke er fullført, er det utrolig lovende, og i neste avsnitt vil vi diskutere hvorfor.

Funksjoner i Mojo over andre programmeringsspråk

Mojo har vokst seg utrolig populær selv om den ikke er offentlig tilgjengelig ennå. Dette er fordi det har flere betydelige fordeler i forhold til andre programmeringsspråk når du utfører maskinlæring og bygger programvare på systemnivå. I denne delen vil vi diskutere disse fordelene.

#1. Innebygd støtte for AI og maskinlæringsoppgaver

Mojo er ment for å utvikle kunstig intelligens-applikasjoner. Som et resultat kommer den med funksjoner og moduler i standardbiblioteket for å bygge nevrale nettverk, utføre datasyn og forberede data.

  Hvordan sette opp en NFS-andel i Webmin på Ubuntu Server

De fleste generelle språk som Python vil kreve flere biblioteker for å gjøre dette, men Mojo støtter det rett ut av boksen.

#2. Forenklet syntaks og høynivåabstraksjoner

For å skrive rask og effektiv programvare må vi normalt bruke språk som C, C++ og Rust. Selv om disse språkene er raske, er de mer utfordrende å lære og jobbe med. Dette er fordi de tvinger deg til å jobbe på et lavt nivå slik at du har mer kontroll.

Imidlertid gir Mojo fortsatt abstraksjoner på høyere nivå som Python og enkel syntaks. Dette gjør det lettere å jobbe med enn andre språk som kan sammenlignes i ytelse.

#3. Integrasjon med populære AI-rammer og biblioteker

Som nevnt tidligere, er ikke Mojo et helt nytt språk – det er et supersett av Python. Som et resultat integreres det godt med eksisterende biblioteker som NumPy og PyTorch. Dette betyr at Mojo som standard har et økosystem like stort som Pythons.

#4. Effektiv datahåndtering og manipulasjonsevne

Mojo er designet for å manipulere flere verdier effektivt parallelt. Dette er mest nyttig når du utfører lineær algebra, som maskinlæring er så avhengig av. Mojo er også just-in-time kompilert, så bytekoden er optimalisert for hastighet. Dette gjør arbeidet med data og maskinlæring effektivt i Mojo.

#5. Skalerbarhet og støtte for parallell databehandling

Som nevnt tidligere, er Mojo bygget for å støtte Single Instruction – Multiple Data-paradigmet for parallell databehandling. Denne kommer innebygd i Mojo og gjør den raskere ut av esken. Det utkonkurrerer også Python-biblioteker som NumPy.

Nøkkelelementer i Mojo

I denne delen vil vi diskutere hvordan du skriver programmer i Mojo. Fordi Mojo er ment å være et supersett av Python, som hvordan TypeScript er et supersett av JavaScript, er all gyldig Python-kode gyldig Mojo-kode, men ikke all Mojo-kode er gyldig Python-kode.

Mojo pågår fortsatt, og noen Python-språkfunksjoner støttes ikke ennå – for eksempel klasser. I tillegg er en kompilator ikke tilgjengelig ennå, men du kan bruke Mojo i en lekeplassnotisbok. Du trenger imidlertid en konto først, som du kan opprette på nettsiden deres.

For øyeblikket er det vanskelig å gi en omfattende opplæring om språket, da noen funksjoner ennå ikke er lagt til, og ikke alle ting støttes for øyeblikket. I stedet vil vi diskutere noen viktige tillegg som Mojo legger på toppen av det Python allerede har.

  Bygg din første Jamstack-app med Hugo og Netlify

Syntaks og grammatikk

Fordi Mojo er et supersett av Python, er syntaksene deres identiske. Som Python består et program av utsagn. Disse setningene kan grupperes i blokker under funksjoner, løkker eller betingelser. Utsagn inne i en blokk er rykket inn. Her er et eksempelprogram skrevet i Mojo:

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

odd_or_even()

Dette er helt identisk med et Python-program. Mojo tilbyr imidlertid tilleggsfunksjoner som du vil se i avsnittene som følger.

Variable erklæringer

Med Mojo har du ytterligere to måter å deklarere variabler på. Du kan bruke søkeordet let eller var. Let nøkkelordet erklærer en uforanderlig variabel. Når den er initialisert, kan du ikke overføre verdien til noe annet. På den annen side kan variabler deklarert ved hjelp av var tilordnes på nytt ettersom de kan endres.

Den største fordelen med variabler deklarert ved bruk av let eller var er at de støtter typespesifikasjoner. Følgende eksempel illustrerer hvordan variabler deklareres i 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)

Strukturer

I tillegg, til en annen måte å deklarere variabler på, støtter Mojo strukturer. En enkel måte å se strukturer på er at de er som klasser bortsett fra mer rigide. I motsetning til klasser kan du ikke legge til/fjerne eller endre metoder mens du kjører, og alle medlemmer må deklareres ved å bruke var or let-nøkkelordene. Denne mer stive strukturen gjør at Mojo kan administrere minne og ytelse mer effektivt. Her er et eksempel på en struktur:

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)

Funksjoner

Fra strukturen ovenfor har du kanskje lagt merke til at vi erklærte __init__-metoden ved å bruke nøkkelordet fn i stedet for def. Dette er fordi du i Mojo kan deklarere funksjoner ved å bruke fn og def. En funksjon som er deklarert ved hjelp av fn er strengere sammenlignet med dens def-motpart.

Spesifikt har en funksjon deklarert ved hjelp av fn sine argumenter uforanderlige som standard. I tillegg må du spesifisere datatypen for argumenter og funksjonens returverdi. Alle lokale variabler må deklareres før bruk.

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

say_hello("John")

Hvis funksjonen gir et unntak, må det angis eksplisitt når funksjonen er deklarert ved hjelp av nøkkelordet raises. I tillegg bruker ikke Mojo Exception-klassen slik Python gjør, i stedet bruker den Error-klassen.

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

Overbelastning

Mojo støtter også overbelastningsoperatører basert på forskjellige datatyper. Dette støtter det objektorienterte prinsippet for polymorfisme.

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)

Hvordan Mojo brukes i AI-utvikling

Mojo kommer med biblioteker for å bygge maskinlæringsmodeller. Disse inkluderer biblioteker for å bygge nevrale nettverk. I tillegg kan du også utføre oppgaver som Natural Language Processing og Computer Vision.

  Slik installerer du Gnome Shell-utvidelser på den enkle måten med Extension Manager

Selv om språket i seg selv ennå ikke er fullført, og dets økosystem er praktisk talt ikke-eksisterende, kan vi fortsatt forvente at Mojo vil bringe mange funksjoner for å utføre oppgaver som databehandling, modelloppretting, optimalisering, modelladministrasjon og overvåking.

Er Mojo fremtiden for AI-utvikling

Det er vanskelig å forutsi hvordan teknologien sannsynligvis vil utvikle seg og bli tatt i bruk. De fleste spådommer er feil, men det betyr ikke at vi ikke kan prøve. For å forutsi om Mojo sannsynligvis vil erstatte Python, la oss vurdere Mojos fordeler og ulemper/begrensninger:

fordeler

  • Den er veldig rask og bygget for å dra nytte av parallellitet uten å gjøre mye, noe som er avgjørende for maskinlæring da treningsmodeller kan ta mye tid.
  • Det er et supersett av Python, derfor lettere å lære og har en mildere læringskurve. Dette reduserer friksjonen for adopsjon.
  • Det reduserer sjansene for å få feil i produksjonen ettersom feil som feilskrivede variabelnavn eller typefeil fanges opp under kompileringstiden. Dette gjør det å foretrekke.

Ulemper

  • Den er foreløpig ufullstendig. Men selvfølgelig jobber teamet hos Modular med å gi ut språket og oversetteren.
  • Så mye som det forenkler arbeidet til rammeverkprodusenter, har det kanskje ikke mye av en fordel for rammebrukere siden de allerede bruker maskinlæringsrammeverk i Python.
  • Den har ikke et stort økosystem av verktøy og læringsressurser ennå. Mens du kan bruke Pythons biblioteker i Mojo, kan du fortsatt bruke Pythons biblioteker i Python. For at Mojo skal ha noen fordel i forhold til Python, trenger den biblioteker som bærer hastigheten til Mojo.

Siste ord

Hvis den nåværende hypen er noe å gå etter, vil Mojo sannsynligvis bli et populært AI-språk. Jeg tror hastigheten alene er nok til å oppmuntre folk til å bytte over. Dens enkelhet er et pluss. Men i likhet med hvordan TypeScript ikke erstattet JavaScript fullstendig, er det sannsynlig at Mojo ikke vil erstatte Python fullstendig.

Mojo er definitivt et språk å holde på radaren når den til slutt modnes.

Deretter kan du sjekke ut Type vs. Interface i TypeScript.