• [^] # Re: Donc pour résumer...

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 0.

    Je ne vois pas bien l'intérêt d'une ABI universelle standardisée. ça n'est d'ailleurs pas le cas pour le C.

    L'ABI comprend par exemple:
    - La façon dont les noms de fonctions/méthodes sont traduits en noms de symboles (mangling, en C++), et les cas dans lesquels il peut y avoir des conflits,
    - La façon dont les paramètres d'une fonction sont passés,
    - Les règles d'alignement des membres d'une structure.

    Si on peut arriver à utiliser le même mangling partout pour le 1er point, les autres sont très liés à l'architecture matérielle et aux possibilités du CPU utilisé. Les paramètres d'une fonction peuvent être passés dans des registres ou sur la pile. En commençant par celui de droite ou celui de gauche. En faisant éventuellement les choses différemment selon la taille des paramètres, ou même selon leur type (par exemple sur un motorola 68000, il y a des registrer pour stocker des entiers, et d'autres pour stocker des pointeurs).

    Donc, on ne peut pas demander mieux que d'avoir une ABI par famille de CPUs. ARM en fournit une, avec des variantes en fonction de l'OS utilisé. Sur x86, il n'y en a pas et c'est laissé au choix de l'OS et du compilateur.

    En fait, les problèmes arrivent surtout quand il y a plusieurs ABI "plus ou moins" compatibles. C'est le cas en C++ sous Windows, par exemple, ou on peut lier des dll compilées avec différents compilateurs, et tout marchera bien, sauf les exceptions.