Mojo programmeerimiskeele arendajad on alustanud oma projekti tulemuslikkuse avatud allikaks muutmist. Esimese avatud koodina on nüüd saadaval standardraamatukogu kood, mis on litsentseeritud Apache 2.0 litsentsi alusel koos LLVM projekti eranditega, mis võimaldavad segada GPLv2 litsentsiga koodi. Lisaks koodi avaldamisele on arendusprotsess liikunud avatumaks ja võimaldama kolmandate osapoolte muudatuste edastamist GitHubi kaudu pull-requestide saatmise teel. Kompilaatori lähtekoodide avamine on plaanitud pärast sisemise arhitektuuri kavandamise lõpetamist.
Repositooriumis on loodud kaks haru Mojo standardraamatukogu koodist: haru main, mis on sünkroonitud koos viimase stabiilse Mojo versiooniga, ja haru nightly, mis peegeldab praegust arendustegevust ja on sünkroonitud öiste kogumistega Mojo. Haru nightly on mõeldud neile osalejatele, kes soovivad liituda arendusega ja jagada oma muudatusi. Hetkel on osa raamatukogu moodulitest endiselt suletud, kuid mõne aja pärast plaanitakse ka ülejäänud suletud kood viia avatud repositooriumisse. Peamiselt jääb suletuks kiiresti arenevate moodulite kood, mis vajavad täiendavat stabiliseerimist, moodulite puhul, milleks on planeeritud refaktoreerimine, ja moodulite, mis vajavad täiendavat ülevaatamist ja ümbertegemist seoses patendi määratud projektidega.
Sama ajal avaldati Mojo SDK 24.2 tööriistakomplekt, mis võimaldab projekte kohalikul süsteemil kokku kompileerida, ja MAX Engine 24.2 mootor, mis pakub platvormi masinõppe arendamiseks. Mojo SDK sisaldab komponente, mis on vajalikud rakenduste arendamiseks Mojo keeles, sealhulgas kompilaator, runtime, interaktiivne REPL-liides programmide kompileerimiseks ja käitamiseks, silur, Visual Studio Code (VS Code) koodi redigeerimise laiendus, mis toetab sisestamise automaatset täiendamist, koodi vormindamist ja süntaksivärvimist, samuti moodul, mis võimaldab integreerimist Jupyteriga Mojo notebookide kompileerimiseks ja käitamiseks. MAX Engine täiendab SDK-d tööriistadega, mis on mõeldud rakenduste arendamiseks ja silumiseks, kasutades masinõppe mudeleid erinevates formaatides (TensorFlow, PyTorch, ONNX jne). Mojo SDK ja MAX Engine koondavad versioonid on ette valmistatud Linuxi ja macOS-i platvormidele.
Mojo 24.2 kõige silmapaistvamad muudatused on:
- Struktuurid ja muud nimelised tüübid võivad nüüd vaikimisi vastata liideselementidele. Näiteks iga struktuur, millel on rakendatud meetod __str__(), vastab vaikimisi liidesele Stringable ja seda saab kasutada funktsiooniga str().
- Python'i koodi ühilduvuse vahenditesse on lisatud toetus sõnakanal argumentide edastamiseks Python'i funktsioonides. Näiteks „plt.plot((5, 10), (10, 15), color='red')“
- Lisatud tugi funktsioonile muutuva arvu argumentide edastamisel, mis määratakse võtmete kaudu. Näiteks „print_nicely(a=7, y=8)“.
- Tüüp DynamicVector on ümber nimetatud List'iks ja viidud moodulisse collections.list. Lisatud toetus nimekirja loomisele, kasutades suvalist arvu väärtusi, näiteks „var numbers = List[Int](1, 2, 3)“.
- Funktsioonile print() on lisatud nimega parameetrid sep ja end, mille kaudu saab määrata eraldaja ja lõpu väärtused. Näiteks printimise korral print(„Hello”, „Mojo”, sep=’, ‘, end=’!!!\n’) annab väljundiks „prints Hello, Mojo!!!“.
Mojo projekt koordineerib Chris Lattner, LLVM projekti asutaja ja peaarhitekt ning programmeerimiskeele Swift looja. Mojo süntaks põhineb Pythonil, samas kui tüüpsüsteem on äratuntavalt C/C++-le sarnane. Projekt tutvustab Mojo kui üldotstarbelist keelt, mis täiustab Python'i süsteemiprogrammeerimise vahenditega, olles sobilik erinevate ülesannete tarbeks, ühendades uurimistööde lihtsuse ja kiire prototüüpimise võimaluse kõrge jõudlusega lõppproduktide loomiseks.
Lihtsus saavutatakse tänu keele Python tuttavale süntaksile, samas kui lõppproduktide arendamisele aitavad kaasa võimalus kompileerida masinkoodi, mälu ohutu käsitlemise mehhanismid ning riistvara kiirenduse kasutamine arvutustes. Kõrge efektiivsuse saavutamiseks toetatakse arvutuste paralleelset töötlemist, kaasates kõik süsteemis olemasolevad riistvaravahendid heterogeensetes süsteemides, nagu GPU, spetsialiseeritud kiirendajad masinõppe jaoks ja vektorpinkude käsklused (SIMD). Intensiivsete arvutuste käigus võimaldab paralleelelemendi ja kõikide arvutusressursside kaasamine saavutada jõudlust, mis ületab C/C++ rakenduste puhul saavutatut.
Keel toetab staatilist tüübi määratlemist ja võimalusi turvaliseks madala taseme mälu haldamiseks, mis meenutavad Rust'i keele omadusi, nagu viidete eluea jälgimine ja muutujate laenamise kontroll (borrow checker). Samuti on keeles saadaval madala taseme töötlusvõimalused, näiteks on võimalik otsene juurdepääs mälule unsafe-režiimis tüübiga Pointer, eraldi SIMD-käskude käivitamine või juurdepääs riistvaralistele laiendustele, nagu TensorCores ja AMX.
Mojo't saab kasutada nii tõlgendusrežiimis JIT-i abil kui ka esitatavate failide (AOT, ahead-of-time) kompileerimiseks. Kompilaatorisse on integreeritud kaasaegsed automaatse optimeerimise, vahemälu ja jaotatud kompileerimise tehnoloogiad. Mojo kood muudetakse madala taseme vahe-koodiks MLIR (Multi-Level Intermediate Representation), mida arendab LLVM projekt. Kompilaator võimaldab masinkoodi genereerimiseks kasutada erinevaid backend'e, mis toetavad MLIR-i.
Allikas: opennet.ru
