Accueil / Technologie / Valen : un développeur fait dialoguer les génériques de Rust avec un autre langage

Valen : un développeur fait dialoguer les génériques de Rust avec un autre langage

Valen : un développeur fait dialoguer les génériques de Rust avec un autre langage

Faire communiquer deux langages de programmation compilés passe presque toujours par le même intermédiaire : l’interface binaire du C, dite C ABI. Evan Ovadia, ancien ingénieur de Google et contributeur au langage Mojo, vient de montrer qu’on pouvait s’en passer, au moins en partie. Son expérience permet d’échanger des types et des fonctions génériques entre Rust et un autre langage, dans les deux sens, ce que le C ABI est incapable de faire.

Le problème des génériques

Aujourd’hui, pour utiliser une bibliothèque Rust depuis un autre langage, il faut l’exposer « à la manière du C » : fonctions déclarées extern « C », types au format repr(C), puis appel via une interface de fonctions étrangères (FFI). Le souci, c’est que le C ne connaît pas les génériques, ces types laissés en attente et précisés plus tard. Or Rust en fait un usage intensif. Résultat : les bibliothèques les plus riches doivent être réduites à des types primitifs pour franchir la frontière, et perdent une bonne partie de leur intérêt.

Evan Ovadia s’est heurté à ce mur en créant son propre langage, Valen, successeur d’un projet antérieur baptisé Vale, qu’il conçoit comme une variante plus rapide et plus agréable de Rust. Repartir de zéro l’aurait privé de ses bibliothèques Rust favorites, à commencer par wgpu pour le graphisme.

Deux compilateurs qui se passent le relais

Sa solution tient en deux étapes. D’abord, embarquer le compilateur Rust directement dans celui de Valen, ce que Rust permet déjà via son composant rustc_driver. Ensuite, modifier Rust pour que, lorsqu’il rencontre un type propre à Valen, il confie cette partie au compilateur Valen et attende le résultat. Les deux outils collaborent ainsi au lieu de rester chacun dans son coin.

Le correctif ne compte qu’une centaine de lignes, mais son auteur reconnaît qu’il s’agit de « l’option nucléaire » : il suppose que Rust s’appuie sur LLVM pour générer le code machine, ce qui n’est pas toujours le cas, et n’a aucune chance d’être intégré tel quel au projet officiel. Il a baptisé ce travail « Golden Spike », en référence au dernier crampon doré qui acheva le premier chemin de fer transcontinental américain en 1869.

Sur Reddit et Lobste.rs, les développeurs ont salué l’audace tout en discutant des limites, certains doutant que le système de types de Rust soit la meilleure base pour un standard d’interopérabilité. L’enjeu dépasse pourtant Valen : si l’approche mûrit, de nouveaux langages pourraient naître en s’appuyant directement sur l’immense catalogue de bibliothèques Rust, sans sacrifier leurs fonctionnalités avancées.

À lire aussi : Google a intégré Rust dans le modem du Pixel 10 pour sécuriser le code existant

Image : Slashme, CC0, via Wikimedia Commons

Étiquetté :

Répondre