Урок №1. Введення в програмування

  Юрій  | 

  Оновл. 1 Кві 2020  | 

 580

Комп’ютери розуміють тільки дуже обмежений набір інструкцій і щоб змусити їх щось зробити, потрібно чітко сформулювати завдання, використовуючи ці ж інструкції. Програма (також «додаток», «програмне забезпечення», «софт») — це набір інструкцій, які вказують комп’ютеру, що йому потрібно зробити. Фізична частина комп’ютера, яка виконує ці інструкції, називається «залізом» або апаратною частиною (наприклад: процесор, материнська плата, оперативна пам’ять, тощо).

Машинна мова

Процесор комп’ютера не здатен розуміти мови програмування (такі як C++, Java, Python і т.д) напряму. Дуже обмежений набір інструкцій, які розуміє процесор, називається машинним кодом (або ще «машинною мовою»). Те, як ці інструкції організовані, виходить за рамки цього уроку, але варто відзначити наступні дві речі:

По-перше, кожна команда (інструкція) складається тільки з двох цифр: 0 або 1. Ці числа називаються бітами (скорочено від англ. «binary digit») або двійковим кодом.

Наприклад, нижче представлена команда машинної мови архітектури x86:

10110000 01100001

По-друге, кожен набір бітів трансформується процесором в інструкції для виконання певного завдання (наприклад, порівняти два числа між собою або перемістити вказане число в певну комірку пам’яті). Різні типи процесорів зазвичай мають різні набори інструкцій, тому інструкції, які працюватимуть на процесорах Intel цілком ймовірно, що не працюватимуть на процесорах Xenon (які використовуються в ігрових консолях Xbox). Раніше, коли комп’ютери тільки починали масово поширюватися, програмісти писали більшість програм тільки на машинній мові, що було дуже незручно, важко і займало набагато більше часу, ніж зараз.

Мова Асемблера

Так як програмувати на машинній мові є специфічним задоволенням, то програмісти винайшли Мову Асемблера. У цій мові кожна команда ідентифікується коротким ім’ям (а не набором одиниць з нулями), і змінними можна управляти через їх імена. Таким чином, писати/читати код стало набагато легше. Проте процесор все рівно не здатен розуміти мову асемблера напряму. Цю мову також потрібно перекладати в машинний код. Асемблер — це транслятор (перекладач), який перекладає код, написаний на мові асемблера, в машинну мову.

Перевагою Асемблера є його продуктивність (а саме швидкість виконання) і він досі використовується, коли швидкість виконання має вирішальне значення. Причина даної переваги заключається в тому, що код, написаний на мові асемблера, адаптується до кожного конкретного процесора окремо. Програми, адаптовані під один процесор, не будуть працювати з іншим. Крім того, для того, щоб програмувати на Асемблері, потрібно також знати дуже багато не дуже читабельних інструкцій для виконання навіть простих завдань.

Наприклад, ось команда, яка записана вище, але уже на мові асемблера:

mov al, 061h

Високорівнені мови програмування

Для вирішення проблем читабельності коду і надмірної складності були розроблені високорівневі мови програмування. C, C++, Pascal, Java, JavaScript і Perl відносяться до високорівневих мов програмування, однією з основних властивостей яких є портативність під різні архітектури процесорів. Програми, написані на мовах високого рівня, також повинні бути перекладені в машинну мову перед їх виконанням процесором. Є два варіанта перекладу в машинну мову:

  компіляція, яка виконується компілятором;

  інтерпретація, яка виконується інтерпретатором.

Компілятор — це програма, яка зчитує код і створює автономну (здатну працювати незалежно від іншого апаратного або програмного забезпечення) виконувану програму, яку процесор здатен зрозуміти. При запуску програми весь її код повністю компілюється, а потім створюється виконуваний файл і вже при повторному запуску цієї програми компіляція (вже другий раз) не виконується.

Процес компіляції можна зобразити наступним чином:

 

 

Інтерпретатор — це програма, яка виконує код напряму, без його попередньої компіляції в виконуваний файл. Інтерпретатори більш гнучкі, але менш ефективні, так як процес інтерпретації виконується повторно при кожному новому запуску програми.

Процес інтерпретації можна зобразити наступним чином:

 

 

Будь-яка мова програмування може або компілюватися, або інтерпретуватися. Однак, такі мови, як C, C++ і Pascal — компілюються, в той час як “скріптові” мови програмування, такі, як Perl і JavaScript — інтерпретуються. Деякі мови програмування (наприклад, Java) можуть як компілюватися, так і інтерпретуватися.

Переваги високорівневих мов програмування

Перевага №1: Легше писати/читати код. Ось та ж команда, що вище, але вже на мові C++:

а = 97;

Перевага №2: Потрібно менше інструкцій для виконання завдань. В C++ ви можете зробити щось на зразок наступного в одному рядку:

а = Ь * 2 + 5;

В мові асемблера вам довелося б використати 5 або 6 інструкцій.

Перевага №3: Вам не потрібно турбуватися про такі деталі, як завантаження змінних в регістри процесора. Компілятор або інтерпретатор бере це на себе.

Перевага №4: Високорівневі мови програмування є портативними, тобто підходять під різні архітектури (але є один нюанс):

 

 

Нюанс полягає в тому, що більшість платформ, такі як Microsoft Windows, мають свої власні специфічні функції, за допомогою яких писати код набагато легше. Але ціна цьому — портативність, так як функції, специфічні для однієї платформи, цілком ймовірно, що не працюватимуть на іншій платформі. Про все це ми детальніше поговоримо в наступних уроках.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (5 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

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