Programmeerimiskeele Mojo 1.0 beetaversioon

Esitleme esimest Mojo 1.0 programmistiku beetaversiooni, mis tähistab keele stabiliseerimist ja kõigi põhifunktsioonide rakendamist. Väljalase hinnatakse peaaegu valmisolekuks laialdaseks kasutamiseks. Mojo 1.0 lõppversioon on oodata sügise alguses. Selle haru kasutamine võimaldab alustada suurte projektide arendamist, kartmata, et keeles ilmuvad muudatused, mis rikuvad ühilduvust.

Platvorm sisaldab komponente, mis on vajalikud Mojo keeles rakenduste arendamiseks, sealhulgas kompilaator, runtime, interaktiivne REPL-keskkond programmide koostamiseks ja käivitamiseks, silur, Visual Studio Code (VS Code) koodi redigeerija täiendused automaatse täienduse, koodivormindamise ja süntaksi esiletõstmise toetusega, moodul Jupyteriga integreerimiseks Mojo notebookide koostamiseks ja käivitamiseks. Mojo standardraamatukogu lähtekood on avatud Apache 2.0 litsentsi alusel koos LLVM projekti eranditega, mis võimaldavad segada GPLv2 litsentsiga koodiga. Kompilaatori lähtekood on plaanis avada pärast sisearhitektuuri stabiliseerimise lõpetamist.

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.

Mojo 1.0.0b1 muudatuste seas:

  • Märksõna „fn” on kuulutatud aegunuks — funktsioonide kuulutamiseks tuleks kasutada märksõna „def” („fn” ja „def” funktsionaalsused on ühendatud ning „def” on rakendatud nii, et see kannab sama semantikat nagu „fn”, ilma erandeid genereerimata).
  • Sulgemiste (closure) ühtne rakendamine. Konteksti arvestamata sulgemised (stateless closure) muudetakse nüüd automaatselt tipptaseme funktsioonideks ja neid saab kasutada tagasitulek kutsena FFI-s (Foreign Function Interface). Lisatud toetus viite järgi haaramiseks (ref capture). Funktsioonide kuulutamisel on lisatud „thin” tunnus, et kuulutada lihtsat funktsiooni näidiku tüüpi ilma oleku haaramata.
  • UnsafePointer tüüpi viidud ei saa nüüd vaikimisi null-väärtust vastu võtta, ning null-viidudega töötamiseks tuleb kasutada „Optional[UnsafePointer[…]]”, mis võimaldab vähendada null-viidudega töötamise kulusid ja säilitada turvalise rakendamise võimaluse FFI-s.
  • Vaikimisi on CPU koodeksis kogudes lubatud kontrolli kehtivat piiri (GPU puhul on kontroll välja lülitatud jõudluse tõttu, kuid seda saab sisse lülitada, kui kasutada «mojo build -D ASSERT=all»). Negatiivsete väärtuste määramine indeksites on lõpetatud («x[-1]» on keelatud, kuid võib määrata «x[len(x)-1]»).
  • Standardteegist on eemaldatud tüüp NDBuffer, mille asemel tuleks kasutada TileTensorit.
  • GPU toe toimetamine on laienenud Apple'i seadmetes Metal graafilise API kaudu (näiteks on lisatud funktsionaalsused print() ja M5 maatriksi käsklused). Lisatud on tuge AMD MI250X ja NVIDIA B300 kiirenditele.
  • GPU primitiivide identifikaatorid (voogude ja blokkide indeksid) on muudetud tagasi tüübi Int asemel UInt.
  • CPU kontekst (‘DeviceContext(api=»cpu»)’) on muutunud voogude järgi sõltuvaks (stream-ordered). Ülesannete järjekindlaks täitmiseks on lisatud funktsioonid enqueue_cpu_function() ja enqueue_cpu_range().
  • String ja StringSlice tüüpidesse on lisatud tugi grafeemide klastritele (Unicode UAX #29), mis võimaldab õigesti arvutada pikkust ja lõigata emoji ja kombineeritud sümbolitega stringe. Lisatud on meetodid graphemes() ja count_graphemes(), samuti lõike süntaks «[grapheme=…]».
  • Kompileerimise etapis on rakendatud tüüpide täpsustamine (Type Refinement), mis võimaldab automaatset tüüpide kitsendamist väljendites „where”, „if” ja „assert” (see annab võimaluse ilma trait_downcast'i selge määratlemiseta hakkama saada).
  • Ette on pandud ühtne refleksioon API, kus on tutvustatud uut funktsiooni reflect[T](), mis tagastab Reflected[T] ning asendab struktuuri funktsioonide perekonna struct_field_* ja vanad meetodid get_type_name().

Samaaegselt on välja antud MAX Framework 26.3 mootor, mis pakub platvormi masinaõppe arendusteks. MAX Framework täiendab Mojo tööriistu rakenduste arendamiseks ja tõrkeotsinguks, mis kasutavad erinevates formaatides masinaõppe mudeleid (TensorFlow, PyTorch, ONNX jne). Uues MAX Framework versioonis on lisatud võimalus videot genereerida, laiendatud toimetamist mitme GPU kasutamiseks ning tõhusust on tõhusalt suurendatud (mõningad toimingud on kiirenenud 10-20 korda).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster