Мені сказали, що HTML - це мова розмітки, C ++ - мова програмування, що може змінити це?


22

Мої друзі з програмування завжди кажуть мені, що HTML - це мова розмітки, а C ++ - мова програмування. Коли я запитую їх, в чому різниця, вони ніколи не дають мені розумної відповіді.

Що може зробити один виклик C ++ мовою програмування, а HTML ні?


5
Ви маєте на увазі, крім того, що Тьюрінг завершений?
Маной R

1
@ManojR Не всі повні мови Тюрінга вважаються мовами програмування, наприклад XSLT.
янніс

Повторне закриття див. Q / A у мета на meta.programmers.stackexchange.com/q/5397/70298
miraculixx

1
Чудова редакція @gnat, спасибі Питання повторно відкрито, застарілі коментарі видалено.
янніс

1
@YannisRizos Я просто скопіював роз'яснення, надані ОП у коментарях . Цікаво, чому так багато користувачів ставлять важливі речі про свої публікації в коментарі, а не редагувати; Я майже завжди редагую свої дописи у таких випадках
gnat

Відповіді:


45

Мова програмування - це позначення, призначене для передачі інструкцій машині. За цим визначенням і C ++, і HTML є мовами програмування, як це було позначення Джозеф Марі Жакард, який використовувався в 1801 р. Для програмування своїх верстатів .

Однак із розповсюдженням мов, які використовуються для структуризації та / або опису даних, визначення мови програмування зміщується, щоб включати лише мови, здатні виражати алгоритми. Це сьогодні більш поширене визначення, і воно виключає такі мови, як HTML або XML.

В основі поточного визначення лежить концепція завершеності Тьюрінга . Більшість мов програмування є повнотою Тьюрінга, а повнота Тьюрінга часто цитується як одна з найважливіших рис, яка відокремлює мову програмування від будь-якої іншої мови комп'ютера. Це досить добре, як загальне правило, але не зовсім точно:

  1. Деякі цільні мови, які не є Тюрінгом, вважаються мовами програмування, наприклад, благодійність .
  2. Деякі мови, які взагалі не вважаються мовами програмування, є Тюрінг завершеними, наприклад, XSLT .
  3. Тільки цінність повноти не говорить багато про корисність мови .

Залежно від контексту, ви можете вибрати будь-яке визначення, яке ви хочете.

Редагувати:

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


6
Не могли б ви детальніше розглянути "XSLT не вважається мовою програмування". Я ніколи цього не бачив, і ІМО я навіть засумнівався б у когось знанні чи компетенції з PL, коли це вимовляв. Я навіть не можу придумати жодної причини, чому XSLT не слід вважати ПЛ (XSLT може бути легким випадком тюрінгу тарпіту, але це інша проблема).
бхаак

@bhaak Я не кажу, що це не слід вважати мовою програмування. Як правило, мови перетворення даних не вважаються мовами програмування, що абсолютно не говорить про те, якщо вони є чи не є мовами програмування. Я бачив ділову логіку в XSLT і особисто вважаю це мовою програмування. Але я, мабуть, не став би, якби не вперше бачив це на роботі. У будь-якому випадку, кого це хвилює?
янніс

Ви можете додати речення або два про те, що означає бути завершеним.
phant0m


@ think123 Я не думаю, що я можу дати простіше визначення, ніж те, що є у Вікіпедії, і я вже посилався на відповідну статтю у відповіді.
янніс

5

Фраза «Я знаю це, коли бачу» - це розмовне вираження, за допомогою якого оратор намагається класифікувати спостережуваний факт чи подію, хоча категорія є суб’єктивною або не має чітко визначених параметрів. Ця фраза була чудово використана Верховним Судом Сполучених Штатів Поттером Стюарт, щоб описати його пороговий тест на непристойність у справі Jacobellis проти Ohio (1964).

- "Я знаю це, коли бачу" стаття у Вікіпедії

Як і непристойність, я думаю, що всі ми знаємо мову програмування, коли бачимо її. Очевидно, що ОП це робить, оскільки ви вже вважали, що C ++ є мовою програмування, а HTML - не такою.

Тож яка саме мета переслідувати формальне визначення? Янніс вже дав велике вирішення того, чому найпопулярніше визначення, Тюрінг, повнота, є хибним: це призводить до категоризації, яка не піддає тесту "я знаю це, коли бачу".

Я кажу вам, що будь-яке визначення, яке ви можете придумати, призведе до того, що деякі мови, які, як ми вважаємо, не є "програмуючими" мовами, будуть класифіковані як такі; або для деяких мов, які, як ми всі вважаємо, є "програмуючими" мовами, буде віднесено до категорії таких, що не так

Чому б просто не піти зі своєю кишкою? Я використовую просту евристику: мова програмування - це мова, основною метою якої, на мою думку та за моїми спостереженнями, є написання програм. Не позначати вміст. Не перетворювати XML. Писати програми загального призначення. Я вважаю за краще просто знати це, коли бачу це, ніж намагаюся визначити формальне визначення, і я не бачу справжнього значення, яке може виникнути при спробі такого визначення.


Але тепер ви обмежуєте "мови програмування" "мовами програмування загального призначення". Останнє - це те, що люди зазвичай мають на увазі, коли вони говорять "мова програмування", але переслідування саме того, що визначальні характеристики "мови програмування", також має сенс у розумінні, що таке мови програмування, як вони працюють та які їх обмеження. Наприклад, будь-який кваліфікований програміст повинен визнати проблему зупинки, коли вона зіткнеться з нею, що було б складно без вивчення теоретичних меж мов програмування.
JesperE

@JesperE: Я радий обмежити своє судження "Я це знаю, коли бачу це" мовами програмування, які мають принаймні досить загальну мету. Також я не погоджуюся з тим, що "будь-якому кваліфікованому програмісту" потрібні будь-які знання проблеми зупинки - я знаю, що мої знання про це з моєї формальної освіти з інформатики ніколи не мали для мене жодного актуальності протягом майже двох десятиліть професійного розвитку.
Carson63000

1
Якщо вам не довелося це виховувати, це, мабуть, добре. Це не означає, що це не важливо знати. Ви не оцінюєте якість ременя безпеки за тим, наскільки часто він фактично використовувався, чи не так?
JesperE

За вашим евристикою, чи є програма програмування?
Брайан

@Brian: цікавий! Я думаю, я завжди просто вважав elisp як реалізацію Lisp, яка, очевидно, є мовою програмування, хоча ця конкретна реалізація набагато конкретніша за своєю метою призначення.
Carson63000

2

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

HTML сам по собі є статичним; тобто, як і текстовий процесор, він має на меті подати інформацію такою, якою вона є. Тільки за допомогою додавання якихось мов програмування (як правило, мов сценаріїв, таких як JavaScript, PHP тощо), веб-сторінки HTML можуть мати вміст, що змінюється. Мови сценаріїв надають можливості "програмування" змінними, математикою, порівняннями, прийняттям рішень, циклами тощо.


0

HTML - декларативна мова. Він не робить багато самостійно, він просто описує документ та його вміст (використовуючи теги, що мають смислове значення).

C ++ з іншого боку щось робить. Він визначає функції та класи, але також описує, як ці функції повинні працювати разом, як вхідні та вихідні дані пов'язані між собою значущим чином і як програма повинна працювати в цілому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.