On avaldatud programmeerimiskeele Mojo 24.3 väljaanne, mis võimaldab kompileerida projekte kohalikus süsteemis. Komponendid, mis on vajalikud Mojo keeles rakenduste arendamiseks, sealhulgas kompilaator, runtime, interaktiivne REPL-keskkond programmide koostamiseks ja käivitamiseks, silur, Visual Studio Code'i (VS Code) koodi redigeerimise täiendav tööriist autocompletioni, koodivormindamise ja süntaksi esiletõstmise toega, Jupyteriga integreerimise moodul Mojo notebooki koostamiseks ja käivitamiseks. Mojo standardraamatukogu lähtekood on avatud litsentsi Apache 2.0 all, koos LLVM projekti eranditega, mis lubavad segada GPLv2 litsentsi all olevale koodile. Kompilaatori lähtekoodi plaanitakse avada pärast sisemise arhitektuuri projekteerimise lõpetamist.
Samas on välja antud ka MAX Engine 24.3, mis pakub platvormi masinõppe arendamiseks. MAX Engine täiendab Mojo tööriistade komplekti rakenduste arendamiseks ja silumiseks, mis kasutavad masinõppe mudeleid erinevates formaatides (TensorFlow, PyTorch, ONNX jne). Mojo SDK ja MAX Engine kogumid on ette valmistatud Linuxi ja macOS platvormide jaoks.
Mojo 24.3 muudatuste seas:
- Kogude (List, Dict, Set ja Tuple) moodulitele on lisatud funktsioone, mis muudavad need tuttavamaks neile, kes tunnevad Python programmeerimiskeelt. List tüüpi on lisatud meetodid, mis kordavad Python API-d, näiteks pop(index), resize(new_size) ja insert(index, value).
- Dict tüüpi on lisatud meetod update(), et uuendada võtme/väärtuse paari teisest Dict'ist.
- Tuple tüübi puhul on tagatud tippude töötlemine, mis salvestavad ainult mälus, nagu String, mis võimaldab kirjutada «x = tup[1]» asemel «x = tup.get[1, Int]()» ja määrata väärtusi läbi «tup[1] = x».
- Set tüübis on rakendatud nimetatud meetodite tugi, mida saab kasutada operaatorite asemel: difference() asemel «-», difference_update() asemel «-=», intersection_update() asemel «&=» ja update() asemel «|=».
- On lisatud funktsioon reversed(), mis võimaldab vahetada elementide järjekorda tagurpidi. Funktsiooni reversed() saab rakendada List, Dict ja kõikide tüüpide puhul, mis toetavad väärtuste vahemikke. var numbers = List(1, 2, 3, 4, 5) for number in reversed(numbers): print(number)
- On rakendatud Boolable tüüp, mis tagastab Dict, List ja Set tüüpide puhul väärtuse True, kui need sisaldavad vähemalt ühte elementi.
- On parandatud variatiivsete argumentide tuge. Antud on võimalus määrata funktsioone, mis sisaldavad nii valikulisi kui ka variatiivseid argumente. fn variadic_arg_after_default(a: Int, b: Int = 3, *args: Int, c: Int, d: Int = 1, **kwargs: Int): …
- On lisatud funktsioonid __source_location() ja __call_location(), et määrata funktsioonide ja koodi kutsumiste asukoht (rida lähtekoodis).
- FileHandle.seek() meetodisse on sarnaselt Pythoni keelele lisatud argument «whence».
- AnyPointer tüüp on ümber nimetatud UnsafePointer'iks. On lisatud võimalus initsialiseerida UnsafePointer otse viitest tüübi Reference («UnsafePointer(someRef)»). UnsafePointer'iga töötamiseks on lisatud funktsioonid initialize_pointee_copy, initialize_pointee_move, move_from_pointee() ja move_pointee.
Mojo keel areneb Chris Lattneri juhtimisel, kes on LLVM projekti asutaja ja peamine arhitekt ning Swift programmeerimiskeele looja. Mojo süntaks põhineb Pythonil ning tüüpsüsteem on lähedane C/C++-le. Projekt esitleb end kui üldotstarbelist keelt, mis laiendab Python-i võimalusi süsteemse programmeerimise vahenditega, olles sobiv erinevate ülesannete jaoks ning kombineerib teaduslike arenduste lihtsuse ja kiire prototüüpimise võimaluse kõrge jõudlusega lõppproduktide loomisega.
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
