Innen maskinlæring og kunstig intelligens har Python ofte fremstått som det ledende programmeringsspråket, takket være kraftfulle biblioteker som NumPy, TensorFlow og PyTorch. Imidlertid vil en nærmere undersøkelse av disse bibliotekenes GitHub-sider avsløre at mye av deres kildekode faktisk er skrevet i C og C++.
Dette skyldes at Python kan være for treg for krevende AI-oppgaver. Mojo er et nytt programmeringsspråk som tar sikte på å forene hastigheten til C/C++ med den elegante enkelheten til Python.
Mojo: En introduksjon
Mojo er et nyskapende programmeringsspråk som syntaktisk minner om Python, men som leverer hastigheter på linje med C. Det er primært utviklet for kunstig intelligens og systemutvikling, to områder som krever høyytelsesprogramvare.
Språket benytter seg av SIMD (Single Instruction, Multiple Data)-paradigmet for å utnytte parallellprosessering. Det er også just-in-time kompilert og har et effektivt minnehåndteringssystem.
Mojo er ikke et helt nytt språk fra bunnen av; det er snarere en utvidelse av Python, et «superset». Dette betyr at det er Python med ekstra funksjoner, på samme måte som TypeScript utvider JavaScript. Dette er en fordel, da det gjør overgangen til Mojo relativt enkel for de som allerede kjenner Python.
Mojo er utviklet av Modular, et selskap grunnlagt av Chris Lattner, kjent for å ha skapt LLVM og programmeringsspråket Swift.
Konklusjonen er at Mojo er et nytt programmeringsspråk som kombinerer en Python-lignende syntaks med C/C++-lignende hastighet. Det er rettet mot AI-utvikling og systemprogrammering. Selv om prosjektet ennå ikke er helt ferdigstilt, viser det stort potensial, noe vi skal utforske videre.
Funksjoner i Mojo som skiller seg ut
Mojo har oppnådd betydelig popularitet, selv om det ennå ikke er offentlig tilgjengelig. Dette skyldes de klare fordelene det har over andre programmeringsspråk, spesielt for maskinlæring og systemprogramvare. La oss se nærmere på disse fordelene.
#1. Innebygd støtte for AI og maskinlæring
Mojo er spesifikt utformet for å utvikle applikasjoner med kunstig intelligens. Det leveres med funksjoner og moduler i standardbiblioteket for å bygge nevrale nettverk, utføre datasyn og forberede data.
De fleste generelle språk, som Python, krever ekstra biblioteker for å utføre disse oppgavene, mens Mojo har det innebygd.
#2. Forenklet syntaks og høynivåabstraksjoner
For å skrive rask og effektiv programvare har vi vanligvis måttet ty til språk som C, C++ og Rust. Selv om disse språkene leverer høy ytelse, er de også mer krevende å lære og jobbe med på grunn av det lave abstraksjonsnivået.
Mojo derimot, tilbyr høynivåabstraksjoner som Python og en enkel syntaks. Dette gjør det mer tilgjengelig enn andre språk med tilsvarende ytelse.
#3. Integrasjon med populære AI-rammeverk og biblioteker
Som nevnt er Mojo et «superset» av Python. Dette betyr at det integreres sømløst med eksisterende biblioteker som NumPy og PyTorch, noe som gir Mojo tilgang til et like omfattende økosystem som Python.
#4. Effektiv datahåndtering
Mojo er designet for å manipulere store mengder data parallelt. Dette er spesielt fordelaktig når man utfører lineær algebra, som er en kjernekomponent i maskinlæring. Mojo er også just-in-time kompilert, noe som optimerer bytekoden for raskere utførelse, noe som gjør det ideelt for data- og maskinlæringsoppgaver.
#5. Skalerbarhet og støtte for parallell databehandling
Mojo er bygget for å støtte SIMD-paradigmet, som muliggjør parallell databehandling. Denne egenskapen er integrert i språket og gir raskere ytelse sammenlignet med Python-biblioteker som NumPy.
Nøkkelelementer i Mojo
La oss se på hvordan man programmerer i Mojo. Siden Mojo er ment å være et «superset» av Python, er all gyldig Python-kode også gyldig Mojo-kode, men ikke omvendt. Dette er likt forholdet mellom TypeScript og JavaScript.
Mojo er fortsatt under utvikling, og enkelte Python-funksjoner er ennå ikke støttet, for eksempel klasser. En kompilator er heller ikke tilgjengelig, men Mojo kan testes i en «lekeplass»-notatbok. Du trenger en konto på deres nettside for å få tilgang.
Det er vanskelig å gi en fullstendig introduksjon til språket på dette stadiet, da flere funksjoner fortsatt er under utvikling. Vi vil derfor fokusere på noen av de viktigste tilleggene Mojo bringer til bordet i tillegg til det Python allerede tilbyr.
Syntaks og grammatikk
Siden Mojo er et «superset» av Python, er syntaksen i stor grad den samme. Som i Python består et program av utsagn, som kan grupperes i blokker under funksjoner, løkker eller betingelser. Innrykk brukes til å angi blokker. Her er et eksempelprogram 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 identisk med et Python-program. Mojo tilbyr imidlertid flere funksjoner, som vi skal se på.
Variable erklæringer
Mojo gir to nye måter å erklære variabler på: `let` og `var`. `let` deklarerer en variabel som er konstant (uforanderlig) etter initialisering. `var` deklarerer en variabel som kan endres.
En viktig fordel med `let` og `var` er at de tillater spesifikasjon av datatyper. Følgende eksempel viser hvordan variabler deklareres i Mojo.
let pi: Float64 = 3.141 var greeting = "Hello, World" # Dette er ikke tillatt # pi = 6.283 # Dette er tillatt greeting = "Hei" print(pi, greeting)
Strukturer
Mojo støtter også strukturer. En struktur kan sees på som en strengere form for klasser. I motsetning til klasser kan man ikke legge til/fjerne eller endre metoder under kjøring, og alle medlemmer må deklareres med `var` eller `let`. Denne stivheten gjør at Mojo kan håndtere minne og ytelse mer effektivt. Her er et eksempel:
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
I eksemplet over brukte vi `fn` i stedet for `def` for å erklære `__init__`-metoden. Dette skyldes at i Mojo kan funksjoner deklareres med både `fn` og `def`. Funksjoner deklarert med `fn` er strengere enn de som er deklarert med `def`.
Med `fn` er argumentene som standard uforanderlige, og man må spesifisere datatyper for argumenter og returverdier. Alle lokale variabler må deklareres før bruk.
fn say_hello(name: StringLiteral): print("Hello,", name) # Dette er ikke gyldig # fn say_hello(name): # print("Hello,", name) say_hello("John")
Hvis en funksjon kan generere et unntak, må dette angis med `raises`. Mojo bruker `Error`-klassen i stedet for `Exception` slik Python gjør.
fn will_raise_error() raises: raise Error('En feil oppstod') will_raise_error()
Overbelastning
Mojo støtter overbelastning av operatorer basert på datatyper, noe som understøtter objektorientert 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, inkludert biblioteker for nevrale nettverk. Du kan også bruke det til Natural Language Processing og Computer Vision.
Selv om språket ennå ikke er ferdigstilt og økosystemet i praksis ikke-eksisterende, forventer vi at Mojo vil tilby funksjoner for datahåndtering, modelloppretting, optimalisering, modelladministrasjon og overvåking.
Er Mojo fremtiden for AI-utvikling?
Det er vanskelig å spå teknologiens utvikling og adopsjon. De fleste spådommer bommer, men la oss likevel se på Mojos fordeler og ulemper for å vurdere muligheten for at det erstatter Python:
Fordeler
- Høy hastighet og innebygd støtte for parallellprosessering, viktig for maskinlæring som kan ta lang tid.
- «Superset» av Python, noe som gir en lettere læringskurve.
- Reduserer feil i produksjon ved å fange opp feil under kompilering.
Ulemper
- Ufullstendig. Utviklingsteamet jobber med å ferdigstille språket.
- Begrenset fordel for brukere av maskinlæringsrammeverk, som allerede bruker Python.
- Mangler et stort økosystem av verktøy og læringsressurser. Selv om man kan bruke Pythons biblioteker i Mojo, finnes de jo allerede i Python. Mojo trenger biblioteker som utnytter sin egen hastighet.
Siste ord
Med tanke på den nåværende begeistringen, kan Mojo bli et populært språk for AI. Hastigheten er en viktig faktor som kan motivere overgang, i tillegg til språket er enkelt å bruke. Likevel, i likhet med hvordan TypeScript ikke fullt ut har erstattet JavaScript, er det usannsynlig at Mojo helt vil erstatte Python.
Mojo er et språk å følge med på.
Sjekk gjerne ut Type vs. Interface i TypeScript etterpå.