De par sa nature, l'abstraction réduit la communication des informations, tant au programmeur qu'aux couches inférieures du système (le compilateur, les bibliothèques et le système d'exécution). En faveur de l'abstraction, cela permet généralement aux couches inférieures de supposer que le programmeur n'est concerné par aucun comportement non spécifié, offrant une plus grande flexibilité dans la fourniture du comportement spécifié.
Un exemple d'un avantage potentiel de cet aspect "ne se soucie pas" est dans la disposition des données. En C (abstraction faible), le compilateur est plus contraint dans les optimisations de mise en page des données. Même si le compilateur pouvait discerner (par exemple, à travers des informations de profil) que des optimisations évitant le partage chaud / froid ou faux seraient bénéfiques, il est généralement empêché de les appliquer. (Il y a une certaine liberté à spécifier "comme si", c'est-à-dire à traiter la spécification de manière plus abstraite, mais dériver tous les effets secondaires potentiels alourdit le compilateur.)
Une spécification plus abstraite est également plus robuste contre les changements de compromis et d'utilisations. Les couches inférieures sont moins contraintes à réoptimiser le programme pour de nouvelles caractéristiques du système ou de nouvelles utilisations. Une spécification plus concrète doit être réécrite par un programmeur ou un effort supplémentaire doit être fait par les couches inférieures pour garantir un comportement "comme si".
L'aspect nuisant aux performances de l'abstraction masquant des informations est «ne peut pas exprimer», que les couches inférieures traiteront généralement comme «ne sait pas». Cela signifie que les couches inférieures doivent discerner les informations utiles à l'optimisation à partir d'autres moyens tels qu'une utilisation générale typique, une utilisation ciblée ou des informations de profil spécifiques.
L'impact de la dissimulation d'informations fonctionne également dans l'autre sens. Le programmeur peut être plus productif en ne devant pas considérer et spécifier chaque détail, mais le programmeur peut avoir moins d'informations sur l'impact des choix de conception de niveau supérieur.
D'un autre côté, lorsque le code est plus spécifique (moins abstrait), les couches inférieures du système peuvent plus simplement faire ce qu'on leur dit de faire comme on leur dit de le faire. Si le code est bien écrit pour son utilisation ciblée, il s'adaptera bien à son utilisation ciblée. Un langage moins abstrait (ou paradigme de programmation) permet au programmeur d'optimiser la mise en œuvre par une conception détaillée et par l'utilisation d'informations qui ne sont pas facilement communiquées dans un langage donné aux couches inférieures.
Comme cela a été noté, les langages moins abstraits (ou techniques de programmation) sont attrayants lorsque des compétences et des efforts supplémentaires du programmeur peuvent produire des résultats intéressants. Lorsque plus d'efforts et de compétences sont programmés, les résultats seront généralement meilleurs. De plus, un système de langage qui est moins utilisé pour les applications critiques pour les performances (au lieu de mettre l'accent sur l'effort de développement ou la fiabilité - les vérifications des limites et la collecte des ordures ne concernent pas seulement la productivité du programmeur mais la correction, l'abstraction réduisant la charge mentale du programmeur peut améliorer la fiabilité) aura moins de pression pour améliorer les performances.
La spécificité va également à l'encontre du principe de ne pas se répéter, car l'optimisation est généralement possible en adaptant le code à une utilisation spécifique. Cela a des implications évidentes en termes de fiabilité et d'effort de programmation.
Les abstractions fournies par une langue peuvent également inclure un travail indésirable ou inutile sans aucun moyen de choisir une abstraction moins lourde. Bien que des travaux inutiles puissent parfois être découverts et supprimés par les couches inférieures (par exemple, les vérifications des limites peuvent être extraites du corps d'une boucle et entièrement supprimées dans certains cas), déterminer qu'il s'agit d'une optimisation valide nécessite plus de «compétence et d'efforts» de la part de le compilateur.
L'âge et la popularité de la langue sont également des facteurs notables à la fois dans la disponibilité de programmeurs qualifiés et dans la qualité des couches inférieures du système (y compris les bibliothèques matures et les exemples de code).
Un autre facteur de convergence dans de telles comparaisons est la différence quelque peu orthogonale entre la compilation à l'avance et la compilation juste à temps. Alors que la compilation juste à temps peut plus facilement exploiter les informations de profil (ne pas compter sur le programmeur pour fournir des exécutions de profil) et l'optimisation spécifique au système (la compilation anticipée peut cibler une compatibilité plus large), la surcharge de l'optimisation agressive est comptabilisée comme partie des performances d'exécution. Les résultats JIT peuvent être mis en cache, ce qui réduit la surcharge pour le code couramment utilisé. (L'alternative de la réoptimisation binaire peut offrir certains avantages de la compilation JIT, mais les formats de distribution binaires traditionnels suppriment la plupart des informations de code source, forçant potentiellement le système à tenter de discerner l'intention d'une implémentation spécifique.)
(Les langages d'abstraction inférieurs, en raison de leur accent sur le contrôle du programmateur, favorisent l'utilisation de la compilation anticipée. La compilation au moment de l'installation peut être tolérée, bien que la sélection de l'implémentation de la liaison fournisse un meilleur contrôle du programmeur. La compilation JIT sacrifie le contrôle significatif. )
Il y a aussi la question de la méthodologie de référence. Un effort / compétence égal est effectivement impossible à établir, mais même si cela pouvait être atteint, les objectifs linguistiques fausseraient les résultats. Si un temps de programmation maximum faible était requis, un programme pour un langage moins abstrait pourrait même ne pas être complètement écrit par rapport à une simple expression idiomatique dans un langage plus abstrait. Si un temps / effort de programmation maximum élevé était autorisé, les langages à abstraction inférieure auraient un avantage. Les repères présentant les meilleurs résultats seraient naturellement biaisés en faveur de langages moins abstraits.
Il est parfois possible de programmer de manière moins idiomatique dans un langage pour bénéficier des avantages d'autres paradigmes de programmation, mais même lorsque le pouvoir expressif est disponible, les compromis pour le faire peuvent ne pas être favorables.