ĂshtĂ« publikuar versioni 24.3 i mjeteve tĂ« gjuhĂ«s sĂ« programimit Mojo, i cili lejon kompilimin e projekteve nĂ« sistemin lokal. Ky paketĂ« pĂ«rfshin komponentĂ«t e nevojshĂ«m pĂ«r zhvillimin e aplikacioneve nĂ« gjuhĂ«n Mojo, pĂ«rfshirĂ« kompiluesin, runtime, njĂ« ndĂ«rfaqe REPL interaktive pĂ«r ndĂ«rtimin dhe ekzekutimin e programeve, debugguerin, si dhe njĂ« shtesĂ« pĂ«r redaktorin e kodit Visual Studio Code (VS Code) me mbĂ«shtetje pĂ«r autokompletimin e hyrjes, formatimin e kodit dhe theksimin e sintaksĂ«s, modul pĂ«r integrimin me Jupyter pĂ«r ndĂ«rtimin dhe ekzekutimin e Mojo notebook. Kodet burimore tĂ« bibliotekĂ«s standarde Mojo janĂ« tĂ« hapura nĂ«n licencĂ«n Apache 2.0 me pĂ«rjashtime nga projekti LLVM, qĂ« lejojnĂ« pĂ«rzierjen me kodin sipas licencĂ«s GPLv2. Kodi burimor i kompiluesit planifikohet tĂ« hapet pas pĂ«rfundimit tĂ« projektimit tĂ« arkitekturĂ«s sĂ« brendshme.
Njëkohësisht është formuar versioni 24.3 i motorit MAX Engine, që ofron një platformë për zhvillim në fushën e mësimit të makinës. MAX Engine plotëson mjete për Mojo me mjete për zhvillimin dhe debuggimin e aplikacioneve që përdorin modele të mësimit të makinës në formate të ndryshme (TensorFlow, PyTorch, ONNX etj.). Ndërtimet e Mojo SDK dhe MAX Engine janë përgatitur për platformën Linux dhe macOS.
Ndër ndryshimet në Mojo 24.3:
- Në modulet për punën me koleksionet (List, Dict, Set dhe Tuple) janë shtuar mundësi që i bëjnë ato më të njohura për përdoruesit e njohur me gjuhën e programimit Python. Në tipin List janë shtuar metoda që përsërisin API-në e Python, siç janë pop(index), resize(new_size) dhe insert(index, value).
- Në tipin Dict është shtuar metoda update() për përditësimin e çelësit/vlerës nga një tjetër Dict.
- Në tipin Tuple është siguruar puna me tipa që ruhen vetëm në memorje, siç është String, që lejon të specifikohet "x = tup[1]" në vend të "x = tup.get[1, Int]()" dhe të caktohen vlera përmes "tup[1] = x".
- Në tipin Set është realizuar mbështetje për metoda të emëruara që mund të përdoren në vend të operatorëve: difference() në vend të "-", difference_update() në vend të "-=", intersection_update() në vend të "&=", dhe update() në vend të "|=".
- ĂshtĂ« shtuar funksioni reversed(), i cili lejon ndryshimin e rendit tĂ« elementeve nĂ« tĂ« kundĂ«rt. Funksioni reversed() mund tĂ« pĂ«rdoret me List, Dict dhe çdo lloj tjetĂ«r qĂ« mbĂ«shtet intervale vlerash. var numbers = List(1, 2, 3, 4, 5) for number in reversed(numbers): print(number)
- ĂshtĂ« realizuar tipazhi Boolable, qĂ« kthen pĂ«r variablat me tipat Dict, List dhe Set vlerĂ«n True, nĂ«se ato pĂ«rmbajnĂ« tĂ« paktĂ«n njĂ« element.
- ĂshtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r argumentet variative. ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« pĂ«rcaktuar funksione qĂ« pĂ«rmbajnĂ« njĂ«kohĂ«sisht si argumente tĂ« domosdoshme, ashtu edhe variative. fn variadic_arg_after_default( a: Int, b: Int = 3, *args: Int, c: Int, d: Int = 1, **kwargs: Int ): âŠ
- Janë shtuar funksionet __source_location() dhe __call_location() për të përcaktuar pozitat (numri i rreshtit në kodin burimor) të thirrjeve të funksioneve dhe kodit.
- Në metodën FileHandle.seek() është shtuar mbështetje për argumentin "whence" në përputhje me gjuhën Python.
- Tipi AnyPointer Ă«shtĂ« rinovuar nĂ« UnsafePointer. ĂshtĂ« shtuar mundĂ«sia pĂ«r inicializimin e UnsafePointer drejtpĂ«rsĂ«drejti nga njĂ« referencĂ« me tipin Reference ("UnsafePointer(someRef)"). PĂ«r punĂ«n me treguesit UnsafePointer janĂ« shtuar funksionet initialize_pointee_copy, initialize_pointee_move, move_from_pointee() dhe move_pointee.
Gjuha Mojo po zhvillohet nën udhëheqjen e Chris Lattner, themeluesit dhe arkitektit kryesor të projektit LLVM dhe krijuesit të gjuhës së programimit Swift. Sintaksa e Mojo bazohet në gjuhën Python, ndërsa sistemi i tipeve është i afërt me C/C++. Projekti prezantohet si një gjuhë e përgjithshme, që zgjeron mundësitë e gjuhës Python me mjete për programim sistemor, e përshtatshme për një gamë të gjerë detyrash dhe shfaq lehtësinë e përdorimit për zhvillimet kërkimore dhe krijimin e prototipeve të shpejta me përshtatshmëri për formimin e produkteve përfundimtare me performancë të lartë.
Thjeshtësia arrihet duke përdorur sintaksën e njohur të gjuhës Python, ndërsa zhvillimi i produkteve përfundimtare përfshin mundësinë e kompajlimit në kodin makinerik, mekanizmat për punën e sigurt me memorjen dhe aktivizimin e mjeteve për përshpejtimin harduerik të llogaritjeve. Për të arritur një performancë të lartë, mbështetet paralelizimi i llogaritjeve me angazhimin e të gjithë burimeve harduerike të disponueshme në sistemet heterogjene, si GPU-të, përshpejtuesit e specializuar për mësimin automat dhe komandat e procesorëve vektorialë (SIMD). Gjatë llogaritjeve intensive, paralelizimi dhe angazhimi i të gjithë burimeve të llogaritjes mundëson të arrihet një performancë që e tejkalon aplikacionet në C/C++.
Gjuha mbështet tipizimin statik dhe mjetet për një punë të sigurt në nivel të ulët me memorjen, duke kujtuar mundësitë e gjuhës Rust, siç janë gjurmimi i kohëzgjatjes së referencave dhe kontrolli i huazimit të variablave (borrow checker). Megjithatë, gjuhës i janë të disponueshme edhe mundësitë për punë në nivel të ulët, për shembull, është e mundur qasja e drejtpërdrejtë në memorje në modalitetin unsafe duke përdorur tipin Pointer, thirrja e instrukcioneve SIMD të veçanta ose qasja në zgjerimet harduerike, si TensorCores dhe AMX.
Mojo mund të përdoret si në modalitetin e interpretimit me JIT, ashtu edhe për kompilimin në skedarë ekzekutivë (AOT, ahead-of-time). Në kompilator janë të ndërtuara teknologji moderne për optimizimin automatike, caching dhe kompilim të shpërndarë. Kodi burimor në gjuhën Mojo shndërrohet në kodin e ulët të ndërmjetëm MLIR (Multi-Level Intermediate Representation), që zhvillohet nga projekti LLVM. Kompilatori lejon përdorimin e backend-eve të ndryshme për gjenerimin e kodit të makinës që mbështesin MLIR.
Burimi: opennet.ru
