Pull to refresh

Comments 25

повысить уровень аргументации в холиварах на тему «почему PHP (Java, Perl, Bash) отстой»


Вот это круто :)
Кстати, а для чего нужно знать, что ХХХ отстой?
А, точно, что-то сразу не сообразил :)
Чтобы понять, что PHP — отстой, оказывается нужно понимать принципы работы машины Тьюринга. Неожиданно!
А вы как думали, холивары — это тоже тяжкий труд, требующий глубокой теоретической подготовки!
> Хорошо известными вам декларативными ЯП являются правила описания страницы HTML и CSS.
Всё ясно.
Про Машину Тьюринга: а как же состояния? В каждый момент времени МТ может находиться в одном состоянии из заранее определенного множества состояний. Соответственно, правила перехода зависят не только от символа в текущей ячейке, но и от текущего состояния.

И терминологическая придирка: все-таки МТ — это не «лента», а «абстрактный исполнитель», лента — это о том, как она устроена.
хм… Вроде бы это и написал — что машина Тьюринга задаёт понятие контекста исполнения программы.
HTML — язык разметки. По сути программирования никакого нету.
Разве HTML не задаёт правила преобразования данных? На вход подаются чистые данные, на выходе мы имеем данные в определённой структуре.
Ну так можно сказать вообще про все языки подряд. Данные преобразовываются в данные. Вы сами об этом писали. Просто все эти понятия — они абстрактные. В реальности мы имеем языки с кучей примесей с других. Смесь многих подходов и парадигм (иногда даже противоречивых).
Естественно! Я же не забыл дописать, что само задание правил преобразования (программа) — по сути — это декларация.

На самом деле, понимать, что HTML и другие конфиги — это программы на декларативном языке важно, чтобы не начинать программировать на конфигах.
HTML — ДЕКЛАРАТИВНЫЙ язык программирования для интерпретатора в виде движка браузера. :) Или, можно сократить и сказать, что HTML — «язык разметки». По-сути, это одно и то же.

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

ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%BB%D0%B0%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
Наверное везде учат, что HTML — это не язык программирования, но с точки зрения «теории парадигм программирования» HTML — это язык программирования; причем эта теория чуть ли не все способы обработки, хранения и представления информации подводит под ту или иную парадигму.

Чего стоит, например, «таблично-ориентированная парадигма». Видимо следует понимать, что при создании электронной таблицы используется так называемый таблично-ориентированный язык.
Можно попробовать продолжить эту мысль и придумать текстово-ориентированный язык для создания текстовых документов (правила набора символов для составления текстов на том или ином языке). Хотя это похоже на декларативный язык.

При этом Википедия определяет ЯП как «формальную знаковую систему для записи программ». Тогда все файлы, содержащие тексты, таблицы, наверно и изображения, следует определить как программы. Как-то немного абсурдно. Стирается граница между программой в ее классическом понимании и данными.

Вооще в парадигмах программирования какая-то каша: классифицируют по разным признакам, при этом все сваливают в одну кучу. Это как классифицировать животных по эволюционным признакам, среде обитания, способу питания и т.п. и при этом не оговаривать по какому признаку происходит классификация.
Стирается граница между программой в ее классическом понимании и данными.

Это не абсурдно, это чертовски красиво. И очень, замечу, полезно: вспомните лисп.
>>Это не абсурдно, это чертовски красиво.

Поддержу утверждение.
И даже не нужно вспоминать логические и функциональные языки программирования.

Тут скрыта более глубокая философия: данные являются неотъемлемой частью любой программы; любая программа сама по себе является данными; любые данные сами являются программой, так как одним своим существованием изменяют окружающую среду (другие данные).

Те, кто с высоты своей гордыни говорят, что С++, Java и PHP — это языки программирования, а HTML, CSS, язык Bash (или интерпретатора windows) — это какие-то данные, которые нужно подать настоящим программам для обработки, такие люди мне напоминают физиков позапрошлого века, которые с пеной доказывали, что атом неделимая частица мельче которой ничего не существует.
ОК, мы поняли.
Однако такая философия «ломает» устоявшееся представление о том, что такое программа.

Пусть есть классическая программа X. Она будет выступать в роли данных для другой программы (компилятора или интерпретатора). Ее компилятор (исполняемый файл) в свою очередь данные для процессора. Процессор — это как бы тоже программа (у него есть команды, логика работы). Однако при всем этом программу X, ее компилятор, процессор будет отличать то, что они могут принимать на вход различные данные. Да, в определенной форме, но все-таки различные. Конечно, можно написать программу замкнутую саму на себе (никакие данные из вне не принимающую). Но возможность этого не делать заложена в самих языках программирования.

С другой стороны, утверждается, что документ xxx.html на чистом HTML — это тоже программа. Он является данными для интерпретатора, встроенного в браузер, интерпретатор сам данные для… Однако сам статичный xxx.html, открытый в браузере, не может получать данные и обрабатывать их. Этой возможности нет в самом языке. Поэтому для того, чтобы обрабатывать поступающую информацию, приходится использовать другие языки.

Т.е. все равно приходим к тому, что программа, написанная скажем на Python, имеет кардинальное отличие от программы, написанной на HTML, по признаку возможности получать внешние данные.
У вас происходит подмена понятий «программы» и «исполнителя».

Упомянутая Вами программа на языке Python — это всего лишь текстовая инструкция для интерпретатора CPyton. Сам по себе листинг ничего делать не умеет. Точно так же как листинг из файла index.html является инструкцией браузеру по прорисовке чего-то на экране.

Процессор с философской точки зрения конечно тоже является программой, но отнюдь не потому, что «у него есть команды, логика работы». Система команд и порядок выполнения — это свойства исполнителя команд.
Программа и ее исполнитель зависят друг от друга. Программу на определенном ЯП могут выполнять только специально под этот ЯП созданные исполнители.
Иначе можно прийти к выводу, что для любого языка программирования могут существовать совершенно различные исполнители: результат выполнения одного и того же листинга будет зависеть от исполнителя. Но тогда получатся разные языки программирования, хоть и с идентичными ключевыми словами.
Таким образом для HTML можно написать интерпретатор, который будет по иному «понимать» теги. Но это будет уже другой язык.

Поэтому говорить, что возможность что-то делать заложена в ЯП, а не в его исполнителе, считаю вполне верно.
Вы спорите не о чем. И снова пытаетесь зачем-то подменять понятия.

>>Программа и ее исполнитель зависят друг от друга.

Все в мире взаимосвязано.

>>Программу на определенном ЯП могут выполнять только специально под этот ЯП созданные исполнители.

КО?

>>Иначе можно прийти к выводу, что для любого языка программирования могут существовать совершенно различные исполнители: результат выполнения одного и того же листинга будет зависеть от исполнителя.

Возьмем упомянутый вами Python — для него реализовано 10 интерпретаторов/исполнителей ru.wikipedia.org/wiki/Python#.D0.A0.D0.B5.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D0.B8
Тогда по вашей логике существует 10 версий Python. Бедные разработчики — они ведь и не догадываются, что программируя на одной конкретной версий Python они пишут одновременно на 10 языках программирования. :)

>>Поэтому говорить, что возможность что-то делать заложена в ЯП, а не в его исполнителе

Это полный абсурд. Возможность «деланья» — это свойство исполнителя. Программа — это перечень инструкций для конкретного «деланья». Язык программирования — это правило составления таких инструкций.

Или вы хотите продолжить спорить и доказывать, что «ходить строевым шагом» — это возможность русского языка, так как на русском языке написан устав, который обязаны выполнять все военные????
Уточню.
Все исполнители Python выдадут примерно одинаковый смысловой результат, выполнив один и тот же листинг. Вы же выше писали, что результат зависит от исполнителя. Можно сказать утверждали, что для ЯП может существовать два исполнителя, работа которых даст совершенно разный смысловой результат выполнения одного и того же листинга.
Это и имелось ввиду здесь:
Иначе можно прийти к выводу, что для любого языка программирования могут существовать совершенно различные исполнители: результат выполнения одного и того же листинга будет зависеть от исполнителя.

Смысл, назначение, работа программы не меняются от того, чем ее выполнили. А если меняются, значит исполнители интерпретируют разные языки. КО
>>Вы же выше писали, что результат зависит от исполнителя. Можно сказать утверждали, что для ЯП может существовать два исполнителя, работа которых даст совершенно разный смысловой результат выполнения одного и того же листинга.

1) Я такого не писал. Это писали Вы.
2) В этих Ваших словах есть смысл. Язык PHP он один и тот же, но если попробовать выполнить написанную на нем программу в PHP3 и PHP4, то получим разный результат (это касается всех языков программирования — компиляторы/интерпретаторы могут поставляться различными разработчиками, а так же в следствии эволюции имеют различные версии).

>>Смысл, назначение, работа программы не меняются от того, чем ее выполнили. А если меняются, значит исполнители интерпретируют разные языки.

Смысл и назначение не изменятся. А работа зависит от (если мы говорим о компьютерных языках программирования) железа, операционной системы и её политик безопасности, архитектуры процессора, доступности ресурсов, состояния переменных окружения, версий компиляторов/интерпретаторов.

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

Нет. ЯП — формальная знаковая система, предназначенная для записи компьютерных программ (Википедия).
Речь шла о том, всякий ли файл следует считать программой.
Оттуда же: Компью́терная програ́мма — последовательность инструкций, предназначенная для исполнения устройством управления вычислительной машины.

Если данные в файле предназначены для исполнения, являются инструкциями, то этот файл программа. В этом отношении HTML-файл (или любой аналогичный по назначению язык разметки) является программой, содержащей инструкции как интерпретировать те или иные данные, записанные с помощью формальной знаковой системы.
Sign up to leave a comment.

Articles