« Propulsé par LLM, de C à Rust. Pas seulement une bonne idée, un génie désireux de s’échapper. »

Opinion Rust change les mondes. Le minerai de fer que nous extrayons pour alimenter l’ère industrielle a commencé en tant qu’atomes de fer dissous dans les océans il y a deux milliards d’années. Ensuite, la photosynthèse s’est produite, déversant de l’oxygène qui a rouillé ce fer hors de l’eau pour le transformer en minéraux solides que nous avons trouvé si utiles aujourd’hui. Il se passe plus ou moins la même chose avec Rust, le langage de programmation, alors qu’il devient le mécanisme de choix pour transformer le code C préhistorique en un matériau sécurisé et performant adapté à l’avenir. L’une des entités modernes jouant le rôle de la vieille bave bouillonnante est DARPA, l’Agence des projets de recherche avancée de défense, l’agence américaine qui s’inquiète de l’avenir de la technologie guerrière. Elle sait aussi bien que quiconque à quel point les logiciels faillibles peuvent gâcher l’harmonie martiale. Elle veut vraiment nettoyer le code C. À cette fin, elle a proposé d’utiliser l’apprentissage automatique pour analyser le matériel et le distribuer sous forme de tas de Rust. L’idée est judicieuse. Les outils de modèle de langage grand public (LLM) tels que ChatGPT et Gemini font un travail étonnamment bon tel qu’ils sont maintenant, donc un outil spécialisé formé et ajusté pour cette tâche est un domaine attrayant à explorer. Il n’y a toujours pas de véritable compréhension de la tendance des LLM à halluciner, mais cela n’est pas exactement inconnu chez les développeurs humains et tout le monde s’en sort. Comme le dit le vieil adage : Berkeley nous a donné Unix et l’acide, et ce n’est pas une coïncidence. Plus sobrement, en supposant que la technologie fonctionne, il y a une classe de problèmes avec lesquels elle ne pourra pas composer : que se passe-t-il si le code source n’est pas disponible ? On ne peut pas inventer cela lors d’un voyage en silicium. La bonne nouvelle, c’est qu’il n’est pas nécessaire de le faire. La décompilation est un processus qui consiste à prendre un binaire exécutable et à reconstruire une version du code source qui peut être examinée, modifiée et recompilée. C’est un processus d’investigation plutôt intense ; le code compilé est généralement dépourvu d’étiquettes lisibles par l’homme, de noms et de commentaires. Il faut beaucoup d’expérience et de temps pour rétro-ingénierer tout cela en un code décompilé brut. Ce n’est pas tellement un problème pour un outil analytique qui se soucie peu de ce que les choses sont appelées, mais des schémas dans lesquels elles tombent. Les choses sont facilitées par la façon dont les compilateurs produisent du code compilé. Ils construisent leur sortie à partir de blocs standard de manières standard, de la nourriture pour un modèle formé sur de grandes quantités de données ayant ces éléments en commun. Il est au moins intrigant de penser à un outil de traduction de C en Rust avec une interface de décompilation. C’est encore plus amusant de penser que la même idée fonctionnera pour du code écrit dans n’importe quel langage, avec la bonne formation. L’équivalence de la machine de Turing n’est pas seulement une bonne idée, c’est la loi.

Share the Post: