Por sua natureza, a abstração reduz a comunicação de informações, tanto para o programador quanto para as camadas inferiores do sistema (compilador, bibliotecas e sistema de tempo de execução). A favor da abstração, isso geralmente permite que as camadas inferiores suponham que o programador não esteja preocupado com nenhum comportamento não especificado, fornecendo maior flexibilidade no fornecimento do comportamento especificado.
Um exemplo de um benefício potencial desse aspecto "não me importo" está no layout dos dados. Em C (baixa abstração), o compilador é mais restrito nas otimizações de layout de dados. Mesmo que o compilador possa discernir (por exemplo, através de informações de perfil) que otimizações quentes / frias ou falsas para evitar o compartilhamento seriam benéficas, geralmente é impedido de aplicá-las. (Existe alguma liberdade em especificar "como se", ou seja, tratar a especificação de maneira mais abstrata, mas derivar todos os possíveis efeitos colaterais acrescenta um ônus ao compilador.)
Uma especificação mais abstrata também é mais robusta contra mudanças nas trocas e usos. As camadas inferiores são menos restritas ao otimizar o programa para novas características do sistema ou novos usos. Uma especificação mais concreta deve ser reescrita por um programador ou um esforço adicional deve ser feito pelas camadas inferiores para garantir o comportamento "como se".
O aspecto que dificulta o desempenho da abstração oculta de informações é "não é possível expressar", que as camadas inferiores normalmente tratam como "não sabem". Isso significa que as camadas inferiores devem discernir informações úteis para otimização de outros meios, como uso geral típico, uso direcionado ou informações de perfil específicas.
O impacto da ocultação de informações também funciona na outra direção. O programador pode ser mais produtivo por não ter que considerar e especificar todos os detalhes, mas o programador pode ter menos informações sobre o impacto de opções de design de nível superior.
Por outro lado, quando o código é mais específico (menos abstrato), as camadas inferiores do sistema podem mais simplesmente fazer o que lhes é pedido que façam da mesma maneira que são instruídas a fazê-lo. Se o código for bem escrito para seu uso direcionado, ele se ajustará bem ao seu uso direcionado. Uma linguagem menos abstrata (ou paradigma de programação) permite que o programador otimize a implementação por design detalhado e pelo uso de informações que não são facilmente comunicadas em uma determinada linguagem às camadas inferiores.
Como foi observado, linguagens menos abstratas (ou técnicas de programação) são atraentes quando habilidades e esforços adicionais do programador podem produzir resultados que valem a pena. Quando mais esforço e habilidade do programador são aplicados, os resultados normalmente serão melhores. Além disso, um sistema de linguagem usado menos para aplicativos críticos para o desempenho (em vez de enfatizar o esforço ou a confiabilidade do desenvolvimento - as verificações de limites e a coleta de lixo não são apenas sobre a produtividade do programador, mas sobre a correção, a abstração que reduz a carga mental no programador pode melhorar a confiabilidade) terá menos pressão para melhorar o desempenho.
A especificidade também funciona contra o princípio de não se repetir, porque a otimização geralmente é possível adaptando o código a um uso específico. Isso tem confiabilidade óbvia e implicações no esforço de programação.
As abstrações fornecidas por um idioma também podem incluir trabalhos indesejados ou desnecessários, sem meios para escolher uma abstração menos pesada. Embora o trabalho desnecessário possa às vezes ser descoberto e removido pelas camadas inferiores (por exemplo, verificações de limites podem ser extraídas do corpo de um loop e totalmente removidas em alguns casos), determinar que essa é uma otimização válida requer mais "habilidade e esforço" o compilador.
A idade e a popularidade do idioma também são fatores dignos de nota, tanto na disponibilidade de programadores qualificados quanto na qualidade das camadas inferiores do sistema (incluindo bibliotecas maduras e exemplos de código).
Outro fator conflitante nessas comparações é a diferença ortogonal entre a compilação antecipada e a just-in-time. Embora a compilação just-in-time possa explorar mais facilmente as informações de perfil (sem depender do programador para fornecer execuções de perfil) e a otimização específica do sistema (a compilação antecipada pode ter como objetivo uma compatibilidade mais ampla), a sobrecarga da otimização agressiva é contabilizada como parte do desempenho do tempo de execução. Os resultados do JIT podem ser armazenados em cache, reduzindo a sobrecarga do código usado com frequência. (A alternativa de reoptimização binária pode fornecer algumas vantagens da compilação JIT, mas os formatos tradicionais de distribuição binária descartam a maioria das informações de código-fonte potencialmente forçando o sistema a tentar discernir a intenção de uma implementação específica.)
(Linguagens de abstração mais baixas, devido à ênfase no controle do programador, favorecem o uso da compilação antecipada. A compilação no tempo de instalação pode ser tolerada, embora a seleção da implementação no tempo do link forneça maior controle do programador. A compilação JIT sacrifica o controle significativo. )
Há também a questão da metodologia de benchmarking. Esforço / habilidade iguais são efetivamente impossíveis de estabelecer, mas mesmo assim poderiam ser alcançados, os objetivos da linguagem influenciam os resultados. Se um tempo de programação máximo baixo for necessário, um programa para uma linguagem menos abstrata pode até falhar em ser completamente escrito em comparação com uma expressão idiomática simples em uma linguagem mais abstrata. Se um tempo / esforço máximo alto de programação fosse permitido, as linguagens de baixa abstração teriam uma vantagem. Os benchmarks que apresentam os melhores resultados seriam naturalmente tendenciosos em favor de linguagens menos abstratas.
Às vezes é possível programar de uma maneira menos idiomática em uma linguagem para obter as vantagens de outros paradigmas de programação, mas mesmo quando o poder expressivo está disponível, as vantagens e desvantagens de fazer isso podem não ser favoráveis.