Par quel miracle Lisaac serait-il capable d'inliner le code de la liste ou du tableau dans mes calculs alors qu'il n'y a aucun moyen de savoir quelle est la structure de données choisie par l'utilisateur avant le runtime ?
Simple : il inline les deux cas ;-)
Là j'avoue que je ne comprend pas ce que tu veux dire. Ce n'est pas du tout mon domaine mais pour moi la liaison dynamique c'est le contraire de l'inlining...
Justement, les compilateurs objets classiques utilisent une table de pointeurs en mémoire pour savoir sur quel fonction se brancher.
Lisaac transforme cela en appels statiques, en utilisant une recherche dichotomique.
Non, j'ai trouvé des slides, et les slides ça ne sert à rien sans la présentation qui va avec...
Exact, je vais donc le faire.
Slide 127 : Floppy et hard_disk hérite de drive et possède tout deux une fonction read. Liaison dynamique sur cette fonction.
Slide129 : les compilo classiques utilisent une table de fonction
Slide 130 : Lisac fait de l'analyse de flot. il analyse la géométrie du graphe du code pour prévoir les types.
Dans cette exemple, r peut être de type A, B , C ou D.
Avec une solution syntaxique type SmartEiffel, on supprime la liaison dynamique (la table de fonction), en faisant une recherche, pour savoir si, à l'exécution du code, r est de type A, B, C ou D.
C'est un bête switch case, mais on a déjà supprimé la liaison dynamique, donc on peut inliner.
Lisaac va plus loin :
Dans la branche où on évalue r.method, on voit que r ne peut être que de type A ou B (les branches correspondent à un test).
Donc, on fera un test sur A ou B seulement (Slide 131,132).
Slide 133 : on associe le type d'un objet en nombre, ce qui permet de faire des recherches dichotomique ayant l'avantage d'être en nlog(n) (si je me souviens bien)
Slide 134 : on inline... Et on réduit le résultat. ici on présente un cas extrême.
Slide 135 : dans l'ancienne version du compilateur (la nouvelle a fait de nettes progrès), on avait 91% d'appels monomorphiques natifs (sur le compilateur), plus 4 % d'appels polymorphique transformés en monomorphiques.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: On gagne en abstraction
Posté par Ontologia (site web personnel) . En réponse au journal Language naturel 2 python. Évalué à 4.
Simple : il inline les deux cas ;-)
Là j'avoue que je ne comprend pas ce que tu veux dire. Ce n'est pas du tout mon domaine mais pour moi la liaison dynamique c'est le contraire de l'inlining...
Justement, les compilateurs objets classiques utilisent une table de pointeurs en mémoire pour savoir sur quel fonction se brancher.
Lisaac transforme cela en appels statiques, en utilisant une recherche dichotomique.
Non, j'ai trouvé des slides, et les slides ça ne sert à rien sans la présentation qui va avec...
Exact, je vais donc le faire.
Slide 127 : Floppy et hard_disk hérite de drive et possède tout deux une fonction read. Liaison dynamique sur cette fonction.
Slide129 : les compilo classiques utilisent une table de fonction
Slide 130 : Lisac fait de l'analyse de flot. il analyse la géométrie du graphe du code pour prévoir les types.
Dans cette exemple, r peut être de type A, B , C ou D.
Avec une solution syntaxique type SmartEiffel, on supprime la liaison dynamique (la table de fonction), en faisant une recherche, pour savoir si, à l'exécution du code, r est de type A, B, C ou D.
C'est un bête switch case, mais on a déjà supprimé la liaison dynamique, donc on peut inliner.
Lisaac va plus loin :
Dans la branche où on évalue r.method, on voit que r ne peut être que de type A ou B (les branches correspondent à un test).
Donc, on fera un test sur A ou B seulement (Slide 131,132).
Slide 133 : on associe le type d'un objet en nombre, ce qui permet de faire des recherches dichotomique ayant l'avantage d'être en nlog(n) (si je me souviens bien)
Slide 134 : on inline... Et on réduit le résultat. ici on présente un cas extrême.
Slide 135 : dans l'ancienne version du compilateur (la nouvelle a fait de nettes progrès), on avait 91% d'appels monomorphiques natifs (sur le compilateur), plus 4 % d'appels polymorphique transformés en monomorphiques.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker