Il y a bien une table de liaison dynamique avec SmartEiffel. Mais elle est restreinte aux seul cas possibles par l'analyse du code.
Si jamais le compilo trouve qu'il n'y a qu'un seul cas possible il supprime le mécanisme et on se retrouve avec une methode aussi efficace quand dans le cas d'un fonction non virtuel en C++. Avec en différence que l'optimisation est réalisée par le compilateur systématiquement.
Ca c'est pour l'héritage simple. Pour l'héritage multiple c'est encore mieux que cela. Il n'est en effet pas possible d'utiliser dans tous les cas une table pour résoudre le polymorphisme dans le cas multiple, en particulier si il y a des cycles dans les parents de la classes. Dans ce cas il faudrait faire un parcour du graphe. Solution très couteuse (c'est une des raisons pour laquelle pas mal de langague ne supportent pas l'héritage multiple). Mais il existe une solution. En analysant le code et en calculant tous les cas possible on peut quand même créer une table. D'ou un héritage multiple au même cout à l'execution que le simple.
Je rappelle qu'il est impossible du supprimer tout le temps la table. En effet l'héritage bien utilisé remplace des if dans le code. Dans ce cas il n'y a pas de surcout a utiliser le polymorphisme cela correspond juste au if qui a été supprimé.
[^] # Re: Supprimer la VFT
Posté par Joris R (site web personnel, Mastodon) . En réponse à la dépêche 23 mars: Conférence au LORIA sur Lisaac, un nouveau langage. Évalué à 6.
Il y a bien une table de liaison dynamique avec SmartEiffel. Mais elle est restreinte aux seul cas possibles par l'analyse du code.
Si jamais le compilo trouve qu'il n'y a qu'un seul cas possible il supprime le mécanisme et on se retrouve avec une methode aussi efficace quand dans le cas d'un fonction non virtuel en C++. Avec en différence que l'optimisation est réalisée par le compilateur systématiquement.
Ca c'est pour l'héritage simple. Pour l'héritage multiple c'est encore mieux que cela. Il n'est en effet pas possible d'utiliser dans tous les cas une table pour résoudre le polymorphisme dans le cas multiple, en particulier si il y a des cycles dans les parents de la classes. Dans ce cas il faudrait faire un parcour du graphe. Solution très couteuse (c'est une des raisons pour laquelle pas mal de langague ne supportent pas l'héritage multiple). Mais il existe une solution. En analysant le code et en calculant tous les cas possible on peut quand même créer une table. D'ou un héritage multiple au même cout à l'execution que le simple.
Je rappelle qu'il est impossible du supprimer tout le temps la table. En effet l'héritage bien utilisé remplace des if dans le code. Dans ce cas il n'y a pas de surcout a utiliser le polymorphisme cela correspond juste au if qui a été supprimé.
J'espere avoir pas dit de connerie