Мои друзья по программированию всегда говорят мне, что HTML - это язык разметки, а C ++ - это язык программирования. Когда я спрашиваю их, в чем разница, они никогда не дают мне разумного ответа.
Что может сделать C ++ языком программирования, а HTML нет?
programming-languages
terminology
markup
Лукас - Лучшая Академия Кодирования
источник
источник
Ответы:
Язык программирования - это нотация, предназначенная для передачи инструкций машине. По этому определению и C ++, и HTML являются языками программирования, как и нотация Джозефа Мари Жаккарда, использованная в 1801 году для программирования своих станков .
Однако с распространением языков, которые используются для структурирования и / или описания данных, определение языка программирования сместилось, чтобы включать в себя только языки, которые способны выражать алгоритмы. Это более распространенное определение сегодня, и оно исключает такие языки, как HTML или XML.
В основе нынешнего определения лежит концепция полноты по Тьюрингу . Большинство языков программирования являются полными по Тьюрингу, и полнота по Тьюрингу часто указывается как одна из критических черт, отличающих язык программирования от любого другого компьютерного языка. Как правило, это достаточно хорошо, но не совсем точно:
В зависимости от контекста, вы можете выбрать любое определение, которое вы хотите.
Редактировать:
Кроме того, известно, что реализация языка не присваивает характеристики самому языку, например: спецификация языка может определять полный язык тьюринга, кто-то может его случайно реализовать, не допуская полноты тьюринга. Эта реализация не завершена по Тьюрингу, однако, не означает, что сам язык не является завершенным по Тьюрингу (скорее всего, это означает, что реализация не соответствует). Детали языка и детали конкретной реализации языка должны распознаваться как отдельные вещи, поэтому неправильно называть язык интерпретируемым или компилируемым и т. Д.
источник
- «Я знаю это, когда вижу» статья в Википедии
Как непристойность, я думаю, что все мы знаем язык программирования, когда мы видим тот. Очевидно, что OP делает это, поскольку вы уже определили, что C ++ - это язык программирования, а HTML - нет.
Итак, какова цель преследования формального определения? Яннис уже дал краткое изложение того, почему наиболее популярное определение, полнота Тьюринга, ошибочно: оно приводит к категоризации, которая не поддается проверке «Я знаю это, когда вижу».
Я говорю вам, что любое определение, которое вы можете придумать, приведет к тому, что некоторые языки, которые мы все считаем не «языками программирования», будут классифицированы как таковые; или на некоторые языки , которые мы все ощущаем являются языки «программирования» будут классифицированы как не быть так.
Почему бы просто не пойти с вашей кишкой? Я использую простую эвристику: язык программирования - это язык, основной целью которого, на мой взгляд и согласно моим наблюдениям, является написание программ. Не размечать контент. Не преобразовывать XML. Написание программ общего назначения. Я предпочел бы просто знать это, когда увижу это, чем пытаться закрепить формальное определение, и я не вижу никакой подлинной ценности, которая может прийти от попытки такого определения.
источник
Языки разметки в основном имеют дело с тем, как отображается информация, и, как правило, в инфраструктуре программирования отсутствуют переменные, математика, сравнение, принятие решений (если ... затем), циклы (для, пока) и т. Д.
HTML сам по себе статичен; то есть, подобно текстовому процессору, он предназначен для представления информации как есть. Только с добавлением некоторых языков программирования (обычно языков сценариев, таких как JavaScript, PHP и т. Д.) Веб-страницы HTML могут иметь «изменяющийся» контент. Языки сценариев предоставляют возможности «программирования» с переменными, математикой, сравнениями, принятием решений, циклами и т. Д.
источник
HTML является декларативным языком. Сам по себе он ничего не делает, он просто описывает документ и его содержимое (используя теги, которые имеют семантическое значение).
С ++, с другой стороны, что-то делает. Он определяет функции и классы, но также описывает, как эти функции должны работать вместе, как их входы и выходы связаны между собой осмысленным образом и как приложение должно работать в целом.
источник