Останнім часом все частіше і частіше різні інтернет ресурси влаштовують холівари на тему: чи є HTML мовою програмування чи ні. Як водиться, аргументів на користь обох точок зору призводять чимала кількість, тому я вирішив поставити для себе крапку в цьому непотрібному суперечці.
Визначення мови програмування.
Мова програмування - формальна знакова система. призначена для запису комп'ютерних програм. Мова програмування визначає набір лексичних, синтаксичних і семантичних правил, які задають зовнішній вигляд програми і дії. які виконає виконавець (комп'ютер) під її управлінням.
Так сказано в Вікіпедії. і більшість інших ресурсів або повністю вживає це визначення, або вільно викладає його без втрати сенсу. Розглянемо детальніше складові частини визначення ЯП:
Більш простою мовою це може бути викладено так:
Мова програмування - безліч заздалегідь визначених, одноманітних і зрозумілих виконавцю (читай: інтерпретатора / компілятору / комп'ютера / програмісту) інструкцій, призначених для запису послідовно з метою їх виконання якимось пристроєм, що є частиною обчислювальної машини. Також мова програмування повинна володіти рядом особливостей: інструкцій повинно бути обмежене число, і всі їх повинні знати; інструкції повинні вибудовуватися певним чином для отримання певних результатів, і всі повинні про це знати; повинні існувати правила написання інструкцій і всі повинні їх знати; кожна конструкція мови повинна однозначно співвідносити те що написано з тим, що було потрібно позначити.
Ось так громіздко і негарно вийшло, зате без складних слів. Ми повернемося до цього класичного трохи пізніше.
Види мов програмування.
Часто вживають також поділ на низькорівневі і високорівневі мови. Ці види відрізняються «товщиною прошарку» між процесором і програмістом. Говорячи простими словами - в низькорівневих мовах кожна інструкція являє собою одну або невелике число процесорних команд, а в високорівневої мовою кожна інструкція це великий набір процесорних команд.
Розглянемо ближче визначення різних типів за версією Вікіпедії.
- Аспектно-орієнтоване програмування (АОП) - парадигма програмування, заснована на ідеї поділу функціональності для поліпшення розбиття програми на модулі.
- Структурне програмування - методологія розробки програмного забезпечення, в основі якої лежить уявлення програми у вигляді ієрархічної структури блоків. Запропоновано в 70-х роках XX століття Е. Дейкстрой, розроблена і доповнена Н. Віртом.
- Процедурне програмування - програмування на імперативний мовою, при якому послідовно виконуються оператори можна зібрати в підпрограми, тобто більші цілісні одиниці коду, за допомогою механізмів самої мови [1].
- Логічне програмування - парадигма програмування, заснована на автоматичному доказі теорем, а також розділ дискретної математики, що вивчає принципи логічного висновку інформації на основі заданих фактів і правил виведення. Логічне програмування засноване на теорії та апараті математичної логіки з використанням математичних принципів резолюцій.
- Об'єктно-орієнтоване програмування (ООП) - парадигма програмування, в якій основниміконцепціямі є поняття об'єктів і класів. У разі мов з прототіпірованії замість класів використовуються об'єкти-прототипи.
- Функціональне програмування - розділ дискретної математики і парадигма програмування, в якій процессвичісленія трактується як обчислення значень функцій в математичному розумінні останніх (на відміну від функцій як підпрограм в процедурному програмуванні).
- Мультипарадигмальності мову програмування - як правило, мова програмування, який був розроблений спеціально як інструментмультіпарадігмального програмування, тобто образотворчі можливості якого спочатку передбачалося успадкувати від декількох, найчастіше неспоріднених мов.
- Езотеричний мову програмування - мова програмування, розроблений для дослідження меж можливостей розробки мов програмування, для доказу потенційно можливої реалізації певної ідеї (так зване «доказ концепції», англ. Proof of concept), в якості твору програмного мистецтва [en], або в якості жарти (комп'ютерного гумору).
Імперативний і декларативний підхід
Всі мови програмування діляться на дві групи: декларативні і імперативні.
Програма імперативною мовою програмування з математичної точки зору являє собою спільне рішення поставленого завдання, іншими словами, відповідь на питання «як робити?». Це послідовність команд, які повинен виконати виконавець.
Програма на декларативну мову програмування є поєднанням формалізованої в рамках мови програмування завданням і всіх необхідних для її вирішення теорем, простіше кажучи, відповідь на питання «що робити?». Конкретну послідовність виконуваних дій виконує компілятор, або частіше інтерпретатор - програма, в реальному часі виконує код програми без його перетворення в машинний код.
Повнота по Тьюрингу.
В теорії обчислюваності виконавець (безліч обчислює елементів) називається Тьюринг-повним. якщо на ньому можна реалізувати будь-яку обчислюваної функції. Іншими словами, для кожної обчислюваної функції існує обчислює її елемент (наприклад, машина Тьюринга) або програма для виконавця, а всі функції, які обчислюють безліччю обчислювачів, є обчислюваної функції (можливо, при деякому кодуванні вхідних і вихідних даних).
Назва пішла від Алана Тьюринга. який придумав абстрактний обчислювач - машину Тьюринга і дав визначення безлічі функцій, обчислюваних за допомогою машин Тьюринга.
Іншими словами мова є повним по Тьюрингу. якщо будь-яка обчислювана функція, яка Вам потрібна, може бути записана на цій мові і вирішена його виконавцем.
Чи не повні по Тьюрингу мови також існують, але так як їх створюють в основному в академічних цілях, то вони маловідомі і широко не застосовуються.
Відповімо на кілька запитань:
HTML - це мова?
Так. Він має властивості, притаманні мовам.
HTML - відповідає визначенню мови програмування?
HTML - є Тьюринг-повним мовою?
Ні. Простіше кажучи на HTML можна зробити тільки деяку обмежену сукупність дій, інтерпретованих браузером.
Чи можна називати HTML мовою програмування?
Залежно від контексту - так, можна. Але при цьому слід пам'ятати, що з таким же успіхом можна назвати ЯП і CSS і XML і SQL. Іншими словами дані мови формально можуть бути названі мовами програмування, але тільки з певною часткою скептицизму і з повним розумінням того, що ці мови не задовольняють всім вимогам.
Чи є HTML мовою програмування?
Ні. Завдання звичайного мови програмування в обробці даних, а завдання HTML в відображенні даних. Він не є мовою програмування і на ньому не можна зробити обчислень.
Висновок: Ми можемо назвати HTML мовою програмування тільки в контексті формальної полеміки. На ділі вона є мовою гіпертекстової розмітки і ні чим більше. Але читач повинен розуміти, що якщо немає чітко прописаних стандартів, то ніхто не забороняє зробити мову, ідентичний по синтаксису з HTML, але інтерпретується зовсім по іншому таким чином, щоб він був повним по Тьюрингу.