Il semble que Partial Evaluation soit appliqué à Java. Cette idée est si vous avez une fonction générale F (A, B) ayant deux paramètres A et B, et (supposons juste) chaque fois qu'elle est appelée, A est toujours la même chose. Ensuite vous pourriez transformer F (A, B) en une nouvelle fonction FA (B) qui ne prend qu'un paramètre, B. Cette fonction devrait être plus rapide car elle n'a pas à traiter l'information dans A - elle la "connaît" déjà. Il peut aussi être plus petit, pour la même raison.
Ceci est étroitement lié à la génération de code.
Lors de la génération de code, vous écrivez un générateur de code G pour prendre l'entrée A et écrire la petite fonction spécialisée rapide FA. G(A) -> FA
. En spécialisation, vous avez besoin de trois choses, le programme général F, le spécialiste S, et l'entrée A: S(F,A) -> FA
.
Je pense que c'est un cas de diviser pour mieux régner. Dans la génération de code, il suffit d'écrire G (A), ce qui est simple car il ne doit prendre en compte que As, alors que le programme généré considère tous les Bs. En évaluation partielle, vous devez obtenir un S quelque part, et vous devez écrire F (A, B) ce qui est plus difficile car il faut considérer le produit croisé de tous les As et Bs possibles. Dans l'expérience personnelle, un programme F (A, B) a dû être écrit pour faire le pont entre les modifications en temps réel d'une ancienne base de données hiérarchique et une nouvelle version relationnelle. A était la méta-description de la façon de mapper l'ancienne base de données sur la nouvelle, sous la forme d'une autre base de données. B était les changements apportés à la base de données originale, et F (A, B) a calculé les changements correspondants à la base de données plus récente. Comme A a changé à basse fréquence (hebdomadaire), F (A, B) n'a pas dû être écrit. Au lieu de cela, un générateur G (A) a été écrit (en C) pour générer FA (B) (en C). Le temps gagné était approximativement un ordre de grandeur du temps de développement, et deux ordres de grandeur du temps d'exécution.
Pouvez-vous fournir plus de détails/un lien pour ce que vous entendez par "spécialisation de programme"? –
Pourquoi ne publiez-vous pas de lien vers ce que vous êtes en train de lire? Cela pourrait être une de ces choses que beaucoup de gens comprennent intuitivement, mais ne savent pas par leur nom. –
désolé, j'ai mis à jour mon post maintenant – KP65