Les chercheurs en IA de Facebook annoncent avoir mis au point un transcompilateur neural, autrement dit une intelligence artificielle capable de convertir un code source écrit dans un langage donné en un code source identique mais écrit dans un autre langage informatique.

Réécrire un code source dans un autre langage est une tâche des plus complexes, car chaque langage a sa propre syntaxe, souvent très particulière, mais s’appuie aussi sur ses propres bibliothèques de fonctions et dépend de différentes APIs en fonction des plateformes.

Pourtant, le besoin existe depuis la nuit des temps informatiques. Les langages informatiques sont vivants. Ils sont parfois relativement incompatibles d’une version à l’autre (Python 2 vs Python 3) mais surtout certains passent de mode et tombent plus ou moins dans l’oubli. Nombre de grandes banques ont dépensé des fortunes pour convertir du code Cobol en un langage plus moderne. Bien des entreprises cherchent aujourd’hui à convertir en C# leurs programmes écrits en VB. Aujourd’hui bien des sociétés d’ingénierie logicielle rêveraient d’avoir un traducteur de codes C++ en code Rust, histoire de moderniser leurs systèmes d’exploitation sans avoir à les réécrire intégralement.

Les transcodeurs permettant de convertir un langage en un autre ne sont pas une nouveauté. Mais jusqu’ici, ils étaient relativement peu intelligents et s’appuyaient sur des règles de conversion relativement simples. Résultat, les codes sources résultants d’une telle traduction sont très rarement directement exploitables et compilables et demandent un important effort manuel de travail sur le code résultant pour le rendre exécutable.

Les chercheurs en IA de Facebook ont décidé de prendre une approche très différente et d’appliquer leurs recherches en matière de traduction linguistique via des réseaux de neurones (NMT) aux langages de programmation.
Ils se sont appuyés sur les codes open source disponibles sur GitHub pour entraîner leur modèle à traduire les codes sources écrits en C++, Java et Python. Leur TransCoder AI, qui s’appuie sur une traduction machine non supervisée, peut convertir le code source de n’importe lequel des ces trois langages dans les deux autres langages avec une précision et une efficacité bien supérieures aux systèmes actuels si l’on en croit les chercheurs.

Exemple de conversion de codes réalisée par TransCoder AI

Les résultats sont pourtant loin d’être encore parfaits si l’on en croit les taux d’exactitude mesurés par les chercheurs :
* 91,6% dans la conversion de Java en C++
* 74,8% dans la conversion de C++ en Java
* 68,7% dans la conversion de Java en Python
* 67,2% dans la conversion de C++ en Python
* 57,8% dans la conversion de Python en C++
* 56,1% dans la conversion de Python en Java

Exemples d’erreur de traduction.

Au travers de cette expérience, les chercheurs ont ainsi démontré que des intelligences artificielles de traduction automatique non supervisées pouvaient effectivement être appliquées aux langages informatiques afin de créer des transcompilateurs pour n’importe quel langage de programmation. Leur TransCoder AI n’exige aucune connaissance préalable du langage source et même du langage de destination même s’il faut dans la pratique le maîtriser si l’on veut ensuite l’enrichir en fonctionnalités.

En l’état, TransCoder AI ne reconnaît et ne connaît que trois langages mais l’IA pourrait aisément être entraînée à d’autres langages et étendre ainsi sa panoplie. De même, cette version de recherche reste expérimentale et imparfaite. Le modèle demande à être affiné pour une utilisation commerciale et enrichi soit de contraintes pour s’assurer que les fonctions générées sont toujours syntaxiquement correctes soit d’une IA de correction itérative des erreurs.
Selon les chercheurs une telle IA pourrait aussi être utilisée pour améliorer la performance des codes sources qui lui sont soumis. En attendant, ils ont publié leur modèle et leurs codes sources en open source.


Source : Unsupervised Translation of Programming Languages