Является ли HTML языком программирования

В последнее время всё чаще и чаще различные интернет ресурсы устраивают холивары на тему: является ли HTML языком програмирования или нет. Как водится, аргументов в пользу обеих точек зрения приводят немалое количество, поэтому я решил поставить для себя точку в этом ненужном споре.

Определение языка программирования


Язы́к программи́рованияформальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.

Так сказано в Википедии, и большинство остальных ресурсов либо полностью употребляет это определение, либо вольно излагает его без потери смысла. Рассмотрим поподробнее составные части определения ЯП:
  • Формальный язык — это множество конечных слов (строк, цепочек) над конечным алфавитом.
  • Знаковая система — это система однообразно интерпретируемых и трактуемых сообщений/сигналов, которыми можно обмениваться в процессе общения. Иногда знаковые системы помогают структурировать процесс общения с целью придания ему некой адекватности в плане реакций его участников на те или иные «знаки». В качестве примера знаковой системы обычно приводят язык (как в письменной форме так и, в случае естественных языков, в форме речи).
  • Компью́терная програ́мма — последовательность инструкций, предназначенных для исполнения устройством управления вычислительной машины.
  • Ле́ксика — совокупность слов того или иного языка, части языка или слов, которые знает тот или иной человек или группа людей.
  • Синтаксис — сторона языка программирования, которая описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию). Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.
  • Сема́нтика в программировании — дисциплина, изучающая формализации значений конструкций языков программирования посредством построения их формальных математических моделей. В качестве инструментов построения таких моделей могут использоваться различные средства, например, математическая логика, λ-исчисление, теория множеств, теория категорий, теория моделей, универсальная алгебра. Формализация семантики языка программирования может использоваться как для описания языка, определения свойств языка, так и для целей формальной верификации программ на этом языке программирования.
  • Язы́к — знаковая система, соотносящая понятийное содержание и типовое звучание (написание).

Более простым языком это может быть изложено так:

Язык программирования — множество заранее определенных, однообразных и понятных исполнителю (читай: интерпретатору/компилятору/компьютеру/программисту) инструкций, предназначенных для записи последовательно с целью их исполнения неким устройством, являющимся частью вычислительной машины. Также язык программирования должен обладать рядом особенностей: инструкций должно быть ограниченное число, и все их должны знать; инструкции должны выстраиваться определенным образом для получения определенных результатов, и все должны об этом знать; должны существовать правила написания инструкций и все должны их знать; каждая конструкция языка должна однозначно соотносить то что написано с тем, что требовалось обозначить.

Вот так громоздко и некрасиво получилось, зато без сложных слов. Мы вернемся к этому определению чуть позже.

Виды языков программирования



Часто употребляют также разделение на низкоуровневые и высокоуровневые языки. Эти виды отличаются «толщиной прослойки» между процессором и программистом. Говоря простыми словами — в низкоуровневых языках каждая инструкция представляет собой одну или небольшое число процессорных команд, а в высокоуровневом языке каждая инструкция это большой набор процессорных команд.

Рассмотрим поближе определения разных типов по версии Википедии:
  • Аспе́ктно-ориенти́рованное программи́рование (АОП) — парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.
  • Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
  • Процедурное программирование — программирование на императивном языке, при котором последовательно выполняемые операторы можно собрать в подпрограммы, то есть более крупные целостные единицы кода, с помощью механизмов самого языка[1].
  • Логи́ческое программи́рование — парадигма программирования, основанная на автоматическом доказательстве теорем, а также раздел дискретной математики, изучающий принципы логического вывода информации на основе заданных фактов и правил вывода. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.
  • Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.
  • Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
  • Мультипарадигма́льный язы́к программи́рования — как правило, язык программирования, который был разработан специально как инструмент мультипарадигмального программирования, то есть изобразительные возможности которого изначально предполагалось унаследовать от нескольких, чаще всего неродственных языков.
  • Эзотерический язык программирования — язык программирования, разработанный для исследования границ возможностей разработки языков программирования, для доказательства потенциально возможной реализации некой идеи (так называемое «доказательство концепции», англ. proof of concept), в качестве произведения программного искусства[en], или в качестве шутки (компьютерного юмора).

Императивный и декларативный подход



Все языки программирования делятся на две группы: декларативные и императивные.

Программа на императивном языке программирования с математической точки зрения представляет собой общее решение поставленной задачи, иными словами, ответ на вопрос «как делать?». Это последовательность команд, которые должен выполнить исполнитель.

Программа на декларативном языке программирования является сочетанием формализованной в рамках языка программирования задачей и всех необходимых для её решения теорем, проще говоря, ответ на вопрос «что делать?». Конкретную последовательность выполняемых действий выполняет компилятор, или чаще интерпретатор – программа, в реальном времени выполняющая код программы без его преобразования в машинный код.

Полнота по Тьюрингу


В теории вычислимости исполнитель (множество вычисляющих элементов) называется тьюринг-полным, если на нём можно реализовать любую вычислимую функцию. Другими словами, для каждой вычислимой функции существует вычисляющий её элемент (например, машина Тьюринга) или программа для исполнителя, а все функции, вычисляемые множеством вычислителей, являются вычислимыми функциями (возможно, при некотором кодировании входных и выходных данных).
Название пошло от Алана Тьюринга, который придумал абстрактный вычислитель — машину Тьюринга и дал определение множества функций, вычислимых посредством машин Тьюринга.
Другими словами язык является полным по Тьюрингу, если любая вычислимая функция, которая Вам нужна, может быть записана на этом языке и решена его исполнителем.



Не полные по Тьюрингу языки также существуют, но так как их создают в основном в академических целях, то они малоизвестны и широко не применяются.

Ответим на несколько вопросов:


  1. HTML - это язык?
    Да. Он имеет свойства, присущие языкам.
  2. HTML - соответствует определению языка программирования?
    Да. Он имеет синтаксис, семантику, лексику, он является языком и попадает в категорию декларативных языков программирования.
  3. HTML - является Тьюринг-полным языком?
    Нет. Проще говоря на HTML можно совершить только некоторую ограниченную совокупность действий, интерпретируемых браузером.
  4. Можно ли называть HTML языком программирования?
    В зависимости от контекста — да, можно. Но при этом следует помнить, что с таким же успехом можно назвать ЯП и CSS и XML и SQL. Другими словами данные языки формально могут быть названы языками программирования, но только с определенной долей скептицизма и с полным понимаем того, что эти языки не удовлетворяют всем требованиям.
  5. Является ли HTML языком программирования?
    Нет. Задача обычного языка программирования в обработке данных, а задача HTML в отображении данных. Он не является языком программирования и на нем нельзя произвести вычислений.


Вывод: Мы можем назвать HTML языком программирования только в контексте формальной полемики. На деле он является языком гипертекстовой разметки и ни чем больше. Но читатель должен понимать, что если нет четко прописанных стандартов, то никто не запрещает сделать язык, идентичный по синтаксису с HTML, но интерпретируемый совершенно по другому таким образом, чтобы он был полным по Тьюрингу.
Share post

Similar posts

Comments 49

    +45
    Т.е. эта статья писалась для того, чтобы все в итоге узнали великую тайну о том, что HTML — это язык разметки?
    Вот это сенсация, срочно в эфир
      +8
      Справедливое замечание. Отмечу, что читаю некоторые «компьютерные» интернет издания и в них часто начинают спор по указанной теме. Причем спорят до перехода на личности. Я подумал и понял, что обе стороны не правы. То есть HTML — конечно язык разметки, но под категорию декларативных языков он вполне попадает. Получается что спор у людей не корректный.

      А после того как я всё это для себя уяснил — я подумал, что возможно кому-то будет полезно ознакомится с моими изысканиями.
        +2
        Во имя 100% корректности хотелось бы добавить несколько занудных замечаний

        1. Assembler почему-то у вас назван «полнофункциональным», хотя фактически является структурным

        2. SQL, начиная с SQL-08 тьюринг-попный

        3. 1с — это процедурный, а с 8 версии уже объектно-ориентированный. «Предметно-ориентированный» — это описание назначения а не парадигмы

        4. XML — это не язык. XML — это один из общепринятых стандартов представления двнных. Вы же JSON языком не называете, вот и XML тоже не надо.
          +4
          А что по вашему означает буква «L» в аббревиатуре «XML»?
          totally-not-Language?
            0
            Структурным ассемблер был бы при наличии операторных скобок. Фактически, он является отдельной категорией языков — языком низкого уровня. Почему эта категория не представлена в классификации — не знаю.
              0
              Это просто пост внезапных откровений — ассемблер внезапно оказался, собственно, ассемблером :) На самом деле «операторные скобки» у некоторых макроассемблеров присутствуют — но тут ключевое слово «макро».
                0
                Классификация, как и большая часть справочного материала была слита мною с Википедии. Так как этот ресурс наполняют другие более умные люди, то я не стал плодить свою классификацию, а просто использовал то, что было
              –1
              То есть HTML — конечно язык разметки

              Конечно, HTML, который HyperText Markup Language, это язык разметки. Здесь и долгих скучных исследований проводить не надо, достаточно название посмотреть.
            +6
            Статья немного напомнила мою бытность в институте. Ну знаете, когда доказываешь, что «функция, интегрируемая на отрезке интегрируемая на нём». Люди, которые любят математику, наверняка меня минусанут, но мне всё-равно забавно.
              0
              Несмотря на то, что я люблю математику, мне тоже от таких формулировок становится весело. К счастью, всегда есть альтернативные формулировки, пусть порой и более многословные.
              +3
              HTML — язык разметки текста, но браузерами и многими другими программами он интерпретируется как декларативный язык программирования, содержащий инструкции как обрабатывать размеченный текст. Такие интерпретаторы используют семантику и синтаксис разметки для преобразования в свой собственный набор исполняемых инструкций сопоставляя семантики HTML семантику своей предметной области. Семантика HTML определяет чем является тот или иной фрагмент текста, а что с ним делать решает разработчик интерпретатора — этого HTML не регламентирует, лишь иногда указывая какой должен быть результат для графических или иных визуализаторов и прочих пользовательских агентов-трансформаторов в человеческое восприятие. HTML никак не регламентирует обработку своих разметочных инструкций для общих вычислительных (в широком смысле слова) систем, например таких как поисковые системы, отделываясь в редких случаях рекомендациями обращать особое внимание на те или иные куски текста для некоторых предметных областей, например, поискового ранжирования. Но производители вычислительных систем обычно это игнорируют, а то и действуют абсолютно противоположно, например, не просто игнорируя теги типа b или strong, а пессимизируя результат если им кажется, что имеет место «серая», а то и «чёрная» поисковая оптимизация.
                +3
                HTML — язык разметки текста, но браузерами и многими другими программами он интерпретируется как декларативный язык программирования, содержащий инструкции как обрабатывать размеченный текст.

                мм… рассуждая таким образом можно дойти до мысли, что любой формат, описывающий входные данные, определяет язык программирования, потому, что кто-то эти данные потом интерпретирует и обрабатывает. время, описанное формате ISO-8601, структуры данных IP пакетов (RFC 791), обрабатываемые маршрутизаторами.

                языки программирования используются для записи вычислений или алгоритмов. языки разметки не используются для этой цели. поэтому они не являются языками программирования. следовательно, декларативными языками программирования они тоже не являются. это в статье ошибка.
                  +2
                  HTML используется для записи алгоритмов, см. пример. Также он используется и для разметки. И совершенно не обязательно его относить к той или иной группе.

                  По большому счету — вычисления тоже понятие относительное, проверить является ли строка числом — это вычисления?
                    0
                    HTML используется для записи алгоритмов, см. пример

                    в примере на основе некоторого частного феномена делается весьма романтичное обобщение.

                    в утверждаете, что раз на любом языке программирование можно записать проверку, является-ли число строкой и на html тоже можно записать такую проверку, значит html язык программирования. что же, давайте возьму этот метод на вооружение. «все кошки царапаются. роза может поцарапать — значит розы это кошки.» мне нравятся такие кошки — ни шерсти, ни блох, из еды одна вода, и пахнут приятно)

                    в самом деле, если html это язык программирования, значит на нем можно решать тот же класс задач, который можно решать и на других языках, которые принято называть языками программирования. согласны? давайте будем брать такие задачи, и если найдется такая, которую нельзя решить с помощью html, это будет поводом усомниться в истинности нашего подхода. сможете такую придумать? это должно быть не труднее, чем мне заставить розу поймать мышь. =)
                      +2
                      Вы дали определение сущности, я показала, что предмет беседы подходит под ваше определение. Если у вас есть еще какие-то отличительные признаки определяемой сущности — пожалуйста, в студию. Например, в вашей милой аллегории с кошками я могу сходу сказать, что кошки умеют самостоятельно перемещаться, являются млекопитающими (да и животными, в конце концов) и вынашивают детенышей, а также имеют паспорт.

                      А более точно я объяснила суть в этом комментарии.
                        0
                        под мое определение подходит и все то, что на чем можно написать программу для вычисления «2+2» — покажите как получить результат на предмете беседы.

                        черт, я упустил момент, когда в ход пошли авторитетные ссылки. ну вот тоже wiki, где прямым текстом написано, что html не является ЯП. хотя тягаться с нашим ГК конечно сложно (случись что, кого волнует мнение каких-то программистов. думаю, при достаточной сноровке, под местное определение можно и этот коммент подвести. он ведь тоже является совокупностью данных и команд, с целью порождения конкретного аудиовизуального отображения, если рассматривать его в объективной форме :)).
                          +1
                          под мое определение подходит и все то, что на чем можно написать программу для вычисления «2+2» — покажите как получить результат на предмете беседы.

                          Ну я уж не виновата, что вы даете такие определения, правда?

                          В вашей ссылке всего лишь «not usually considered», а кроме ссылки на ГК у меня были комментарии и аргументы и примеры кода. С чем из мною написанного — вы не согласны?
                          Язык программирования служит для записи программ, а не алгоритмов. А программа всего лишь может содержать в себе алгоритмы, но не обязана.
                    +1
                    Не так. Время и пакеты содержат только данные, но не содержат никаких инструкций. HTML же содержит и данные, и инструкции. Другое дело, что разные агенты эти инструкции по разному понимают, правда обычно имея в виду семантику HTML
                  +3
                  Внезапно в пост врывается реализация Правила 110 на HTML+CSS
                    0
                    А теперь тоже самое, но без CSS. Не выйдет.

                    А все потому что CSS — язык программирования, а HTML — нет.
                      0
                      Ну, не зря же я отделил его от HTML.

                      Кстати, Ваше второе утверждение даже в свете моей ссылки спорно. Ведь в этом примере человек выступает чем-то типа внешнего тактового генератора.

                      PS этот спор — шутливый или все всерьез?
                    +1
                    Нет. Задача обычного языка программирования в обработке данных, а задача HTML в отображении данных. Он не является языком программирования и на нем нельзя произвести вычислений.

                    Если подходить к вопросу формально, а браузер считать интерпретатором, то HTML служит не только для отображения данных:
                    1. Он описывает как и куда передать эти данные (формы).
                    2. Он описывает как их обработать (/>) для конечного пользователя (в данном случае проверка на число — обработка).
                    3. Он описывает как и откуда забрать данные, и опять же как их обработать (script, style, img).

                    В общем, активных тегов в HTML очень-очень много, чтобы говорить, что он умеет только отображать данные. По сути даже когда он создавался — уже были и ссылки и формы, а это уже обработка данных.

                    Так что не могу согласиться с вашим выводом, что HTML нельзя приписать к декларативным языкам программирования.
                      0
                      Грубо говоря, только в контексте использования его в браузере.
                        +5
                        Но ведь любой язык имеет смысл только в связке с компилятором/интерпретатором?
                          0
                          Простите, но вы немного не верно меня поняли. Я как раз приписываю его к декларативным языкам, но так как он не тьюринг-полный, то его используют в связке с тьюринг-полными языками PHP и JavaScript. В результате HTML применяют как вспомогательный для отображения данных, обработанных этими языками. Как следствие «на фоне» PHP и JavaScript называть HTML языком программирования неправильно, так как это приводит к путанице в понимании аспектов применения языка.
                            +1
                            Его не обязательно использовать в связке с JavaScript, а уж PHP и вовсе не причем. До недавнего времени как раз таки JavaScript был вспомогательным языком (для мелких фишечек, типа меню). Да и HTML не стоит на месте — и в HTML5 опять же очень многое уже реализовано нативно.
                            И еще раз повторю, что HTML применяют гораздо больше, чем для отображения данных!
                            А называть его языком программирования или нет — видимо зависит от контекста обсуждения. Так, те же PHP и JS часто называют скриптовыми языками. А путаница в терминологии возникает только при попытке эти определения формализовать, а есть ли смысл это делать для таких обобщенных понятий?

                            Так что не вижу ни одной причины не считать HTML языком программирования.
                              0
                              Близкого знакомства с HTML5 я не сводил, потому что пока не требовалось, поэтому я соглашусь с Вашим мнением
                              0
                              Дополню автора sferrka:
                              HTML c 1986-ого года сильно изменился, и такие элементы, как script стали частью стандарта HTML5
                              www.w3.org/TR/html5/scripting-1.html#scripting-1

                              А т.к. сам JS можно считать полным по Тьюрингу, то и HTML5 стоит таковым считать.
                              Говорить же, что javascript другой язык не стоит, т.к. основаня разметка HTML строится на расширенной версии синтаксиса XML. И много других технологий включает в себя, если разобраться. (те же canvas и webgl, как часть стандарта HTML5)

                              Отмечу, что речь именно о HTML5 и именно с учётом рекомендаций W3C. Может HTML и был просто декларативным ЯП, но он вырос и стал полноценным, включающим в себя другие ЯП (что не исключено, т.к. даже в Си вы можете писать ассемблерный код и это, как часть ANSI стандарта Си)
                              0
                              Ошибаетесь. Язык программирования — это формальная система для записи алгоритмов. А компиляторы/интерпретаторы — это только ограниченная по своим возможностям (объем памяти, разрядность чисел и т.д.) реализация этой формальной системы. На чистом HTML (без привлечения скриптовых языков и flash) даже примитивнейший алгоритм вычисления факториала записать нельзя. И потому он не может рассматриваться как язык программирования.
                                0
                                На SQL тоже много лет было нельзя, SQL теперь не язык программирования?
                                  0
                                  После появления хранимых процедур — стал языком программирования. А до того, как и следует из его названия, был только языком запросов, реализующим реляционную алгебру. А реляционная алгебра является расширением теории множеств и никакого отношения к программированию не имеет.
                                    0
                                    Вы ещё вспомните им, что был SQL и DML и structured был select (query language) и вообще мог только выборку делать, а data manipulation l7e мог манипулировать с данными, что эти понятия перемешивались и возникала путаница))

                                    А вообще нечего выкидывать из HTML script, это как из Си выкинуть libstd или даже похлеще)
                                      0
                                      Справедливости ради, от выкидывания из Си стандартной библиотеки он не перестает быть тьюринг-полным, а вот от выкидывания из HTML скриптов…
                                        0
                                        Согласен, значит «похлеще» =)
                          +9
                          Честно говоря зашел под кат только ради голосования, а тут такой облом :)
                            –9
                            Не хочу нарушать покой, но при помощи Angular в html можно «программировать».
                              –4
                              Но в соответствии с MVC не нужно.
                                +6
                                одно высказывание лучше другого :)
                                  0
                                  Вот уж верно подметили ;)
                              +2
                              (вздохнув)
                              Предполагается, что автор узрит подчёркивания кривого синтаксиса у visio и проникнется глубокими знаниями у автора?

                              А вообще, весь вопрос сводится к тьюринг-полноте. Насколько я знаю, html не является тьюринг-полным.
                                0
                                Это автор все к тъюринг полоноте свел. Фактически, полнота по Тьюрингу — это лишь одна из характеристик ЯП.
                                SQL, например является языком программирования, хотя не являлся тьюринг полным до 2008 года.

                                Единственное необходимое свойство языка программирования — это исполняемость, т.е. способность к обработке входных данных.

                                Если в грамматике не предусмотрены механизмы обработки, а описан лишь стандарт хранения и передачи данных (как в HTML, XML, SGML, JSON, YAML ), то это не язык программирования, а спецификация.

                                По этой причине CSS, SQL, и даже Comment — языки программирования
                                  0
                                  В грамматике HTML (в стандарте) как раз таки предусмотрены механизмы обработки.

                                  Например,
                                  <form>
                                  <input type="radio" name="test" value="1" />
                                  <input type="radio" name="test" value="2" />
                                  <input type="submit" />
                                  </form>
                                  

                                  при отправке формы должно передаться значение одного из элементов radio с одинаковыми именами. Что это, если не обработка данных?

                                  А в html5
                                  <input type="number" />
                                  

                                  Предполагает проверить значение перед отправкой формы.
                                  Опять же

                                  <video autoplay</video>
                                  

                                  Заставляет видео-плеер запустить видео автоматом после загрузки.

                                  А вот XML, SGML, JSON и YAML действительно абстрактные языки разметки.
                                    0
                                    > Что это, если не обработка данных?
                                    Указание браузеру.
                                –3
                                Хорошая попытка, html-программисты, но нет
                                  +1
                                  Программирование — это реализация алгоритмов. Всё. Никаких других функций у программирования нет.

                                  Таким образом, единственное, что отделяет язык программирования от любой другой формальной системы — это возможность записи алгоритмов. Тех самых алгоритмов, формальное определение которых даётся исключительно через элементарный вычислитель (машина Тьюринга, машина Поста, нормальные алгорифмы Маркова, лямбда-исчисление и т.д.).

                                  Наилучший тест для проверки, является ли данная формальная система языком программирования — попытаться реализовать ограниченный (по объему данных, или глубине рекурсии) элементарный вычислитель. На любом языке программирования это возможно. В любой системе, не являющейся языком программирования — нет.

                                  До появления хранимых процедур SQL не являлся языком программирования, т.к. реализовывал не алгоритмы, а реляционную алгебру. А возможностей реляционной алгебры очевидно недостаточно для создания даже самого ограниченного элементарного вычислителя.

                                  Ещё хуже дело обстоит в HTML. Если в SQL изначально были средства манипулирования данными, то в HTML введённые данные в принципе никак невозможно обработать.
                                    –1
                                    Как вы верно заметили, программирование — это реализация алгоритмов. Все. И тут же себе противоречите говоря, что язык программирования обязан поддерживать написание элементарных вычислителей.
                                    Так вот, из вашего же определения следует, что любая реализация любого алгоритма любым языком — есть программирование, а язык, использовавшийся для этого — язык программирования.
                                    Желание что-то вычислить исходит к тем временам, когда не было высокоуровневых средств реализации алгоритмов. Но уже давным давно мне не обязательно иметь даже математические функции в языке, чтобы реализовать алгоритмы.
                                    И, говоря про HTML:
                                    1. Введенные данные еще как обрабатываются.
                                    2. HTML позволяет реализовать множество алгоритмов — отображения данных, отправку данных, скачивания данных, перезагрузки страниц и т.д.
                                      +1
                                      Где именно Вы видите противоречие?

                                      1. В соответствии с теорией алгоритмов, алгоритм — это всё то и только то, что может быть решено посредством элементарного вычислителя. Из этого определения следует, что любая система, посредством которой можно записать алгоритм, должны иметь либо систему ветвлений и циклов (машины Тьюринга/Поста, императивные языки), либо систему текстовых подстановок (нормальные алгорифмы Маркова, снобол-4, рефал), либо рекурсию (лямбда-исчисление, функциональные языки).

                                      А т.к. сам элементарный вычислитель является алгоритмом, то он может быть записан на языке программирования. Тем более, что я говорю не об идеальном вычислителе, а только об его подмножестве, ограниченном ресурсами (понятно, что бесконечную ленту на Фортране-IV реализовать невозможно).

                                      2. Я прямым текстом говорю, что язык программирования — это не любой язык, а ФОРМАЛЬНАЯ СИСТЕМА для записи алгоритмов. Например, такими формальными системами являются блок-схемы (не современные системы построения алгоритмов из кубиков, а те, что рисовали 40 лет назад на бумаге), или более современный псевдокод, который никогда и ни кем не будет скомпилирован (если Вы изучали программирование в институте, то должны быть знакомы и с блок-схемами, и с псевдокодом). Исходный вариант языка APL никогда не был реализован в виде компилятора/интерпретатора (реализован был совершенно другой вариант — адаптированный для текстовых дисплеев), но от этого он не перестал быть языком программирования. И даже элементарные вычислители сами являются языками программирования.

                                      3. То, что в HTML зашиты какие-то функции работы с данными не делает его языком программирования. Именно потому, что средствами HTML с этими данными НИЧЕГО нельзя сделать — как они будут введены пользователем, так их и получит сервер, или js-скрипт. HTML — это только интерфейсная прокладка между пользователем и программой, обрабатывающей эти данные. На заре программирования данные вводили переключателями на пульте, а получали результат посредством лампочек на том же пульте, но никто почему-то не считал, что пульт является языком программирования.

                                      Применительно к машине Тьюринга, программа — это таблица состояний, а содержимое ленты — это обрабатываемые данные. И единственное, что может HTML — это заполнить ленту исходными данными перед началом работы программы. Саму программу на HTML реализовать невозможно.
                                        0
                                        Давай разберемся с вашими определениями…
                                        В соответствии с теорией алгоритмов, алгоритм — это всё то и только то, что может быть решено посредством элементарного вычислителя.

                                        Пруф линк, пожалуйста (на все остальное тоже прошу сразу). И еще формальное определение вашего «элементарного вычислителя»
                                        Из этого определения следует, что любая система, посредством которой можно записать алгоритм, должны иметь либо систему ветвлений и циклов (машины Тьюринга/Поста, императивные языки), либо систему текстовых подстановок (нормальные алгорифмы Маркова, снобол-4, рефал), либо рекурсию (лямбда-исчисление, функциональные языки).

                                        Тут видимо опять необходимо ваше определение вычислителя и его связь с циклами, условиями и т.д. Я лично никакого следствия не вижу.

                                        А т.к. сам элементарный вычислитель является алгоритмом, то он может быть записан на языке программирования. Тем более, что я говорю не об идеальном вычислителе, а только об его подмножестве, ограниченном ресурсами (понятно, что бесконечную ленту на Фортране-IV реализовать невозможно).

                                        Т.е., из ваших же слов, алгоритм — это всё то и только то, что может быть решено посредством алгоритма?

                                        Я прямым текстом говорю, что язык программирования — это не любой язык, а ФОРМАЛЬНАЯ СИСТЕМА для записи алгоритмов.

                                        Опять же — это ваше личное определение. Язык программирования служит для записи программ, а не алгоритмов. А программа всего лишь может содержать в себе алгоритмы, но не обязана (и это не только мое мнение).
                                        Так, например, мы записываем значения констант в классе
                                        class A
                                        {
                                            public const int example = 12;
                                        }
                                        

                                        Да и сама запись классов не является никакими алгоритмами.

                                        Так вот, язык программирование — это средство написания компьютерных программ, которые представляют собой инструкции для компьютера. Никаких ограничений на вид или свойства этих инструкций нет.

                                        Так что, код, написанный на HTML — абсолютно такая же компьютерная программа (так как является инструкциями). А HTML — язык программирования.
                                          0
                                          | Язык программирования служит для записи программ, а не алгоритмов

                                          Очевидно, что теорию алгоритмов (даже на уровне первого курса математического факультета) Вы не изучали. Потому подменяете точный математический смысл используемых понятий собственными искаженными представлениями. Небольшой ликбез: ЛЮБАЯ программа является алгоритмом. И определение публичной константы в классе A — это тоже алгоритм.

                                          Если Вы действительно хотите понять реальное значение слов «алгоритм» и «программа», то, прочитайте любые базовые учебники по теории алгоритмов и математической логике. Пересказывать же здесь общедоступную литературу не имеет смысла.

                                          DIXI

                                  Only users with full accounts can post comments. Log in, please.