De ontwikkelaars van de programmeertaal Mojo hebben de voortgang van het project omgevormd tot open source software. De broncode van de standaardbibliotheek is als eerste opengesteld, en is nu beschikbaar onder de Apache 2.0-licentie met uitzonderingen van het LLVM-project, die het combineren met GPLv2-code toestaan. Naast de publicatie van de code is het ontwikkelingsproces verschoven naar meer openheid en de mogelijkheid om externe wijzigingen aan te brengen via pull-requests op GitHub. De broncode van de compiler zal na de afronding van het ontwerp van de interne architectuur worden vrijgegeven.
In de repository zijn twee branches aangemaakt voor de code van de standaardbibliotheek Mojo: de hoofdbranch, die gesynchroniseerd is met de laatste stabiele versie van Mojo, en de nachtelijke branch, die het huidige ontwikkelingsproces weerspiegelt en gesynchroniseerd is met de nachtelijke builds van Mojo. Het wordt aanbevolen om de nachtelijke branch te gebruiken voor deelnemers die willen bijdragen aan de ontwikkeling en hun wijzigingen willen delen. Een aantal modules van de bibliotheek is nog niet openbaar, maar op termijn is het de bedoeling dat ook de gesloten code naar de open repository wordt verplaatst. In grote lijnen blijft de code van snel ontwikkelende modules, die extra stabilisatie vereisen, gesloten, evenals modules die op de herstructurering wachten en modules die extra beoordeling en bewerking vereisen vanwege hun verbinding met eigendomsprojecten.
Gelijktijdig is de release van het Mojo SDK 24.2 toolkit gepubliceerd, waarmee projecten op het lokale systeem kunnen worden gecompileerd, en de release van de MAX Engine 24.2, die een platform biedt voor ontwikkelingen op het gebied van machine learning. Het Mojo SDK omvat de componenten die nodig zijn voor het ontwikkelen van applicaties in de Mojo-taal, waaronder de compiler, runtime, interactieve REPL-shell voor het bouwen en uitvoeren van programma's, debugger, een uitbreiding voor de Visual Studio Code (VS Code) code-editor met ondersteuning voor autocompletion, code-opmaak en syntaxis-highlight, en een module voor integratie met Jupyter voor het bouwen en uitvoeren van Mojo-notebooks. MAX Engine breidt het SDK uit met middelen voor het ontwikkelen en debuggen van applicaties die modellen van machine learning in verschillende formaten (TensorFlow, PyTorch, ONNX, enz.) gebruiken. De builds van Mojo SDK en MAX Engine zijn voorbereid voor de platforms Linux en macOS.
Onder de meest opvallende wijzigingen in Mojo 24.2:
- Structuren en andere nominale types kunnen nu impliciet voldoen aan interfaces. Bijvoorbeeld, elke structuur waarvoor de methode __str__() is geĆÆmplementeerd, voldoet impliciet aan de interface Stringable en kan worden gebruikt met de functie str().
- In de tools voor compatibiliteit met Python-code is ondersteuning toegevoegd voor het doorgeven van argumenten op basis van sleutelwoorden in Python-functies. Bijvoorbeeld, 'plt.plot((5, 10), (10, 15), color='red')'.
- Ondersteuning voor het doorgeven van een wisselend aantal argumenten, gedefinieerd via sleutelwoordtoewijzing, is toegevoegd aan de functie. Bijvoorbeeld, 'print_nicely(a=7, y=8)'.
- Het type DynamicVector is hernoemd naar List en verplaatst naar de module collections.list. Er is een mogelijkheid toegevoegd om een lijst te vormen op basis van een willekeurig aantal waarden, bijvoorbeeld, 'var numbers = List[Int](1, 2, 3)'.
- Aan de functie print() zijn benoembare parameters sep en end toegevoegd, waarmee de waarden voor de scheidingsteken en de uiteindelijke uitvoer kunnen worden ingesteld. Bijvoorbeeld, de uitvoering van print('Hello', 'Mojo', sep=', ', end='!!!\n') resulteert in de uitvoer 'prints Hello, Mojo!!!'.
Het Mojo-project wordt geleid door Chris Lattner, de oprichter en hoofdarchitect van het LLVM-project en de maker van de programmeertaal Swift. De syntaxis van Mojo is gebaseerd op Python, en het typesysteem lijkt op dat van C/C++. Het project wordt gepresenteerd als een algemene programmeertaal die de mogelijkheden van Python uitbreidt met systeemprogrammering, geschikt voor een breed scala aan taken, en combineert gebruiksgemak voor onderzoeksontwikkeling en snelle prototypering met geschiktheid voor het creƫren van hoogpresterende eindproducten.
Eenvoud wordt bereikt door het gebruik van de bekende syntaxis van de programmeertaal Python, terwijl de ontwikkeling van eindproducten wordt ondersteund door de mogelijkheid om naar machinecode te compileren, veilige geheugenwerkmechanismen en het gebruik van middelen voor hardwareversnelling van berekeningen. Voor hoge prestaties wordt parallelle verwerking van berekeningen ondersteund met gebruik van alle beschikbare systeembronnen van heterogene systemen, zoals GPU's, gespecialiseerde versnellers voor machine learning en vectorprocessor-instructies (SIMD). Bij intensieve berekeningen maakt parallelle verwerking en het gebruik van alle rekenbronnen het mogelijk om prestaties te bereiken die superieur zijn aan applicaties in C/C++.
De taal ondersteunt statische typechecking en middelen voor veilige low-level geheugenwerking die lijken op de mogelijkheden van de taal Rust, zoals het volgen van de levensduur van referenties en de controle van het lenen van variabelen (borrow checker). Tegelijkertijd biedt de taal ook mogelijkheden voor low-level werk, bijvoorbeeld directe toegang tot geheugen in unsafe-modus met behulp van het type Pointer, het aanroepen van afzonderlijke SIMD-instructies of toegang tot hardware-uitbreidingen zoals TensorCores en AMX.
Mojo kan zowel in interpretatiemodus met JIT als voor compilatie naar uitvoerbare bestanden (AOT, ahead-of-time) worden gebruikt. De compiler is uitgerust met moderne technologieƫn voor automatische optimalisatie, caching en gedistribueerde compilatie. Broncode in de Mojo-taal wordt omgezet naar low-level tussenliggende code MLIR (Multi-Level Intermediate Representation), ontwikkeld door het LLVM-project. De compiler stelt het gebruik van verschillende backends die MLIR ondersteunen voor de generatie van machinecode mogelijk.
Bron: opennet.ru
