L’ABI par défaut est instable. Et c’est plutôt bien, une ABI stable par défaut étant plus un inconvénient qu’un avantage pour un langage avec des génériques monomorphisés comme le Rust ou le C++ (le C++ permet de pré-monomorphiser pour contourner le problème, mais c’est limité et il faut y avoir pensé).
Cependant, on peut volontairement passer à une ABI stable via repr(C)/extern "C" (par exemple). Je n’ai pas vérifié, mais RfL étant une surcouche d’une API écrite en C, ils en utilisent probablement beaucoup à l’interface. C’est possiblement un peu plus de travail, mais ce n’est pas fondamentalement différent des restrictions à l’ajout de champs dans une struct exposée en C : une API n’a une ABI stable que si elle a été pensée pour.
Il existe toutefois un risque sur l’ABI lié au fait que GCC et LLVM ne sont pas toujours parfaitement d’accord et que mixer des objets en provenance des deux est risqué, les différences ne générant généralement aucun avertissement au moment de la liaison.
[^] # Re: Dommage
Posté par Ltrlg . En réponse au lien Un mainteneur de Rust sur le Kernel jette l'éponge.. Évalué à 6.
L’ABI par défaut est instable. Et c’est plutôt bien, une ABI stable par défaut étant plus un inconvénient qu’un avantage pour un langage avec des génériques monomorphisés comme le Rust ou le C++ (le C++ permet de pré-monomorphiser pour contourner le problème, mais c’est limité et il faut y avoir pensé).
Cependant, on peut volontairement passer à une ABI stable via
repr(C)/extern "C"(par exemple). Je n’ai pas vérifié, mais RfL étant une surcouche d’une API écrite en C, ils en utilisent probablement beaucoup à l’interface. C’est possiblement un peu plus de travail, mais ce n’est pas fondamentalement différent des restrictions à l’ajout de champs dans unestructexposée en C : une API n’a une ABI stable que si elle a été pensée pour.Il existe toutefois un risque sur l’ABI lié au fait que GCC et LLVM ne sont pas toujours parfaitement d’accord et que mixer des objets en provenance des deux est risqué, les différences ne générant généralement aucun avertissement au moment de la liaison.