Razvijači programskog jezika Mojo započeli su prebacivanje svog projekta u otvoreni izvor. Prvi je otvoren kod standardne biblioteke, koji je sada dostupan pod Apache 2.0 licencom s izuzecima projekta LLVM, koji dopuštaju miješanje s kodom pod GPLv2 licencom. Osim objavljivanja koda, proces razvoja se pomaknuo prema otvorenosti i mogućnosti prijenosa vanjskih promjena putem slanja pull zahtjeva na GitHub. Izvorni kod kompajlera planiraju otvoriti nakon završetka projektiranja interne arhitekture.
U repozitoriju su kreirane dvije grane s kodom standardne biblioteke Mojo: grana main, sinkronizirana s posljednjim stabilnim izdanjem Mojo, i grana nightly, koja odražava trenutni proces razvoja i sinkronizirana je s noćnim izgradnjama Mojo. Grana nightly se preporučuje sudionicima koji žele pridružiti se razvoju i podijeliti svoje promjene. Dio modula biblioteke još nije otvoren, ali se planira da će zatvoreni kod s vremenom biti prebačen u otvoreni repozitorij. Većinom zatvoren ostaje kod brzo razvijajućih modula koji zahtijevaju dodatnu stabilizaciju, modula koji su planirani za refaktorizaciju i modula koji zahtijevaju dodatno recenziranje i preradu zbog povezanosti s proprietarnim projektima.
Istovremeno je objavljeno izdanje alata Mojo SDK 24.2, koje omogućuje kompilaciju projekata na lokalnom sustavu, te izdanje motora MAX Engine 24.2, koje nudi platformu za razvoj u području strojnog učenja. Mozimo SDK uključuje komponente potrebne za razvoj aplikacija na jeziku Mojo, uključujući kompajler, runtime, interaktivnu REPL ljusku za izgradnju i pokretanje programa, debager, dodatak za editor koda Visual Studio Code (VS Code) s podrškom za automatsko dovršavanje unosa, formatiranje koda i isticanje sintakse, modul za integraciju s Jupyterom za izgradnju i pokretanje Mojo bilježnica. MAX Engine dopunjuje SDK sredstvima za razvoj i debagiranje aplikacija koje koriste modele strojnog učenja u raznim formatima (TensorFlow, PyTorch, ONNX itd.). Izgradnje Mojo SDK i MAX Engine pripremljene su za platforme Linux i macOS.
Među najznačajnijim promjenama u Mojo 24.2:
- Strukture i drugi nominalni tipovi sada se mogu neizravno usklađivati s tipovima. Na primjer, svaka struktura za koju je implementirana metoda __str__() neizravno odgovara tipu Stringable i može se koristiti s funkcijom str().
- U alatima za osiguranje kompatibilnosti s kodom na jeziku Python dodana je podrška za prijenos argumenata temeljenih na ključnim riječima u Python funkcije. Na primjer, «plt.plot((5, 10), (10, 15), color=»red»)»
- Dodana je podrška za prijenos varijabilnog broja argumenata u funkciju preko dodijeljenih ključnih riječi. Na primjer, «print_nicely(a=7, y=8)».
- Tip DynamicVector preimenovan je u List i premješten u modul collections.list. Dodana je mogućnost formiranja liste na temelju proizvoljnog broja vrijednosti, na primjer, «var numbers = List[Int](1, 2, 3)».
- U funkciju print() dodani su imenovani parametri sep i end, preko kojih se mogu postaviti vrijednosti razdjeljnika i završnog ispisa. Na primjer, izvršenje print(«Hello», «Mojo», sep=», «, end=»!!!\n») će rezultirati ispisom «prints Hello, Mojo!!!».
Projekt Mojo razvija se pod vodstvom Chrisa Lattnera, osnivača i glavnog arhitekta projekta LLVM i kreatora programskog jezika Swift. Sintaksa Mojo temelji se na jeziku Python, dok je sustav tipova sličan C/C++. Projekt se predstavlja kao jezik opće namjene, koji proširuje mogućnosti jezika Python alatima sustavnog programiranja, prikladan za širok spektar zadataka i kombinira jednostavnost primjene za istraživački razvoj i brzo stvaranje prototipa s pogodnostima za formiranje visokoučinkovitih konačnih proizvoda.
Jednostavnost se postiže korištenjem poznate sintakse jezika Python, a razvoj konačnih proizvoda omogućava sposobnost kompilacije u strojni kod, mehanizme sigurnog rada s memorijom i korištenje sredstava za hardversko ubrzanje izračuna. Za postizanje visoke izvedbe podržava se paralelizacija izračuna koristeći sve dostupne računalne resurse u heterogenim sustavima, kao što su GPU, specijalizirani akceleratori za strojno učenje i vektorske procesorske instrukcije (SIMD). U intenzivnim izračunima, paralelizacija i korištenje svih izračunskih resursa omogućuju postizanje performansi koje nadmašuju aplikacije napisane u C/C++.
Jezik podržava statičku tipizaciju i sredstva za sigurni niskonivo rad s memorijom, nalik na mogućnosti jezika Rust, poput praćenja trajanja životnog ciklusa referenci i provjere zaduživanja varijabli (borrow checker). Istovremeno, jezik nudi mogućnosti za niskonivo rad, kao što je direktan pristup memoriji u unsafe modu korištenjem tipa Pointer, pozivanje pojedinačnih SIMD-instrukcija ili pristup hardverskim proširenjima poput TensorCores i AMX.
Mojo se može koristiti i u interpretacijskom režimu uz korištenje JIT-a, kao i za kompilaciju u izvršne datoteke (AOT, predkompilirano). U kompajler su ugrađene moderne tehnologije automatske optimizacije, keširanja i distribuirane kompilacije. Izvorni kod na jeziku Mojo se pretvara u niskonivo međukod MLIR (Multi-Level Intermediate Representation), koji razvija projekt LLVM. Kompajler omogućava primjenu različitih backendova za generiranje strojno koda koji podržavaju MLIR.
Izvor: opennet.ru
