GoSuda

Langage Moderne de l'ère de l'AI

By Rabbit Princess
views ...

Langages modernes

Un langage moderne désigne un langage qui offre une productivité, une stabilité, une sécurité et une maintenabilité supérieures par rapport aux langages du passé. Ces langages intègrent activement les techniques et concepts les plus récents, fournissant aux développeurs des outils de développement plus efficaces et plus sûrs. Parmi les langages modernes représentatifs figurent Java, Rust, Python, TypeScript, etc., lesquels possèdent les caractéristiques suivantes.

1. Conception orientée objet ( OOP )

La plupart des langages modernes sont conçus sur la base des concepts orientés objet. L'orientation objet prend en charge des principes tels que l'encapsulation, l'héritage et le polymorphisme, et rend la structure du programme claire et flexible en gérant les systèmes complexes divisés en unités plus petites d'objets. Ceci est particulièrement efficace pour contrôler les coûts de développement et les efforts lors du développement de logiciels à grande échelle, et pour réduire les problèmes pouvant survenir lors de la maintenance.

2. Sucre syntaxique et expressions

Les langages modernes offrent divers sucres syntaxiques et une syntaxe basée sur des expressions pour améliorer la lisibilité du code et la productivité du développement. Des fonctionnalités telles que l'opérateur ternaire, les expressions lambda et le pattern matching réduisent le code boilerplate, rendent le code prévisible et améliorent la productivité du développeur.

3. Système de modules

Les langages modernes permettent de gérer les programmes en les séparant en plusieurs unités via un système de modules. Cela facilite la réutilisation du code et la gestion des dépendances, et rend la maintenance aisée même lorsque la taille du projet augmente. Des exemples représentatifs incluent Maven/Gradle pour Java, Cargo pour Rust, npm/yarn pour TypeScript, etc.

4. Langage intermédiaire et machine virtuelle

Les langages modernes introduisent des langages intermédiaires et des machines virtuelles pour l'indépendance de la plateforme, l'optimisation des performances et la sécurité. Des exemples représentatifs incluent JVM, LLVM, WASM, GraalVM, etc.

Le développement à l'ère de l'IA et les limites des langages modernes

Les langages modernes sont nés sous la prémisse que les humains écrivent la majeure partie du code. Naturellement, l'objectif des langages modernes est de réduire les tâches répétitives, d'accroître la productivité et d'implémenter efficacement de grands logiciels grâce à des structures permettant la collaboration entre développeurs. Cependant, à l'ère de l'IA, cette prémisse s'effondre progressivement. Des outils basés sur l'IA tels que Copilot, Cody, etc., automatisent une grande partie de l'écriture de code, et la quantité de code qu'un seul développeur peut produire augmente de manière exponentielle. En conséquence, les caractéristiques des langages modernes qui étaient perçues comme des avantages par le passé se transforment progressivement en inconvénients obsolètes.

Conception orientée objet

L'IA peut analyser rapidement et précisément une structure où toutes les informations sont spécifiées au sein d'une seule fonction ou d'un seul module. En revanche, à mesure que le contexte augmente, la plage d'inférence s'étend, ce qui réduit la productivité et la précision de l'IA. Le code écrit en OOP disperse la logique sur plusieurs objets plutôt que de la gérer en un seul endroit, ce qui, par conséquent, exige plus de contexte pour l'IA. Considérons le code ci-dessous.

 1public class AnimalHandler {
 2    public void handle(Animal animal) {
 3        animal.speak();
 4    }
 5}
 6
 7public class Main {
 8    public static void main(String[] args) {
 9        AnimalHandler handler = new AnimalHandler();
10
11        Animal a1 = new Dog();
12        Animal a2 = new Cat();
13        Animal a3 = new Horse();
14
15        handler.handle(a1);
16        handler.handle(a2);
17        handler.handle(a3);
18    }
19}

Dans le code ci-dessus, l'IA doit répéter les inférences suivantes pour savoir ce que la méthode speak() fera réellement :

  1. De quelle classe concrète l'animal est-il une instance ?
  2. Où la méthode speak() surchargée dans cette classe est-elle définie ?
  3. Où se trouvent les définitions des classes Dog et Cat, et quel est leur comportement interne ?
  4. Y a-t-il une possibilité que les classes Dog et Cat soient surchargées dans d'autres classes ?

Ces informations ne sont pas rassemblées dans un seul fichier ou une seule fonction, mais ne peuvent être comprises qu'en suivant les relations entre les fichiers de classe et la structure d'héritage. De plus, les éléments décidés au runtime, tels que la reflection ou le dynamic loading, sont comme une boîte noire pour l'IA, rendant l'analyse pratiquement impossible.

Sucre syntaxique et expressions

L'IA préfère les actions explicites aux actions implicites, et préfère combiner des structures simples pour former une seule réponse correcte plutôt que d'utiliser des structures complexes. En revanche, le sucre syntaxique, tout en permettant diverses expressions, a souvent un comportement interne identique ou similaire. L'IA doit apprendre la signification de ces diverses expressions une par une, et il peut devenir difficile de déterminer la priorité quant à la syntaxe à recommander dans une situation spécifique.

Langage intermédiaire et machine virtuelle

L'IA apprend principalement à partir du code source. En revanche, le langage intermédiaire (bytecode) perd la signification des noms de variables, etc., pendant le processus de compilation et doit être réinterprété par la machine virtuelle au moment de l'exécution. C'est une tâche très difficile pour l'IA à comprendre ou à convertir. Par exemple, une conversion de TypeScript vers Go est possible pour l'IA, mais convertir le bytecode du V8 engine en bytecode de la JVM ou en langage machine est pratiquement impossible.

Le véritable langage moderne à l'ère de l'IA

À travers le contenu ci-dessus, nous pouvons constater que les caractéristiques des langages modernes sont en réalité des éléments obsolètes qui ne sont pas adaptés à l'ère de l'IA. Alors, quel langage pourrait être le langage moderne le plus adapté à l'ère de l'IA ? Un indice peut être trouvé dans les éléments que les langages modernes du passé rejetaient. Le langage moderne de l'ère de l'IA doit :

  1. Avoir une syntaxe explicite et un flux naturel.
  2. S'éloigner des structures OOP excessives pour avoir une structure plate et simple.
  3. Créer diverses fonctionnalités en utilisant uniquement un ensemble limité de mots-clés de base, plutôt que du sucre syntaxique inutile ou des motifs implicites.
  4. Avoir un système de build simple et prévisible, plutôt qu'un système de build complexe.

Le langage qui correspond le mieux à ces critères est Golang. Le langage Go a été conçu pour permettre l'implémentation de la plupart des fonctionnalités pratiques avec un minimum de mots-clés essentiels et de simples combinaisons syntaxiques, et il exclut strictement l'abstraction inutile et les actions implicites. C'est une structure avantageuse non seulement pour les développeurs, mais aussi pour l'IA pour interpréter et générer du code. Ainsi, les caractéristiques de Go, qui visent une structure prévisible et plate, un flux explicite et une syntaxe cohérente, s'adaptent mieux à un environnement de développement où l'IA participe activement, contrairement aux langages modernes existants conçus pour les développeurs humains. La philosophie de conception conservatrice de Go, autrefois considérée comme obsolète, s'avère être le choix le plus avancé à l'ère de l'IA.