Per sua natura, l'astrazione riduce la comunicazione di informazioni, sia al programmatore che ai livelli inferiori del sistema (compilatore, librerie e sistema di runtime). A favore dell'astrazione, ciò generalmente consente agli strati inferiori di supporre che il programmatore non si occupi di alcun comportamento non specificato, offrendo una maggiore flessibilità nel fornire il comportamento specificato.
Un esempio di potenziale beneficio da questo aspetto "non preoccuparti" è nel layout dei dati. In C (bassa astrazione), il compilatore è più vincolato nelle ottimizzazioni del layout dei dati. Anche se il compilatore è in grado di discernere (ad esempio, attraverso le informazioni del profilo) che le ottimizzazioni hot / cold o false-sharing-elusione sarebbero utili, in genere viene impedito di applicarle. (Esiste una certa libertà nel specificare "come se", cioè nel trattare le specifiche in modo più astratto, ma derivare tutti i potenziali effetti collaterali aggiunge un onere al compilatore.)
Una specifica più astratta è anche più robusta contro i cambiamenti nei compromessi e negli usi. I livelli inferiori sono meno vincolati nel riaprimizzare il programma per nuove caratteristiche del sistema o nuovi usi. Una specifica più concreta deve essere riscritta da un programmatore oppure gli strati inferiori devono fare uno sforzo aggiuntivo per garantire un comportamento "come se".
L'aspetto che ostacola le prestazioni delle informazioni che nascondono l'astrazione è "impossibile esprimere", che i livelli inferiori gestiranno in genere come "non lo so". Ciò significa che i livelli inferiori devono discernere le informazioni utili per l'ottimizzazione da altri mezzi come l'uso generale tipico, l'uso mirato o informazioni specifiche sul profilo.
L'impatto del nascondere le informazioni funziona anche nell'altra direzione. Il programmatore può essere più produttivo non dovendo considerare e specificare ogni dettaglio, ma il programmatore potrebbe avere meno informazioni sull'impatto delle scelte di progettazione di livello superiore.
D'altra parte, quando il codice è più specifico (meno astratto), i livelli inferiori del sistema possono semplicemente fare ciò che viene loro detto di fare mentre gli viene detto di farlo. Se il codice è ben scritto per l'uso mirato, si adatterà bene all'uso mirato. Un linguaggio meno astratto (o paradigma di programmazione) consente al programmatore di ottimizzare l'implementazione mediante una progettazione dettagliata e l'uso di informazioni che non sono facilmente comunicate in un determinato linguaggio agli strati inferiori.
Come è stato notato, i linguaggi (o le tecniche di programmazione) meno astratti sono interessanti quando ulteriori abilità e sforzi del programmatore possono produrre risultati utili. Quando si applicano maggiori sforzi e abilità del programmatore, i risultati saranno in genere migliori. Inoltre, un sistema linguistico che viene utilizzato meno per le applicazioni critiche per le prestazioni (enfatizzando invece lo sforzo di sviluppo o l'affidabilità - i controlli dei limiti e la raccolta dei rifiuti non riguardano solo la produttività del programmatore ma anche la correttezza, l'astrazione che riduce il carico mentale sul programmatore può migliorare l'affidabilità) avrà meno pressione per migliorare le prestazioni.
La specificità funziona anche contro il principio di non ripetere te stesso perché l'ottimizzazione è in genere possibile adattando il codice ad un uso specifico. Ciò ha evidenti implicazioni in termini di affidabilità e sforzo di programmazione.
Le astrazioni fornite da una lingua possono anche includere un lavoro indesiderato o non necessario senza mezzi per scegliere un'astrazione meno pesante. Mentre il lavoro non necessario a volte può essere scoperto e rimosso dai livelli inferiori (ad esempio, i controlli dei limiti possono essere estratti dal corpo di un ciclo e completamente rimossi in alcuni casi), determinare che si tratta di un'ottimizzazione valida richiede più "abilità e sforzo" da il compilatore.
L'età e la popolarità della lingua sono anche fattori importanti sia per la disponibilità di programmatori qualificati sia per la qualità dei livelli inferiori del sistema (incluse librerie mature ed esempi di codice).
Un altro fattore di conflitto in tali confronti è la differenza in qualche modo ortogonale tra compilazione anticipata e compilazione just-in-time. Mentre la compilazione just-in-time può sfruttare più facilmente le informazioni del profilo (non fare affidamento sul programmatore per fornire esecuzioni del profilo) e l'ottimizzazione specifica del sistema (la compilazione anticipata può mirare a una più ampia compatibilità), l'overhead dell'ottimizzazione aggressiva viene considerato come parte delle prestazioni di runtime. I risultati JIT possono essere memorizzati nella cache, riducendo il sovraccarico per il codice comunemente usato. (L'alternativa della ripopimizzazione binaria può fornire alcuni vantaggi della compilazione JIT, ma i formati di distribuzione binaria tradizionali rilasciano la maggior parte delle informazioni sul codice sorgente, costringendo potenzialmente il sistema a tentare di discernere l'intento da un'implementazione specifica.)
(I linguaggi di astrazione più bassi, a causa della loro enfasi sul controllo del programmatore, favoriscono l'uso della compilazione anticipata. La compilazione in fase di installazione potrebbe essere tollerata, sebbene la selezione dell'implementazione in fase di collegamento fornirebbe un maggiore controllo del programmatore. La compilazione JIT sacrifica il controllo significativo. )
C'è anche il problema della metodologia di benchmarking. Pari sforzi / abilità sono effettivamente impossibili da stabilire, ma anche se si potessero raggiungere tali obiettivi linguistici influenzerebbe i risultati. Se fosse richiesto un tempo di programmazione massimo basso, un programma per un linguaggio meno astratto potrebbe non riuscire nemmeno a essere completamente scritto rispetto a una semplice espressione idiomatica in un linguaggio più astratto. Se fosse consentito un tempo / sforzo di programmazione massimo elevato, i linguaggi a bassa astrazione avrebbero un vantaggio. I parametri di riferimento che presentano i migliori risultati sarebbero naturalmente distorti a favore di linguaggi meno astratti.
Talvolta è possibile programmare in una lingua meno idiomatica in una lingua per ottenere i vantaggi di altri paradigmi di programmazione, ma anche quando è disponibile il potere espressivo i compromessi per farlo potrebbero non essere favorevoli.