Les développeurs du langage de programmation Mojo ont commencé à convertir les développements du projet en logiciels open source. Le premier à être open source était le code de la bibliothèque standard, désormais disponible sous la licence Apache 2.0, à l'exception du projet LLVM qui permet de mélanger avec du code sous la licence GPLv2. En plus de la publication du code, le processus de développement a évolué vers l'ouverture et la possibilité de communiquer les modifications apportées par des tiers en soumettant des demandes d'extraction à GitHub. Il est prévu que le code source du compilateur soit ouvert une fois la conception de l'architecture interne terminée.
Le référentiel comporte deux branches avec le code de la bibliothèque standard Mojo : la branche principale, synchronisée avec la dernière version stable de Mojo, et la branche nocturne, reflétant le processus de développement actuel et synchronisée avec les versions nocturnes de Mojo. La branche nocturne est encouragée à être utilisée par les participants qui souhaitent rejoindre le développement et partager leurs modifications. Dans le même temps, certains modules de la bibliothèque ne sont pas encore ouverts, mais après un certain temps, il est également prévu que le code fermé restant soit déplacé vers un référentiel ouvert. Le code des modules à développement rapide qui nécessitent une stabilisation supplémentaire, des modules pour lesquels une refactorisation est prévue et des modules qui nécessitent une révision et une refonte supplémentaires en raison de connexions avec des projets propriétaires restent fermés.
Simultanément, les versions 24.2 du SDK Mojo, permettant la compilation de projets en local, et 24.2 du moteur MAX, offrant une plateforme de développement pour l'apprentissage automatique, ont été publiées. Le SDK Mojo inclut les composants nécessaires au développement d'applications en langage Mojo : un compilateur, un environnement d'exécution, un interpréteur REPL interactif pour la compilation et l'exécution de programmes, un débogueur, une extension pour l'éditeur de code Visual Studio Code (VS Code) avec prise en charge de la saisie semi-automatique, du formatage et de la coloration syntaxique, ainsi qu'un module d'intégration avec Jupyter pour la création et l'exécution de notebooks Mojo. Le moteur MAX complète le SDK avec des outils de développement et de débogage d'applications utilisant des modèles d'apprentissage automatique de différents formats (TensorFlow, PyTorch, ONNX, etc.). Des versions du SDK Mojo et du moteur MAX sont disponibles pour la plateforme. Linux и macOS.
Certains des changements les plus notables de Mojo 24.2 incluent :
- Les structures et autres types nominaux peuvent désormais être implicitement mappés à des traits. Par exemple, toute structure pour laquelle la méthode __str__() est implémentée correspond implicitement au trait Stringable et peut être utilisée avec la fonction str().
- Les outils de compatibilité Python ont ajouté la prise en charge de la transmission d'arguments basés sur des mots clés aux fonctions Python. Par exemple, "plt.plot((5, 10), (10, 15), color="red")"
- Ajout de la prise en charge de la transmission d'un nombre variable d'arguments à une fonction, spécifié via l'affectation de mots clés. Par exemple, "print_nicely(a=7, y=8)".
- Le type DynamicVector a été renommé List et déplacé vers le module collections.list. Ajout de la possibilité de générer une liste basée sur un nombre arbitraire de valeurs, par exemple « var number = List[Int](1, 2, 3) ».
- Les paramètres nommés sep et end ont été ajoutés à la fonction print(), grâce à laquelle vous pouvez définir le séparateur et les valeurs de sortie finales. Par exemple, l'exécution de print("Hello", "Mojo", sep=", ", end="!!!\n") entraînera la sortie "prints Hello, Mojo!!!".
Le projet Mojo est dirigé par Chris Lattner, fondateur et architecte en chef du projet LLVM et créateur du langage de programmation Swift. La syntaxe de Mojo est basée sur le langage Python et le système de types est proche du C/C++. Le projet est présenté comme un langage à usage général qui étend les capacités de Python avec des capacités de programmation système, convient à un large éventail de tâches et combine la facilité d'utilisation pour le développement de la recherche et le prototypage rapide avec l'adéquation aux produits finaux hautes performances.
La simplicité est obtenue grâce à l'utilisation de la syntaxe Python familière, et le développement des produits finaux est facilité par la capacité de compiler en code machine, des mécanismes de sécurité de la mémoire et l'utilisation d'outils d'accélération matérielle. Pour obtenir des performances élevées, la parallélisation des calculs est prise en charge en utilisant toutes les ressources matérielles des systèmes hétérogènes disponibles dans le système, telles que les GPU, les accélérateurs spécialisés pour l'apprentissage automatique et les instructions de processeur vectoriel (SIMD). Pour les calculs intensifs, la parallélisation et l'utilisation de toutes les ressources informatiques permettent d'atteindre des performances supérieures aux applications C/C++.
Le langage prend en charge le typage statique et des fonctionnalités de bas niveau de sécurité de la mémoire qui rappellent Rust, telles que le suivi de la durée de vie des références et le vérificateur d'emprunt. Dans le même temps, le langage offre également des opportunités de travail de bas niveau, par exemple, il est possible d'accéder directement à la mémoire en mode non sécurisé à l'aide du type Pointer, d'appeler des instructions SIMD individuelles ou d'accéder à des extensions matérielles telles que TensorCores et AMX.
Mojo peut être utilisé aussi bien en mode interprétation à l'aide de JIT que pour la compilation en fichiers exécutables (AOT, en avance). Le compilateur intègre des technologies modernes pour l'optimisation automatique, la mise en cache et la compilation distribuée. Le code source du langage Mojo est converti en code intermédiaire de bas niveau MLIR (Multi-Level Intermediate Representation), développé par le projet LLVM. Le compilateur vous permet d'utiliser divers backends prenant en charge MLIR pour générer du code machine.
Source: opennet.ru
