Каждое программное обеспечение - это часть абстракции. Абстракция - это способ программирования, при котором нам предоставляется необходимая информация без подробного описания фоновых процессов. Абстракция придает программному обеспечению простоту. Все важные детали, не относящиеся к программе, скрыты от того, кто ее использует.

Рассматривая сценарий из реальной жизни, в программировании на C мы используем функцию printf для печати на стандартном выводе. Возникает вопрос: нужно ли знать, как работает printf? Ответ зависит от того, над каким уровнем абстракции мы работаем. Если мы разработчик приложений, то нет необходимости знать, как работает printf.

В случае языка программирования и компиляторов нам предоставляется язык высокого уровня, который является одной из форм абстракции, за которой следуют ассемблерный код и машинный код. Даже машинный код - это одна из форм абстракции, в которой мы скрываем детали того, как ток течет по проводам, регулируются напряжения или как регистр хранит информацию. Даже далее, если мы говорим об электронной части (токе и напряжениях) компьютера, это тоже уровень абстракции, который скрывает детали того, как электрон течет в проводе !!!

Выглядит странно, но абстракция - это метод, ускоряющий разработку. Поскольку он предоставляет механизм, позволяющий скрыть нерелевантные процессы и сделать наш фокус более ясным.

В случае проектирования компилятора мы также создаем уровень абстракции, который преобразуется с одного уровня абстракции на другой уровень абстракции, в основном с языка высокого уровня на язык ассемблера или какой-либо другой целевой язык.