За своєю природою абстракція зменшує передачу інформації як програмісту, так і нижчим шарам системи (компілятору, бібліотекам та системі виконання). На користь абстрагування це, як правило, дозволяє нижчим шарам припускати, що програміст не пов'язаний з якоюсь не визначеною поведінкою, забезпечуючи більшу гнучкість у наданні визначеної поведінки.
Приклад потенційної вигоди від цього аспекту "байдуже" - це макет даних. У C (низька абстракція) компілятор більш обмежений в оптимізації верстки даних. Навіть якщо компілятор міг би помітити (наприклад, за допомогою профільної інформації), що оптимізація гарячого / холодного або неправдивого обміну-уникнення була б корисною, як правило, не можна застосовувати таку. (Існує деяка свобода в заданні "як би", тобто трактування специфікації більш абстрактно, але отримання всіх потенційних побічних ефектів додає тягар компілятору.)
Більш абстрактна специфікація також є більш надійною щодо змін у компромісах та використання. Нижні шари менш обмежені в повторному оптимізації програми для нових характеристик системи або нових застосувань. Більш конкретну специфікацію повинен або переписати програміст, або додаткові зусилля повинні докласти нижчі шари, щоб гарантувати поведінку "як би".
Аспектом, що перешкоджає функціонуванню інформації, що приховує абстрагування, є "не вдається виразити", що нижчі шари зазвичай обробляють як "не знаю". Це означає, що нижчі шари повинні розпізнавати інформацію, корисну для оптимізації, з інших засобів, таких як типове загальне використання, цільове використання або конкретна інформація профілю.
Вплив інформації, що переховується, працює і в іншому напрямку. Програміст може бути більш продуктивним, не потребуючи розгляду та уточнення кожної деталі, але програміст може мати менше інформації про вплив вибору дизайну вищого рівня.
З іншого боку, коли код є більш конкретним (менш абстрактним), нижні шари системи можуть більш просто робити те, що їм сказано робити, як їм сказано. Якщо код добре написаний для його цільового використання, він добре відповідає його цільовому використанню. Менш абстрактна мова (або парадигма програмування) дозволяє програмісту оптимізувати реалізацію шляхом детального проектування та використання інформації, яка не легко передається на даній мові нижчим шарам.
Як зазначалося, менш абстрактні мови (або методи програмування) привабливі, коли додаткові навички та зусилля програміста можуть дати гідні результати. Якщо прикладати більше зусиль і навичок програміста, результати, як правило, будуть кращими. Крім того, мовна система, яка використовується менше для критично важливих для роботи програм (замість того, щоб підкреслювати зусилля щодо розробки або надійність - перевірка меж і збирання сміття - це не лише про продуктивність програміста, а про правильність, зменшення абстракції розумового навантаження на програміста може підвищити надійність) буде мати менший тиск для підвищення продуктивності.
Специфіка також працює проти принципу "не повторювати себе", оскільки оптимізація, як правило, можлива шляхом адаптації коду до конкретного використання. Це має очевидний вплив на надійність та програмування.
Абстракції, що надаються мовою, можуть також включати небажану або непотрібну роботу без засобів для вибору менш важкої абстракції. Незважаючи на те, що зайву роботу іноді можна виявити та видалити нижчими шарами (наприклад, перевірка меж може бути витягнута з тіла петлі і повністю видалена в деяких випадках), визначивши, що така коректна оптимізація вимагає більше "майстерності та зусиль" з боку компілятор.
Мовний вік та популярність також є вагомими чинниками як у наявності кваліфікованих програмістів, так і в якості нижчих шарів системи (включаючи зрілі бібліотеки та приклади коду).
Ще одним заплутаним фактором у таких порівняннях є дещо ортогональна різниця між достроковою компіляцією та складанням, що склалася за часом. У той час як компіляція, що працює вчасно, може легше використовувати інформацію профілю (не покладаючись на програміста, щоб забезпечити запуск профілю) та специфічну для системи оптимізацію (дострокова компіляція може орієнтуватися на більшу сумісність), накладні витрати на агресивну оптимізацію обліковуються як частина виконання. Результати JIT можна кешувати, зменшуючи накладні витрати для часто використовуваного коду. (Альтернатива бінарної повторної оптимізації може забезпечити деякі переваги компіляції JIT, але традиційні формати бінарного розподілу скидають більшість інформації вихідного коду, що потенційно змушує систему намагатися розпізнати наміри від конкретної реалізації.)
(Більш низькі мови абстракції через їх акцент на керуванні програмістом надають перевагу використанню дострокової компіляції. Компіляція часу встановлення може бути допущеною, хоча вибір впровадження каналу часу забезпечує більший контроль програміста. Компіляція JIT приносить жертву знаковому контролю. )
Існує також питання методології бенчмаркінгу. Рівних зусиль / умінь фактично неможливо встановити, але навіть якщо такого можна досягти, мовні цілі зміщуватимуть результати. Якщо потрібен малий максимальний час програмування, програма для менш абстрактної мови може навіть не бути повністю написаною порівняно з простим ідіоматичним виразом на більш абстрактній мові. Якщо було дозволено високий максимальний час / зусилля програмування, мови з нижчою абстракцією мали б перевагу. Орієнтовні показники, що представляють найкращі зусилля, природно можуть бути упередженими на користь менш абстрактних мов.
Іноді можливо програмувати менш ідіоматичним способом мовою, щоб отримати переваги інших парадигм програмування, але навіть при наявності виразної сили компроміси для цього можуть бути не сприятливими.