Як комп'ютер виконує програму
Як комп'ютер виконує програму
Що таке програма
Програма — це послідовність інструкцій, які комп'ютер виконує по черзі. Комп'ютер не додумує і не вгадує: він робить рівно те, що написано, і в тому порядку, в якому написано.
Типова програма виконує три дії: отримує дані, обробляє їх і видає результат. Калькулятор отримує числа, додає їх і показує суму. Ігровий застосунок отримує натискання клавіш, змінює стан гри й малює новий кадр.
Python — одна з мов, якими такі інструкції записують. У цій лекції розглянуто, що відбувається з рядком Python-коду від натискання «Run» до результату на екрані.
🎯 Мета лекції
- Назвати ролі процесора, оперативної пам'яті й диска.
- Пояснити, що в пам'яті всі дані зберігаються як числа.
- Розрізняти компіляцію та інтерпретацію.
- Знати, що Python спершу компілює код у байт-код, а потім виконує його.
- Встановити Python, запустити його в режимі REPL і як скрипт.
🔑 Ключові терміни
- Процесор (CPU): виконує інструкції.
- Оперативна пам'ять (RAM): зберігає код і дані, поки програма працює.
- Машинний код: числові команди, які розуміє процесор.
- Компілятор / інтерпретатор: програми, що перекладають код у команди для процесора.
- Байт-код: проміжні команди Python для його віртуальної машини.
Пригадаємо, що ви вже знаєте
Це перший урок, тому питання перевіряють наявні уявлення. Дайте відповідь на кожне до читання пояснень і запам'ятайте її: наприкінці лекції ці самі питання розглядаються ще раз.
print потрібно спершу перекласти в такі команди. Хто це робить, пояснює ця лекція.Процесор, пам'ять і диск
У виконанні програми беруть участь три компоненти.
Процесор (CPU, Central Processing Unit) виконує інструкції. Він бере одну інструкцію, виконує її, переходить до наступної. Інструкції прості: додати два числа, порівняти два числа, скопіювати значення. Сила процесора в швидкості: він виконує мільярди таких кроків за секунду.
Оперативна пам'ять (RAM, Random Access Memory) — робоче сховище. У ній лежить усе, з чим програма працює зараз: код, числа, проміжні результати. Пам'ять швидка, але після вимкнення комп'ютера її вміст зникає.
Диск (SSD або HDD) зберігає файли постійно. Читання з диска значно повільніше, ніж з RAM, тому процесор напряму з диском не працює.
Звідси висновок: програму спершу завантажують з диска в оперативну пам'ять, і лише потім процесор бере звідти інструкції.

Усе в пам'яті — числа
Оперативна пам'ять — це ряд однакових комірок, і кожна комірка має адресу. Одна комірка вміщує один байт (byte). Байт складається з 8 бітів (bit), кожен біт дорівнює 0 або 1, тому байт вміщує 256 значень: числа від 0 до 255. Усе, що зберігається в пам'яті, записане такими числами.
Приклад: слово Hello. Кожній літері відповідає номер за таблицею символів. Літера H має номер 72, e — 101, l — 108, o — 111. Слово займає п'ять сусідніх комірок.

Python має функції для перевірки: ord() повертає номер літери, chr() виконує зворотну дію.
print(ord("H"))
print(chr(101))
Так само зберігаються й інші дані. Колір пікселя — це три числа (червоний, зелений, синій). Звук — послідовність чисел. Команди процесора теж числа. Тому байт сам по собі не має змісту: число 72 може бути літерою H, яскравістю пікселя або частиною команди. Зміст залежить від того, як програма його читає. На цьому ґрунтується поняття типу даних.
ї не входить до таблиці ASCII і в кодуванні UTF-8 займає 2 байти. Тому len("ї") дорівнює 1 символу, а в пам'яті це два байти. Докладніше в уроці про рядки.Мови високого рівня і машинний код
Процесор виконує машинний код (machine code): числові команди, специфічні для архітектури процесора. Чипи Intel і AMD мають одні команди, чипи Apple та більшість смартфонів — інші. Вручну такі команди писати довго й складно: щоб додати два числа й вивести результат, потрібні десятки команд, а помилку в ряді чисел важко помітити.
Тому існують мови програмування високого рівня (high-level languages): C, Java, JavaScript, Python. Їхній синтаксис ближчий до людської мови:
print("Hello")
Один такий рядок замінює багато команд машинного коду. Але процесор його не розуміє. Між текстом програми й процесором потрібен перекладач.

Компілятор і інтерпретатор
Є два способи перекладу.
Компілятор (compiler) перекладає всю програму в машинний код один раз, до запуску. Результат — виконуваний файл (на Windows це .exe). Далі запускають саме його, вихідний код уже не потрібен. Так працюють C, C++, Go, Rust. Аналогія: книгу перекладають повністю й видають готовий переклад.
Інтерпретатор (interpreter) — програма, яка читає код і виконує його під час запуску, без окремого виконуваного файлу. Аналогія: перекладач перекладає кожне речення в момент розмови.

| Компіляція | Інтерпретація | |
|---|---|---|
| Коли відбувається переклад | один раз, перед запуском | щоразу під час запуску |
| Швидкість виконання | зазвичай вища | зазвичай нижча |
| Перенесення на інший комп'ютер | збирати окремо під кожен процесор | достатньо мати інтерпретатор |
| Приклади | C, C++, Go, Rust | bash; Python (після компіляції в байт-код) |
Що насправді робить Python
Поширена відповідь — «Python інтерпретована мова». Вона неповна.
Python не виконує текст програми рядок за рядком. Спочатку він компілює код у проміжну мову — байт-код (bytecode). Це набір простих команд, які не залежать від процесора. Потім віртуальна машина Python (PVM, Python Virtual Machine) виконує ці команди по черзі. Вона і є інтерпретатором у класичному розумінні.

Перед створенням байт-коду текст розбивається на частини (токени) і з них будується дерево програми. Докладно ці етапи показано у відео. Python виконує обидві дії: компілює текст у байт-код, потім інтерпретує байт-код. Наслідки:
- синтаксичні помилки знаходяться до виконання першого рядка;
- байт-код не залежить від процесора, тому програма працює скрізь, де встановлено Python.
Байт-код можна переглянути модулем dis:
import dis
dis.dis('print("Hello")')
0 RESUME 0
1 LOAD_NAME 0 (print)
PUSH_NULL
LOAD_CONST 0 ('Hello')
CALL 1
RETURN_VALUE
LOAD_NAME знаходить об'єкт print, LOAD_CONST кладе текст 'Hello', CALL 1 викликає функцію з одним аргументом. RESUME і PUSH_NULL — службові команди віртуальної машини, зараз вони не потрібні.
python, називається CPython, бо написана мовою C. Існують й інші реалізації (PyPy, Jython). У курсі використовується CPython версії 3.15.Встановлення Python і перший запуск
Курс використовує Python 3.15. Класичний спосіб встановлення — офіційний інсталятор з сайту python.org. Інсталятор встановлює інтерпретатор, стандартну бібліотеку та засоби запуску.
Завантажте інсталятор
Відкрийте python.org/downloads і завантажте інсталятор Python 3.15 для Windows (64-bit).
Позначте Add python.exe to PATH
На першому екрані інсталятора увімкніть прапорець Add python.exe to PATH. Він дозволяє запускати Python командою python з будь-якої папки.
Встановіть
Натисніть Install Now і дочекайтеся повідомлення про успішне встановлення.
Перевірте
Відкрийте новий PowerShell і виконайте команду:
python --version
Завантажте інсталятор
Відкрийте python.org/downloads і завантажте інсталятор Python 3.15 для macOS (файл .pkg).
Встановіть
Відкрийте файл і пройдіть кроки майстра встановлення. Права адміністратора знадобляться для запису в системні папки.
Перевірте
Відкрийте новий термінал і виконайте команду:
python3 --version
На Linux сайт python.org пропонує лише вихідний код, тому класичний спосіб — пакетний менеджер дистрибутива. Python зазвичай уже встановлено. Перевірте версію:
python3 --version
Якщо версія старіша за 3.15, перегляньте розділ про альтернативні способи нижче.
python, у macOS і Linux — python3. У прикладах курсу скрізь написано python; на macOS і Linux замінюйте її на python3.Очікуваний вивід (останнє число може відрізнятися):
Python 3.15.0
Інші способи встановлення
Усі ці способи дають той самий Python. Різниця в зручності оновлення та в тому, звідки береться пакет.
brew install python@3.15
python3.15 --version
Homebrew оновлює Python разом з іншими програмами командою brew upgrade.
# Debian, Ubuntu
sudo apt update
sudo apt install python3
# Fedora
sudo dnf install python3
Пакетний менеджер встановлює ту версію, яку підтримує дистрибутив. Вона може бути старішою за 3.15. Для Ubuntu новіші версії доступні в репозиторії deadsnakes, для Fedora — в пакетах на кшталт python3.15, якщо вони вже опубліковані.
winget install Python.Python.3.15
python --version
winget — менеджер пакетів Windows. Після встановлення відкрийте новий PowerShell.
REPL і скрипт
Код запускають у двох режимах.
REPL (Read-Eval-Print Loop) — інтерактивний режим: ви вводите рядок, Python виконує його, показує результат і чекає наступного. Підходить для експериментів. Запуск:
python
З'явиться запрошення >>>. Введіть вираз і натисніть Enter:
Вихід з REPL — exit(). Кожен рядок у REPL проходить той самий шлях: компіляція в байт-код, виконання.
Скрипт (script) — файл .py з усією програмою. Створіть hello.py з рядком print("Hello") і запустіть:
python hello.py
Скрипт зберігається на диску, його можна запускати повторно й передавати іншим. Реальні програми пишуть саме у файлах.
Звідки береться __pycache__
У папці проєкту може з'явитися каталог __pycache__ з файлами .pyc — це збережений байт-код. Коли програма імпортує інший файл, Python компілює його й кладе байт-код у __pycache__, щоб не компілювати повторно, якщо вихідний файл не змінився. Назва містить версію Python, наприклад hello.cpython-315.pyc.
python hello.py), у __pycache__не потрапляє. Кеш створюється лише для імпортованих файлів. Відсутність папки після запуску скрипта — нормальна поведінка.Передбачте, перш ніж запускати
Для кожного фрагмента запишіть відповідь, потім запустіть код у REPL і порівняйте. Розбіжність між передбаченням і результатом показує, яке уявлення потрібно уточнити.
print(ord("a"))
print(chr(100))
Підказка: літера H має номер 72, мала a має інший номер.
97
d
Мала a має номер 97, номер 100 відповідає літері d. Великі й малі літери — різні числа.
print("Перший рядок")
x = 2 +
print("Третій рядок")
SyntaxError. Синтаксичну помилку знаходить компіляція, яка відбувається до виконання першого рядка. Python спершу компілює весь файл, а потім виконує його.Підсумок

- Процесор виконує, RAM тримає код і дані, диск зберігає постійно.
- Усе в пам'яті — числа; зміст числа залежить від того, як програма його читає.
- Процесор розуміє лише машинний код, тому код потрібно перекласти.
- Python спершу компілює код у байт-код, потім віртуальна машина виконує його.
- Код запускають у REPL або як скрипт;
__pycache__зберігає байт-код імпортованих файлів.
Повернімося до питань на початку
Порівняйте свої відповіді з блоку «Пригадаємо, що ви вже знаєте» з викладеним. Найчастіше змінюється відповідь про Python: це мова, код якої компілюється в байт-код і виконується на віртуальній машині, а не лише інтерпретується.
Типові хибні уявлення
.pyc у __pycache__ — результат цієї компіляції.Практичні завдання
80, 121, 116, 104, 111, 110. За допомогою chr() з'ясуйте, яке слово вони кодують. Напишіть код, який виводить кожну літеру з нового рядка.print(chr(80))
print(chr(121))
print(chr(116))
print(chr(104))
print(chr(111))
print(chr(110))
Числа кодують слово Python.
import dis, потім dis.dis('print("Привіт")'). Які інструкції ви бачите? Чим вивід відрізняється від print("Hello")?LOAD_NAME, PUSH_NULL, LOAD_CONST, CALL. Відрізняється лише текст у константі: 'Привіт' замість 'Hello'.hello.py з рядком print("Hello") та main.py з рядком import hello. Запустіть main.py двічі. Що з'явилося в папці? Чи буде файл для main.py? Чому?__pycache__/hello.cpython-315.pyc. Файлу для main.py не буде, бо скрипт, який запускають напряму, не кешується. Другий запуск візьме готовий байт-код hello, якщо вихідний файл не змінювався.print, аргументи, розділювачі та екранування. Зокрема, чому \n — це один символ, а не два.Пакування та розповсюдження JavaFX-додатків
Від вихідного коду до готового інсталятора: створення Fat JAR, використання jpackage для генерації нативних інсталяторів під Windows, macOS та Linux, публікація релізів у GitHub Releases.
Перша програма і функція print
Перша програма на Python, виклик функції, позиційні та ключові аргументи, параметри sep і end, коментарі, рядкові літерали та екранування. Як читати перші повідомлення про помилки SyntaxError і NameError.