Cours
Mojo est un langage de programmation qui combine la facilité d'utilisation et la flexibilité des langages dynamiques, comme Python, avec les performances et le contrôle des langages système, tels que C++ et Rust.
Il atteint de hautes performances grâce à des innovations côté compilateur, comme le cache intégré, le multithreading et la distribution cloud, tandis que l'autotuning et la métaprogammation permettent d'optimiser le code pour divers matériels.
Parmi les principales caractéristiques de Mojo :
- Une syntaxe proche de Python et un typage dynamique qui facilitent la prise en main pour les développeurs Python, Python étant le langage phare des développements IA/ML modernes.
- Avec Mojo, vous pouvez importer et utiliser n'importe quelle bibliothèque Python, garantissant une interopérabilité totale avec Python.
- Il prend en charge la compilation just-in-time (JIT) et ahead-of-time (AOT). Le compilateur Mojo applique des optimisations avancées et génère même du code pour GPU/TPU.
- Mojo offre un contrôle total sur l'agencement mémoire, la concurrence et d'autres détails bas niveau.
- En combinant les capacités des langages dynamiques et système, Mojo adopte un modèle de programmation unifié, à la fois accessible aux débutants et adaptable à de multiples cas d'usage sur accélérateurs.
Mojo est actuellement un langage incomplet et n'est pas disponible au public. La documentation s'adresse aux développeurs ayant de l'expérience en programmation système.
Cependant, à mesure que le langage évolue, l'objectif est de le rendre plus convivial et accessible aux débutants.
Bien démarrer avec Mojo Lang
Mojo n'est pas accessible publiquement, mais vous pouvez utiliser Mojo Playground en vous inscrivant aux produits Modular. Lors de l'inscription, assurez-vous d'avoir sélectionné Mojo dans les centres d'intérêt produits.

Image issue de Modular : commencez aujourd'hui
Après votre inscription, vous recevrez sous une heure un e-mail vous donnant accès à Mojo Playground. Mojo Playground est un environnement JupyterHub où les utilisateurs accèdent à la même bibliothèque standard Mojo. Chaque utilisateur dispose toutefois d'un espace privé pour écrire et enregistrer ses programmes Mojo.

Image de Mojo Playground
Lorsque Mojo deviendra open source et publiquement disponible, vous pourrez exécuter un programme Mojo depuis un terminal. Il peut être à la fois interprété ou compilé.
Vous pouvez enregistrer le fichier test.mojo ou test.🔥.
Oui, vous pouvez enregistrer votre fichier avec l'émoji feu. Comme vous pouvez le voir, nous avons créé un simple fichier Mojo test.🔥 et l'avons exécuté dans le terminal.
def main():
print("Hello Mojo!")
$ mojo test.🔥
Hello Mojo!
Mojo Lang et Python
Mojo est un sur-ensemble de Python et sa syntaxe est presque identique à celle de Python. Il introduit aussi de nouvelles fonctionnalités comme let, var, struct et fn pour définir des variables, des structures et des fonctions afin de gagner en performances.
Déclarations let et var
En écrivant du code Mojo, vous pouvez déclarer des variables spécifiques avec les mots-clés let et var. C'est similaire à Rust.
Le mot-clé let indique qu'une variable est immuable, tandis que var signifie qu'elle peut être modifiée. Cela améliore les performances en imposant des contraintes à la compilation.
Types struct
Mojo utilise le mot-clé struct similaire au class de Python. Les classes en Python sont dynamiques et lentes ; les types struct se rapprochent de C/C++ et Rust. Ils ont des dispositions mémoire fixes déterminées à la compilation, optimisées pour des performances proches du matériel.
Définitions fn
Utiliser def pour définir une fonction crée une fonction Python, avec tout le dynamisme et la flexibilité associés. Le mot-clé fn, en revanche, définit une fonction Mojo plus contrainte. Par défaut, les arguments y sont immuables et nécessitent un typage explicite ainsi que des déclarations de variables locales, entre autres.
Exemple de comparaison de syntaxe
Dans l'exemple, nous allons créer une fonction Mojo qui additionne deux arguments.
Pour exécuter la fonction Mojo :
- Vous devez spécifier un type pour les arguments de la fonction.
- Vous devez déclarer le type de retour avec une flèche.
fn add(x: Int, y: Int) -> Int:
return x + y
z = add(3, 5)
print(z)
>>> 8
En Python, nous pouvons définir des fonctions sans préciser explicitement le type des arguments ni de la sortie. Le processus est ainsi plus dynamique et direct. En comparaison toutefois, la fonction fn de Mojo est plus rapide que def.
def add(x, y):
return x + y
z = add(3, 5)
print(z)
>>> 8
Matplotlib dans Mojo
Mojo n'améliore pas seulement les performances ; il permet aussi d'importer n'importe quelle bibliothèque Python et de l'intégrer à des fonctions Mojo. En s'appuyant sur l'interpréteur CPython, Mojo prend en charge sans couture tous les modules Python disponibles aujourd'hui.
Dans l'exemple suivant, nous avons importé matplotlib.pyplot et visualisé une courbe. Pour des exemples avancés, consultez Mandelbrot in Mojo.
from PythonInterface import Python
let plt = Python.import_module("matplotlib.pyplot")
x = [1, 2, 3, 4]
y = [30, 20, 50, 60]
plt.plot(x, y)
plt.show()

Il est largement admis que Python est le langage le plus populaire pour l'IA/ML. Suivre le parcours Machine Learning Scientist with Python vous dotera des compétences Python nécessaires pour décrocher un poste de spécialiste en machine learning.
Programmer avec Mojo Lang
Mojo est un sur-ensemble de Python, comme TypeScript l'est de JavaScript. Au-delà de nouveaux mots-clés et fonctions, tout développeur Python peut le comprendre et l'utiliser pour construire des programmes.
Dans cette partie, nous allons passer en revue les aspects de Mojo qui le rendent performant et sûr.
Programmation bas niveau
Mojo est un langage de haut niveau qui donne accès à des primitives bas niveau via MLIR (Multi-Level Intermediate Representation), un format intermédiaire extensible. Cela permet d'implémenter des abstractions à coût nul tout en profitant d'optimisations puissantes côté compilateur.
Optimisation par dallage et autotuning
Mojo intègre un outil d'optimisation par dallage qui améliore la localité du cache et les schémas d'accès mémoire en divisant les calculs en petits blocs adaptés à la mémoire cache rapide.
Le module Autotune de Mojo propose des interfaces pour la compilation adaptative. Il vous aide à trouver les meilleurs paramètres pour votre matériel cible en ajustant automatiquement votre code.
Propriété et emprunt
Mojo utilise un système de propriété et d'emprunt pour gérer la mémoire, ce qui évite le recours à un ramasse-miettes et garantit des performances d'exécution régulières. Le compilateur analyse statiquement la durée de vie des variables et libère les données dès qu'elles ne sont plus utilisées.
Gestion manuelle de la mémoire
Mojo propose également une gestion manuelle via des pointeurs, à la manière de C++ et Rust.
Multiplication de matrices dans Mojo
Dans l'exemple Matrix multiplication, nous avons constaté qu'importer du code Python dans Mojo se traduisait par un gain de performance de 17,5 fois.
En ajoutant des types à l'implémentation Python, les performances ont encore été améliorées, atteignant un impressionnant 1866,8 fois.
Ils ont également utilisé des techniques comme la vectorisation, le parallélisme, le dallage et l'autotuning pour obtenir une accélération de 14050,5 fois. C'est remarquable. Même Julia et Rust n'offrent pas ce niveau d'optimisation.
Exemple de code Mojo Lang
Dans cet exemple automobile, nous allons créer une classe CAR avec la syntaxe Mojo.
- Nous allons créer une classe
CARavecstruct. - Initialiser une variable mutable avec
var. - Définir les types de variables. « speed » est un Float32 et « model » est un String. String n'est pas un type natif, il faut donc l'importer.
- Nous créerons deux fonctions d'initialisation similaires à Python mais avec
fn: l'une prenant uniquement la vitesse, l'autre la vitesse et le modèle. - Ensuite, créer un objet
CARavec une vitesse de 300. - Afficher le modèle de la voiture.
from String import String
struct CAR:
var speed: Float32
var model: String
fn __init__(inout self, x: Float32):
"""Car with only speed"""
self.speed = x
self.model = 'Base'
fn __init__(inout self, r: Float32, i: String):
"""Car with Speed and model"""
self.speed = r
self.model = i
my_car=CAR(300)
print(my_car.model)
Base
Comme vous pouvez le constater, le style de programmation et les fonctionnalités de Mojo ressemblent à ceux de Python. Mojo agit comme une extension de Python, tout en boostant les performances et la gestion mémoire. Avec Mojo, vous pouvez entraîner rapidement vos modèles, accélérer l'inférence (même sur CPU), analyser des jeux de données massifs en quelques secondes et simuler en temps réel.
Vous pouvez consulter tous les exemples de code sur la documentation Modular et les exécuter dans un notebook Jupyter sur le playground.
Mojo remplacera-t-il Python ?
Pour l'heure, il est difficile d'évaluer le potentiel de Mojo en tant que langage généraliste, car il est encore très jeune et certaines fonctionnalités manquent. Il pourrait toutefois surpasser Python pour les applications de machine learning et d'IA où la performance est cruciale.
Néanmoins, il est peu probable que Mojo remplace complètement le rôle de premier plan de Python en data science et dans d'autres domaines du développement logiciel dans un avenir proche.
Mojo est spécifiquement conçu pour les applications de machine learning et n'a pas vocation à couvrir d'autres domaines comme les backends web, l'automatisation de processus ou le web design. Même si ses capacités pourront évoluer, l'accent actuel est mis sur l'optimisation pour le machine learning.
Par ailleurs, il faut noter que l'écosystème de modules et bibliothèques de Mojo reste limité par rapport à Python, qui bénéficie d'une vaste communauté alimentant en continu de nouveaux outils pour l'IA et la data science. Mojo pourrait mettre des années à atteindre le niveau de maturité de Python.
Découvrez comment les modèles d'IA générative sont développés et comment ils vont transformer la société en suivant le cours Generative AI Concepts de DataCamp.
Conclusion
En conclusion, même si Mojo s'annonce comme un langage rapide, compatible Python et taillé pour l'IA/ML, il ne devrait pas remplacer totalement Python à court terme. Python profite d'un écosystème massif, d'une communauté très active et d'un ancrage profond en data science et ML. Au mieux, Mojo deviendra un langage complémentaire à Python, utilisé là où la vitesse est critique.
Dans ce tutoriel, nous avons passé en revue les fonctionnalités et la syntaxe du langage Mojo avec des exemples de code. Nous avons également comparé avec Python sous l'angle des performances, de la syntaxe, des fonctionnalités et de la compatibilité. Pour celles et ceux qui souhaitent maîtriser les fondamentaux de l'IA et du machine learning, nous recommandons le parcours Machine Learning Fundamentals with Python.
En tant que data scientist certifié, je suis passionné par l'utilisation des technologies de pointe pour créer des applications innovantes d'apprentissage automatique. Avec une solide expérience en reconnaissance vocale, en analyse de données et en reporting, en MLOps, en IA conversationnelle et en NLP, j'ai affiné mes compétences dans le développement de systèmes intelligents qui peuvent avoir un impact réel. En plus de mon expertise technique, je suis également un communicateur compétent, doué pour distiller des concepts complexes dans un langage clair et concis. En conséquence, je suis devenu un blogueur recherché dans le domaine de la science des données, partageant mes idées et mes expériences avec une communauté grandissante de professionnels des données. Actuellement, je me concentre sur la création et l'édition de contenu, en travaillant avec de grands modèles linguistiques pour développer un contenu puissant et attrayant qui peut aider les entreprises et les particuliers à tirer le meilleur parti de leurs données.

