🔥 Чорна п’ятниця у FoxmindEd: знижки до 50% на ІТ курси онлайн! Поспішайте, пропозиція діє лише до 1.12!
Дізнатися більше
06.08.2022
5 хвилин перегляду

Що таке компіляція, лінковка, run time?

Що таке компіляція, лінковка, run time?

Компіляція і лінковка

Компіляція — це процес перетворення вихідного коду (який написав програміст) в код, зрозумілий комп’ютеру. Java, наприклад, компілюється в код, зрозумілий не комп’ютеру, а Java Virtual Machine. Але це не суть, головне в підсумку виходить код, який може прочитати машина.

У більшості випадків при написанні коду ви підключаєте якісь бібліотеки. Для того, щоб бібліотека була доступна вашому коду, ви її якимось чином імпортуєте. У різних мовах є різні конструкції імпорту. Після підключення, ваш код може скомпілювати, тому що ваш код з’єднується з кодом бібліотеки, тобто компілюється на його основі. В результаті ви отримуєте бінарний код бібліотеки і ваш код програми, який лежить окремо. Якщо говоримо про Джава, то так все і залишається, зв’язування кодів відбувається далі в джава машині в процесі виконання програми. Але в деяких мовах зв’язування коду потрібно до запуску програми. Процес зв’язування в єдиний файл вже скомпільованих шматків вашого коду і коду всіх інших бібліотеки називається лінковкою. Тобто лінковка — це з’єднання коду в один великий здійсненний файл. У Джаві це не потрібно, а в С ++, наприклад, це досить важкий процес, який займає досить багато часу.

Compile time

Це важливі терміни, але більшість програмістів про них спотикаються. Процес, коли ви продумуєте і пишете код називається design time. У цей момент код не дійсний, він не скомпілюється і не спрацює, тому що ви прямо зараз працюєте над ним. Але ось ви зупинилися, зберегли його і натиснули кнопку компіляції (в Eclipse компіляція відбувається автоматично при збереженні). Запускається компілятор, який для кожного file.java створює file.class з бінарним кодом, який буде виконуватися джава машиною. Ось цей процес перетворення називається Compile time.

📢 Підпишись на наш Ютуб-канал! 💡Корисні відео для програмістів вже чекають на тебе!

🔍 Обери свій курс програмування! 🚀 Шлях до кар’єри програміста починається тут!

Під час Compile time машина шукає всі використовувані бібліотеки. Якщо знаходить – компілює їх, якщо не знаходить або якщо в вашому коді є помилки, з’являється повідомлення «Помилка компілятора». Помилки, що відбулися в цей час, називаються помилками Compile time або помилками компіляції. Тут ми бачимо, що за помилка: не знайшла бібліотеку або помилка в коді, привласнення неправильного типу, забуті структури мови та ін. Якщо ви бачите помилку компіляції (НЕ warning, а саме error), то на виході ви не отримуєте ніяких класів, частіше за все вони залишаються старими. Отже, Compile time – це час, коли вихідний код перетворюється в бінарний. Пошуком відповідностей займається джава компілятор.

Runtime

Ось ви скомпілювали код, у вас лежить зв’язка файлів, тепер їх потрібно запустити. Ви запускаєте Джава машину (самі або це робить IDE) і в неї завантажуєте ваші файли з командою Запустити. Все, що відбувається в цей час і далі називається runtime.

У чому особливість. На момент Compile time залежності від ваших бібліотек знаходить компілятор, у нього своя система відповідності, по якій відбувається компіляція. А ось в runtime залежності від бібліотек шукає вже джава машина і у неї може бути зовсім інший набір місць, де потрібно шукати. Тому досить часто виходить, що після запуску програміст бачить, що клас не найден. Це викликає подив, адже все скомпілювати, значить все добре. Так виходить, тому compile time і untime – абсолютно різні процеси і виконують їх різні програми. Компайл тайм робить компілятор, а рантайм робить джава машина. Тому програма може компілюватися без помилок, але потім падати на етапі запуску. Це нормально, тому що компілятор не може перевірити за вас правильність програми. Інакше навіщо б тоді були потрібні програмісти?

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів