Les développeurs du langage de programmation Mojo ont commencé à traduire les travaux du projet en logiciel libre. Le code de la bibliothèque standard a été publié en premier, désormais disponible sous la licence Apache 2.0 avec des exceptions du projet LLVM, permettant un mélange avec du code sous licence GPLv2. En plus de la publication du code, le processus de développement s'est orienté vers la transparence et la possibilité de transmettre des modifications externes via l'envoi de pull requests sur GitHub. Les codes sources du compilateur sont prévus pour être ouverts après l'achèvement de la conception de l'architecture interne.
Deux branches avec le code de la bibliothèque standard Mojo ont été créées dans le dépôt : la branche principale, synchronisée avec la dernière version stable de Mojo, et la branche nightly, qui reflète le processus de développement actuel et est synchronisée avec les versions nocturnes de Mojo. La branche nightly est destinée aux participants souhaitant rejoindre le développement et partager leurs modifications. Certaines parties des modules de la bibliothèque ne sont pas encore ouvertes, mais dans un certain temps, le code resté fermé devrait également être transféré dans le dépôt ouvert. La majorité du code fermé concerne des modules en développement rapide nécessitant une stabilisation supplémentaire, des modules qui nécessitent une refactorisation et des modules nécessitant une révision et une refonte supplémentaires en raison de leur lien avec des projets propriétaires.
Parallèlement, la version de l'outil Mojo SDK 24.2 a été publiée, permettant de compiler des projets sur un système local, ainsi que la version du moteur MAX Engine 24.2, offrant une plateforme pour le développement dans le domaine de l'apprentissage automatique. Mojo SDK comprend les composants nécessaires au développement d'applications en langage Mojo, notamment le compilateur, le runtime, une interface REPL interactive pour compiler et exécuter des programmes, un débogueur, un complément pour l'éditeur de code Visual Studio Code (VS Code) avec support de l'autocomplétion, du formatage de code et de la coloration syntaxique, ainsi qu'un module pour s'intégrer avec Jupyter afin de compiler et exécuter des notebooks Mojo. MAX Engine complète le SDK avec des outils pour le développement et le débogage d'applications utilisant des modèles d'apprentissage automatique dans divers formats (TensorFlow, PyTorch, ONNX, etc.). Les builds de Mojo SDK et de MAX Engine sont préparées pour les plateformes Linux et macOS.
Parmi les changements les plus notables dans Mojo 24.2 :
- Les structures et autres types nominaux peuvent désormais correspondre implicitement aux protocoles. Par exemple, toute structure pour laquelle la méthode __str__() est implémentée correspond implicitement au protocole Stringable et peut être utilisée avec la fonction str().
- Dans les outils garantissant la compatibilité avec le code Python, le support pour le passage d'arguments par mots-clés dans les fonctions Python a été ajouté. Par exemple, « plt.plot((5, 10), (10, 15), color='red') ».
- La prise en charge du passage d'un nombre variable d'arguments fournis par attribution de mots-clés a été ajoutée à la fonction. Par exemple, « print_nicely(a=7, y=8) ».
- Le type DynamicVector a été renommé en List et déplacé dans le module collections.list. Il est désormais possible de créer une liste à partir d'un nombre arbitraire de valeurs, par exemple, « var numbers = List[Int](1, 2, 3) ».
- Des paramètres nommés sep et end ont été ajoutés à la fonction print(), permettant de définir respectivement les valeurs du séparateur et de la sortie finale. Par exemple, l'exécution de print(« Hello », « Mojo », sep=', ', end='!!!\n') produira « prints Hello, Mojo!!! ».
Le projet Mojo est développé sous la direction de Chris Lattner, fondateur et architecte principal du projet LLVM et créateur du langage de programmation Swift. La syntaxe de Mojo est basée sur le langage Python, tandis que le système de types est proche de C/C++. Le projet est présenté comme un langage généraliste, étendant les capacités de Python avec des moyens de programmation système, adapté à un large éventail de tâches et combinant la facilité d'utilisation pour le développement exploratoire et la création rapide de prototypes avec l'aptitude à générer des produits finaux hautes performances.
La simplicité est atteinte grâce à l'utilisation de la syntaxe familière du langage Python, et le développement de produits finaux est facilité par la possibilité de compilation en code machine, par des mécanismes de gestion sécurisée de la mémoire et par l'utilisation de ressources matérielles pour accélérer les calculs. Pour atteindre une haute performance, le parallélisme des calculs est pris en charge en mobilisant toutes les ressources matérielles disponibles dans les systèmes hétérogènes, tels que les GPU, les accélérateurs spécialisés pour l'apprentissage automatique et les instructions vectorielles de processeurs (SIMD). Lors de calculs intensifs, le parallélisme et l'implication de toutes les ressources de calcul permettent d'obtenir des performances supérieures aux applications en C/C++.
Le langage prend en charge la typage statique et fournit des outils pour travailler en toute sécurité à un niveau bas avec la mémoire, similaires à ceux du langage Rust, comme le suivi de la durée de vie des références et la vérification de l'emprunt des variables (borrow checker). En même temps, le langage permet également des opérations à bas niveau, par exemple, il est possible d'accéder directement à la mémoire en mode unsafe à l'aide du type Pointer, d'appeler des instructions SIMD spécifiques ou d'accéder à des extensions matérielles comme les TensorCores et AMX.
Mojo peut être utilisé soit en mode interprété avec JIT, soit pour la compilation en fichiers exécutables (AOT, ahead-of-time). Le compilateur intègre des technologies modernes d'optimisation automatique, de mise en cache et de compilation distribuée. Le code source en Mojo est transformé en code intermédiaire bas niveau MLIR (Multi-Level Intermediate Representation), développé par le projet LLVM. Le compilateur permet d'utiliser différents backends pour la génération de code machine qui prennent en charge MLIR.
Source : opennet.ru
