Компіляція - це процес, який полегшує спілкування програміста і обчислювальної машини
Створюючи на завершальному етапі певну програму, будь-якому програмісту доводиться звертатися до послуг компілятора. У технічній документації цій програмі відведено досить скромне визначення як утиліті, що виконує компіляцію. Компіляція - це процес перетворення програми, написаної мовою, зрозумілою людині (мовою високого рівня), в команди, зрозумілі для машини (низькорівневий мова). В результаті отримуємо програму, яка близька машинного коду. Вона може виглядати як об`єктний модуль, абсолютний код. Іноді така програма схожа на мову асемблера.
Таким чином, компіляція - це коли вхідна інформація (вихідний код), що представляє опис алгоритму або написана на проблемно-орієнтованому мовою програма, листується в еквівалентний перелік команд, представлених в об`єктному коді (машинно-орієнтованій мові).
Якщо ще спростити визначення, то компілювати - це транслювати машинну програму з проблемно-орієнтованого в машинно-орієнтована мова.
Незважаючи на прозорість і простоту визначення, компіляція - це процес досить багатоплановий. Існує кілька її видів. Пакетна компіляція здійснюється над кількома вихідними модулями в одному пункті завдання. Построчная компіляція - це те ж саме, що й інтерпретація (покрокова незалежна компіляція кожного наступного оператора). Ще існує умовна компіляція. У такому випадку трансльований текст має залежність від умов, які задані у вихідній програмі директивами компілятора.
Змінюючи значення певної константи, можна регулювати включення або виключення трансляції частини тексту програми.
Для зручності програмістів при вирішенні різних завдань застосовуються найбільш зручні і пристосовані компілятори. Якщо провести їх класифікацію, то можна виділити кілька видів подібних утиліт.
Компілятор векторизуется виробляє трансляцію вихідного коду в машинний комп`ютерний код, підлаштовуючись під векторні процесори.
Гнучкий компілятор був розроблений на основі модульного принципу. Його управління здійснюється таблицями. Запрограмований він на високорівневої мовою. Також можлива його реалізація за допомогою компілятора компіляторів.
Компілятор інкрементальний здійснює повторне транслювання фрагментів програми та доповнень до неї, при цьому перекомпіляція всієї програми виключається.
Інтерпретуючий або покроковий компілятор використовує принцип послідовного виконання незалежної компіляції для кожного окремого оператора або команди з вихідної програми.
Компілятор компіляторів - це транслятор, який сприймає формальний опис для мови програмування. Він здатний самостійно генерувати компілятор для конкретної мови.
Налагоджувальний компілятор може самостійно усувати деякі види помилок синтаксису.
Резидентність компілятору відведено постійне місце в оперативній пам`яті, і він доступний при повторному використанні широким спектром завдань.
Існують самокомпіліруемие компілятори. Вони пишуться тією ж мовою, з якого відбувається трансляція.
Універсальний компілятор має в основі формальний опис семантики і синтаксису вхідної мови. Він складається з ядра, синтаксичного і семантичного завантажувачів.
Найбільш часто зустрічаються задачі, де компілятори знаходять собі застосування, - це компіляція ядра для платформи Linux. Операція ця дозволяє вирішити широкий спектр проблем, пов`язаних з погодженням обладнання та налаштування найбільш прийнятною версії платформи.
Компіляція Java реалізовується при використанні компіляторів, що працюють на самих різних платформах. Це дозволяє вихідні коди перекомпілювати під потреби операційних систем від різних виробників.