Mojo est-il le meilleur langage pour le développement de l’IA ?

Photo of author

By pierre



Dans le domaine de l’apprentissage automatique et de l’intelligence artificielle, Python s’est imposé comme le langage de programmation prédominant, bénéficiant de bibliothèques performantes telles que NumPy, TensorFlow et PyTorch. Cependant, une analyse rapide des dépôts GitHub de ces outils révèle qu’une grande partie de leur code source est en réalité écrite en C et C++.

Cette situation est due au fait que Python est intrinsèquement trop lent pour les exigences de l’IA. C’est là qu’intervient Mojo, un nouveau langage de programmation qui ambitionne de fusionner la rapidité de C/C++ avec l’élégance de Python.

Mojo : une présentation

Mojo est un langage de programmation récent dont la syntaxe rappelle celle de Python, tout en offrant la vitesse d’exécution de C. Il est spécifiquement conçu pour l’intelligence artificielle et le développement de systèmes, deux domaines qui requièrent des logiciels extrêmement performants.

Il exploite le paradigme SIMD (Single Instruction, Multiple Data) pour maximiser le parallélisme. De plus, il utilise une compilation juste-à-temps et une gestion optimisée de la mémoire.

Mojo n’est pas un langage entièrement nouveau; il s’agit plutôt d’un sur-ensemble de Python. En d’autres termes, il englobe toutes les fonctionnalités de Python, tout en y ajoutant des capacités supplémentaires. Il fonctionne de manière similaire à TypeScript qui étend JavaScript. Cette approche est avantageuse, car les développeurs familiers avec Python peuvent rapidement adopter Mojo.

Le développement de Mojo est mené par Modular, une entreprise fondée par Chris Lattner, le créateur de LLVM et du langage de programmation Swift.

En conclusion, Mojo est un nouveau langage de programmation conçu pour offrir une syntaxe similaire à Python, tout en étant aussi rapide que C/C++. Il est destiné à être utilisé dans le développement de l’IA et la programmation système. Bien que le projet soit encore en développement, il se révèle extrêmement prometteur, comme nous l’expliquerons dans la section suivante.

Avantages de Mojo par rapport aux autres langages

Mojo a suscité un grand intérêt, même s’il n’est pas encore accessible au public. Cette popularité est due à ses nombreux avantages par rapport à d’autres langages de programmation, notamment pour l’exécution de tâches d’apprentissage automatique et la création de logiciels systèmes. Nous allons maintenant explorer ces avantages.

#1. Support natif pour l’IA et l’apprentissage automatique

Mojo est conçu pour le développement d’applications d’intelligence artificielle. Par conséquent, il propose des fonctions et des modules dans sa bibliothèque standard pour construire des réseaux neuronaux, réaliser des tâches de vision par ordinateur et préparer des données.

La plupart des langages généralistes, tels que Python, nécessitent des bibliothèques supplémentaires pour réaliser ces tâches, tandis que Mojo les prend en charge nativement.

#2. Syntaxe simplifiée et abstractions de haut niveau

Pour développer des logiciels rapides et efficaces, nous aurions habituellement recours à des langages tels que C, C++ et Rust. Bien que ces langages soient performants, ils sont souvent plus difficiles à maîtriser et à utiliser. Cela est dû à la nécessité de travailler à un niveau plus bas pour avoir un contrôle accru.

Cependant, Mojo offre des abstractions de niveau supérieur comparables à Python, ainsi qu’une syntaxe simple. Cela facilite son utilisation par rapport à d’autres langages ayant des performances similaires.

#3. Intégration avec les frameworks et bibliothèques d’IA populaires

Comme mentionné précédemment, Mojo est un sur-ensemble de Python. Ainsi, il s’intègre facilement avec des bibliothèques existantes telles que NumPy et PyTorch. Cela signifie que, par défaut, Mojo bénéficie d’un écosystème aussi vaste que celui de Python.

#4. Capacités efficaces de traitement et de manipulation de données

Mojo est conçu pour manipuler efficacement plusieurs valeurs en parallèle. Cette caractéristique est particulièrement utile pour l’algèbre linéaire, qui est au cœur de l’apprentissage automatique. De plus, grâce à sa compilation juste-à-temps, Mojo optimise le bytecode pour une meilleure vitesse d’exécution. Cela rend le traitement des données et les tâches d’apprentissage automatique efficaces dans Mojo.

#5. Évolutivité et support du calcul parallèle

Mojo prend en charge le paradigme Single Instruction – Multiple Data du calcul parallèle, ce qui le rend plus rapide par défaut. Il surpasse également les bibliothèques Python telles que NumPy.

Éléments fondamentaux de Mojo

Dans cette partie, nous examinerons la manière de créer des programmes avec Mojo. Étant donné que Mojo se veut un sur-ensemble de Python, tout comme TypeScript est un sur-ensemble de JavaScript, tout code Python valide est également un code Mojo valide, mais l’inverse n’est pas nécessairement vrai.

Mojo est encore en développement et certaines fonctionnalités de Python ne sont pas encore supportées, comme les classes. De plus, un compilateur n’est pas encore disponible, mais il est possible d’utiliser Mojo dans un environnement de type notebook. Toutefois, il est nécessaire de créer un compte sur leur site web.

Il est encore prématuré de proposer un tutoriel complet sur le langage, car certaines fonctionnalités sont en cours d’ajout et ne sont pas encore toutes prises en charge. Nous allons donc nous concentrer sur les ajouts clés que Mojo apporte par rapport à Python.

Syntaxe et grammaire

Comme Mojo est un sur-ensemble de Python, leurs syntaxes sont très similaires. Comme Python, un programme est une succession d’instructions. Ces instructions peuvent être regroupées en blocs au sein de fonctions, de boucles ou de conditions. Les instructions à l’intérieur d’un bloc sont indentées. Voici un exemple de code écrit en Mojo :

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Ce code est identique à celui que l’on écrirait en Python. Cependant, Mojo offre des fonctionnalités supplémentaires, que nous allons voir dans les sections suivantes.

Déclarations de variables

Mojo offre deux manières supplémentaires de déclarer des variables : avec les mots-clés `let` ou `var`. Le mot-clé `let` déclare une variable immuable. Une fois initialisée, sa valeur ne peut plus être modifiée. En revanche, les variables déclarées avec `var` peuvent être réassignées, car elles sont modifiables.

Le principal avantage des variables déclarées avec `let` ou `var` est qu’elles prennent en charge la spécification de type. L’exemple suivant illustre la façon de déclarer des variables dans Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Structures

En plus des déclarations de variables, Mojo prend en charge les structures. Une structure peut être perçue comme une classe plus rigide. Contrairement aux classes, il est impossible d’ajouter, de supprimer ou de modifier des méthodes à l’exécution, et tous les membres doivent être déclarés avec `var` ou `let`. Cette structure plus rigide permet à Mojo de gérer la mémoire et les performances plus efficacement. Voici un exemple de structure :

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Les fonctions

Dans l’exemple de structure ci-dessus, vous avez peut-être remarqué que nous avons déclaré la méthode `__init__` avec le mot-clé `fn` plutôt que `def`. En effet, dans Mojo, vous pouvez déclarer des fonctions avec `fn` et `def`. Une fonction déclarée avec `fn` est plus stricte que son équivalent avec `def`.

Plus précisément, une fonction déclarée avec `fn` a des arguments immuables par défaut. De plus, il est nécessaire de préciser le type des arguments et la valeur de retour de la fonction. Toutes les variables locales doivent être déclarées avant d’être utilisées.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Si la fonction génère une exception, cela doit être explicitement indiqué lors de la déclaration de la fonction avec le mot-clé `raises`. Par ailleurs, Mojo n’utilise pas la classe `Exception` comme Python, mais plutôt la classe `Error`.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Surcharge

Mojo prend également en charge la surcharge des opérateurs en fonction des différents types de données. Cela permet d’appliquer le principe de polymorphisme de la programmation orientée objet.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Comment Mojo est utilisé dans le développement de l’IA

Mojo est livré avec des bibliothèques dédiées à la création de modèles d’apprentissage automatique. Ces bibliothèques permettent notamment de construire des réseaux neuronaux. De plus, il est possible de réaliser des tâches telles que le traitement du langage naturel et la vision par ordinateur.

Bien que le langage soit encore en développement et que son écosystème soit pratiquement inexistant, on peut s’attendre à ce que Mojo offre de nombreuses fonctionnalités pour des tâches comme le traitement de données, la création de modèles, l’optimisation, la gestion de modèles et leur surveillance.

Mojo est-il l’avenir du développement de l’IA ?

Il est difficile de prédire l’évolution et l’adoption des technologies. La plupart des prédictions sont erronées, mais cela n’empêche pas de tenter une analyse. Pour évaluer si Mojo peut potentiellement remplacer Python, examinons ses avantages et ses inconvénients :

Avantages

  • Il est très rapide et conçu pour exploiter le parallélisme, ce qui est essentiel pour l’apprentissage automatique, car l’entraînement des modèles peut prendre beaucoup de temps.
  • En tant que sur-ensemble de Python, il est plus facile à apprendre et sa courbe d’apprentissage est plus douce. Cela facilite son adoption.
  • Il réduit les risques d’erreurs en production, car des erreurs comme les fautes de frappe dans les noms de variables ou les incompatibilités de type sont détectées à la compilation. Cela le rend préférable.

Inconvénients

  • Il est actuellement incomplet. Cependant, l’équipe de Modular travaille activement à la publication du langage et de son compilateur.
  • Bien qu’il simplifie le travail des créateurs de frameworks, il pourrait ne pas apporter d’avantages significatifs aux utilisateurs de ces frameworks, qui emploient déjà les bibliothèques d’apprentissage automatique de Python.
  • Il ne possède pas encore un large écosystème d’outils et de ressources d’apprentissage. Bien qu’il soit possible d’utiliser les bibliothèques Python dans Mojo, il est également possible de les utiliser directement en Python. Pour que Mojo soit plus avantageux que Python, il a besoin de bibliothèques exploitant pleinement sa vitesse.

Conclusion

Si l’on se fie à l’engouement actuel, Mojo est bien parti pour devenir un langage d’IA populaire. Sa vitesse à elle seule est un argument suffisant pour inciter les développeurs à l’adopter. Sa simplicité est également un avantage. Cependant, comme TypeScript n’a pas complètement remplacé JavaScript, il est probable que Mojo ne remplacera pas entièrement Python.

Mojo est un langage à surveiller de près, en attendant sa maturité.

Pour aller plus loin, consultez l’article sur Type vs. Interface dans TypeScript.