Мої друзі з програмування завжди кажуть мені, що HTML - це мова розмітки, а C ++ - мова програмування. Коли я запитую їх, в чому різниця, вони ніколи не дають мені розумної відповіді.
Що може зробити один виклик C ++ мовою програмування, а HTML ні?
Мої друзі з програмування завжди кажуть мені, що HTML - це мова розмітки, а C ++ - мова програмування. Коли я запитую їх, в чому різниця, вони ніколи не дають мені розумної відповіді.
Що може зробити один виклик C ++ мовою програмування, а HTML ні?
Відповіді:
Мова програмування - це позначення, призначене для передачі інструкцій машині. За цим визначенням і C ++, і HTML є мовами програмування, як це було позначення Джозеф Марі Жакард, який використовувався в 1801 р. Для програмування своїх верстатів .
Однак із розповсюдженням мов, які використовуються для структуризації та / або опису даних, визначення мови програмування зміщується, щоб включати лише мови, здатні виражати алгоритми. Це сьогодні більш поширене визначення, і воно виключає такі мови, як HTML або XML.
В основі поточного визначення лежить концепція завершеності Тьюрінга . Більшість мов програмування є повнотою Тьюрінга, а повнота Тьюрінга часто цитується як одна з найважливіших рис, яка відокремлює мову програмування від будь-якої іншої мови комп'ютера. Це досить добре, як загальне правило, але не зовсім точно:
Залежно від контексту, ви можете вибрати будь-яке визначення, яке ви хочете.
Редагувати:
Нехай далі стане відомо, що реалізація мови не надає характеристик самій мові, наприклад: специфікація мови може визначати цілісну повну мову, хтось міг би її реалізувати випадково, не залишаючи при цьому повноти. Однак ця реалізація не є цілковитою, але це означає, що сама мова не є повною (швидше за все, це означає, що реалізація є невідповідною). Деталі мови та деталі конкретної реалізації мови повинні визнаватися окремими речами, тому неточно називати мову, яку інтерпретують чи складають тощо.
Фраза «Я знаю це, коли бачу» - це розмовне вираження, за допомогою якого оратор намагається класифікувати спостережуваний факт чи подію, хоча категорія є суб’єктивною або не має чітко визначених параметрів. Ця фраза була чудово використана Верховним Судом Сполучених Штатів Поттером Стюарт, щоб описати його пороговий тест на непристойність у справі Jacobellis проти Ohio (1964).
- "Я знаю це, коли бачу" стаття у Вікіпедії
Як і непристойність, я думаю, що всі ми знаємо мову програмування, коли бачимо її. Очевидно, що ОП це робить, оскільки ви вже вважали, що C ++ є мовою програмування, а HTML - не такою.
Тож яка саме мета переслідувати формальне визначення? Янніс вже дав велике вирішення того, чому найпопулярніше визначення, Тюрінг, повнота, є хибним: це призводить до категоризації, яка не піддає тесту "я знаю це, коли бачу".
Я кажу вам, що будь-яке визначення, яке ви можете придумати, призведе до того, що деякі мови, які, як ми вважаємо, не є "програмуючими" мовами, будуть класифіковані як такі; або для деяких мов, які, як ми всі вважаємо, є "програмуючими" мовами, буде віднесено до категорії таких, що не так
Чому б просто не піти зі своєю кишкою? Я використовую просту евристику: мова програмування - це мова, основною метою якої, на мою думку та за моїми спостереженнями, є написання програм. Не позначати вміст. Не перетворювати XML. Писати програми загального призначення. Я вважаю за краще просто знати це, коли бачу це, ніж намагаюся визначити формальне визначення, і я не бачу справжнього значення, яке може виникнути при спробі такого визначення.
Мови розмітки в основному стосуються того, як відображається інформація, і вони, як правило, відсутні в інфраструктурі програмування змінних, математики, порівняння, прийняття рішень (якщо ... тоді), циклів (для, поки) тощо.
HTML сам по собі є статичним; тобто, як і текстовий процесор, він має на меті подати інформацію такою, якою вона є. Тільки за допомогою додавання якихось мов програмування (як правило, мов сценаріїв, таких як JavaScript, PHP тощо), веб-сторінки HTML можуть мати вміст, що змінюється. Мови сценаріїв надають можливості "програмування" змінними, математикою, порівняннями, прийняттям рішень, циклами тощо.
HTML - декларативна мова. Він не робить багато самостійно, він просто описує документ та його вміст (використовуючи теги, що мають смислове значення).
C ++ з іншого боку щось робить. Він визначає функції та класи, але також описує, як ці функції повинні працювати разом, як вхідні та вихідні дані пов'язані між собою значущим чином і як програма повинна працювати в цілому.