Як працюють комп’ютерні мови
Ми вже обговорювали, як запускаються програми. Кожна програма представляє собою потік байтів, котрі є командами для Вашого комп’ютера на спеціальній машинній мові^1 . Але людям важко мати справу машинною мовою безпосередньо; писати програми на ній стало рідкісним мистецтвом навіть серед досвідчених гакерів^2 .
Майже весь код Юнікса, за винятком невеликих фрагментів всередині ядра, котрі відповідають за безпосередню підтримку окремих пристроїв, зараз написаний на мові високого рівня^3 . Термін «мови високого рівня» виник історично на противагу низькорівневій мові асемблеру, котра, фактично, є «легкою накидкою» зверху машинних кодів.
Є декілька видів мов високого рівня. Але всіх їх об’єднує однин принцип: програміст створює так званий джерельни код^4 програми, котрий повинен пройти певний шлях перетворення у машинний код, який комп’ютер вже зможе виконати. Джерельний код легко змінювати, доповнювати, вдосконалювати, навідміну від машинного, який є величезною послідовністю дуже простих команд процесора, і лише завдяки швидкістю виконання вони організовуються у складні логічні операції.
Компільовані мови
Компільовані мови^5 є найбільш традиційним видом комп’ютерних мов. Задопомогою програми, що називається (логічно) ? компілятором ^6 вони перетворюють тексти програм у двійковий потік бітів, зрозумілий машині. Одного разу згенерований, бінарний файл може запускатись без звернення до його вихідних кодів (більшість комерційних програм поставляється саме у вигляді машинного коду, утвореного із джерельних файлів, у які користувач не має змоги заглянути).
Компільовані мови дають чудову продуктивність та найповніший доступ до операційної системи, але на них найважче програмувати.
«С» — мова, на котрій написаний Юнікс, є найважливішою серед них (разом з її розширеним варіантом «С++»). «FORTRAN» є іншим прикладом компільованої мови, що досі використовується інженерами та науковцями, але він значно старший та примітивніший. У світі Юнікс фактично більше ніякі компільовані мови не вживаються. Поза його межами «COBOL» дуже широко застосовують для фінансового та бізнесового програмного забезпечення.
Є багато інших компільованих мов, але більшість з них або припинили свій розвиток або ж є обмеженими дослідницькими інструментами. Якщо Ви збираєтесь створювати програми для Юнікс на компільованій мові, то це, найвірогідніше, буде C або C++.
Інтерпретовані мови
Інтерпретована мова^7 потребує програму-інтерпертатор, що зчитує джерельний код програми та на льоту перетворює його у команди процесора і системні виклики. Джерельний код інтерпретується щоразу, коли програма викликається до виконання.
Інтерпретовані мови є повільнішими за компільовані, та доволі часто мають обмежений доступ до серця операційної системи та апаратури. З іншого боку, на них легше програмувати та вони менш чутливі до помилок.
Багато інструментів Юнікс, включаючи оболонки користувача, ?bc, sed та awk є маленькими ефективними інтерпретованими мовами. Більшість варіантів «BASIC» також є інтерпертованими, так само, як і ?tcl. Історично найважливішою інтерпретованою мовою був ?LISP (разом з своїми численними нащадками). На сьогодні, оболонки Юнікс та Lisp, що живе всередині Emacs’а є мабуть найважливішими суто-інтерпретованими мовами.
Псевдокодові мови
З 1990 року почали набирати вагу мови, що були гібридом компільованих та інтерпретованих. У псевдокодових мовах^8 , як і в компільованих, джерельні коди перетворюються у компактну двійкової форму, з котрої Ви їх виконуєте, але ця форма ще не є безпосередньо машинним кодом. Натомість, це — псевдокод, котрий дещо простіший, аніж машинний, але значно потужніший. Коли Ви запускаєте таку програму, Ви інтерпретуєте псевдокод.
Псевдокодові мови майже так само швидкі, як і компільовані (їхні інтерпретатори можуть бути доволі простими, малими та швидкими), і в той сам час вони також володіють гнучкістю та потужністю доброго інтерпретатора.