• [^] # Re: Supprimer la VFT

    Posté par . En réponse à la dépêche 23 mars: Conférence au LORIA sur Lisaac, un nouveau langage. Évalué à 4.

    1/Dans le monde à classe (Eiffel, donc), on effectue une analyse syntaxique (ou une analyse de flot) du code pour créer des procédure contextualisant le polymorphisme.
    C'est à dire que le compilateur SmartEiffel va produire en C
    BMP_affiche_toi()
    JPG_affiche_toi()

    et il colle un test du genre si besoin :
    if (image->type == BMP) {
    affiche_toi_BMP();
    } else { // C'est du JPEG
    affiche_toi_JPEG();
    };


    Je pinaille mais:
    1. Ce n'est pas Eiffel qui fonctionne comme cela, mais SmartEiffel. Eiffel est un langage et n'impose rien pour l'implémentation du compilateur.
    2. Je crois (j'espère!) que ce n'est pas comme ça : comme le compilo connait toutes les classes au moment de la compil, il fait un:
    switch (image->type)
    {
    case BMP: affiche_toi_BMP(); break;
    case JPEG: afficheçtoi_JPG(); break;
    default: raise_exception (...);
    }

    et il se trouve que ce code n'est pas moins rapide (voire même plus rapide) que de passer par une VFT. Avec un if/else, le nombre de tests pourrait devenir bien plus important (et donc pénalisant par rapport à l'usage d'une VFT).
    Mais ce n'est bien sûr possible que parce que *tous* les types sont connus au moment de la compilation. D'où l'impossibilité d'utiliser les DSO avec SmartEiffel.