Подробнее
Первый опыт в HTML Первый опыт в Lisp Первый опыт в Python Первый опыт в JavaScript )))))))) Stockover flow OOxût http //stockover flow com ] Что такое this в javascript? Целый день прокопался, но так и не понял, 1202 как работает this. Расскажите, пожалуйста. 'S © Windsor» Yang
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Еще на тему
Есть способы обмануть эту "логику", но это уже совсем другая история.
First day in different languages
А какими обязательными свойствами должен обладать "настоящий" язык программирования?
Вот мы и пытаемся определиться с терминологией. Был минимально достаточный критерий, что ЯП это нечто, что соответствует полноте Тюринга, но тогда этому противоречат некоторые ЯП. Что в этом случае делать, вводить ad-hoc костыли или пересматривать критерий? И это еще вопрос открытый, а почему бы HTML и не быть полным по Тьюрингу, если он использует декларативную парадигму, не считая наличия сложения, а так же семантических нуля и единицы? Кстати, декларативная парадигму, это парадигма чего?
Я понимаю, что писать сложные программы на html врядли кто-то будет в здравом уме, тем не менее писать на брейнфаке же есть желающие.
Можно написать интерпретатор какого-то подмножества JSON'a, который в результате интерпретации будет выполнять какие-то действия, но это подмножество - уже не JSON, а вполне себе ЯП, на котором описывается какая-то логика
>> компилируется логика
да-а уж
Ты же в курсе, что ЯП это весьма формализированная штука? Про абстрактные синтаксические деревья слышал, которыми описывают синтаксис, а потом обходят что бы исполнить программу? И по сути очень струтурированная, есть куча языков у которых отступы играют роль в очередности исполнения комманд.
1
Не, ну можно значения хранить в атрибутах. Отлично, но решения "отображать или нет" будет принимать браузер, руководствуясь таблицами стилей. Любая кнопка, которая не ссылка (а переход у нас тоже обрабатывает браузер) уже вызывает JavaScript (хз чё там у WebAssembly).
Тебя в других твои комментариях куда-то понесло, начал с абстрактной полноты тюринга, который упрощенно говорит, про то что можно получить выходные данные имея входные, а закончил сокетами.
Задача обычного языка программирования в обработке данных, а задача HTML в отображении данных. Он не
является языком программирования и на нем нельзя произвести вычислений. (выдрал с статьи на хабре)
в общем случае - конечная последовательность действий, приводящая к какому-то результату.
отображение - это тоже обработка данных с передачей результатов на внешнее устройство.
просто в данном случае ты не выходишь за рамки конечной модели тривиальных ЯП.
если абстрагироваться, то что бы ты ни делал будет являться инструкциями для обработки данных.
даже написав комментарий ты формируешь входной поток информации, которая будет отображена с помощью разметки в строго определенном виде (согласно html инструкциям, которые обрабатывает интерпретатор более высокого уровня).
начать с того, что это текст находится на определенном уровне вложенности и т.д..
и даже если сказать, что это бэкенд знает куда и что положить и как выдать связный список - то в результате (без использования инструкций html разметки) ты получишь лишь набор текста (типа json-а), а не текущий вид.
Тот же клеточный автомат - это програма, у которой следующее состояние зависит от предыдущего и именно его определяет.
Компьютерная модель, если мы все же о более-менее высокоуровневом программировании говорим, не оперирует именно 0 или 1, или напряждением на процессоре. Как модель, бит информации это тип набора объектовс размером 2.
напряжение на процессоре?
т.е. вы исключаете битовые операции и адресную арифметику) из ЯП ( бедолаги системные, высокоуровневые языки программирования)
"размером 2" чего? бит это бит и у него размер 1, а состояния да, два и они - логические. а уж все остальное - интерпретация. это просто единица информации.
опять же существует и тернарная логика. да и кубиты никуда не делись.
все это лишь состочния.
Написал же, что инструкции все равно пишутся по абстрактной можели, а даже адресс это абстрация.
Хм. Размер типа равен двум. Размер boolean так же равен 2м. А вот размер типа "Фигура" равен трем, если у него в коде указаны такие инварианты как "Квадрат", "Круг" и "Треугольник". И так далее, не обязательно ограничиваться нулем и единицей.
вы смешиваете физическую имплементацию и абстрактную можель.
сами типы данных (любые) это лишь модели. а вот их реализвции могут быть совершенно разные.
например, для хранения unsigned char и signed char в памяти используется 8 бит. но типы разные, а размерность хранения одна.
а вот для хранения этого же зачения в БД будет задействован бОльший объем физической памяти.
но данные одни и те же, как и их интерпретация.
вот как раз адрес это конкретная физичская величина. это потому, что он есть физически в устройстве.
размерности - вообще штука такая...
например, любой объект характеризуется еще и временем жизни. и т.д.
Окей, мы снова упёрлись в терминологию.
Само понятие ЯП очень размыто. По этой причине я упомянул интуицию. Вообще говоря, это древний контр-продуктивный спор - является ли HTML языком программирования. Для его разрешения требуется четкое определение термина ЯП.
Следует напомнить, что HTML - это прежде всего язык гипертекстовой разметки, а не язык для описания алгоритмов и вычислений
A programming language is a formal language, which comprises a set of instructions that produce various kinds of output. Programming languages are used in computer programming to implement algorithms.
О чем Вы толкуете с antoman'ом, я тоже прекрасно понимаю.
Я упомянул конфиг Постгреса, потому что язык, на котором он написал, внезапно подходит под приведенное Вами определение из Википедии. Но готовы ли Вы назвать процесс конфигурирования сервера СУБД программированием? Я не готов, потому что формализм формализмом, но здравый смысл утрачивать не следует. Постольку поскольку приведенное определение термина ЯП покрывает чуть ли не любое формальное описание чего угодно, я и считаю это определение "размытым", не точным.
В итоге, что касается HTML:
Можно ли назвать HTML языком программирования? Да, в рамках формализма можно.
Является ли HTML языком программирования? Нет, не является.
Стеклянным стаканом при должной сноровке вполне можно забивать гвозди. Но молотком он от этого не становится.
Даже в определении ЯП из Википедии есть предложение "Programming languages are used in computer programming to implement algorithms". Другим словами, мы ожидаем от ЯП способность реализации алгоритмов вычисления. Чем больше, тем лучше. Тьюринг-полные ЯП способны реализовать все(!) вычислимые функции.
Хочу также заметить, что корнем нашей с Вами дискуссии является Ваш вопрос "А какими обязательными свойствами должен обладать "настоящий" язык программирования?". То есть Вы вводите новый термин "настоящий ЯП" и просите дать ему определение. Акцентирую: Вы придумали термин, но просите других дать ему определение. Разумеется, при таких обстоятельствах предложения будут основаны на интуиции. И Вами предложили полноту по Тьюрингу. Я написал, что это интуитивно наиболее подходящий критерий. Но Вы высказали претензии, дескать, негоже в таких разговорах привлекать интуицию. А как иначе?! Понимаете, о чем я?
Хорошо, запишем, что C - всего лишь язык разметки процессорных инструкций, и до настоящего ЯП ему ещё расти и расти
"Настоящие" они или нет зависит от определения термина "настоящий". Если "настоящий" эквивалентно полный по Тьюрингу, значит оба языка "настоящие". Однако определение понятия "настоящий", введенное Rowan'ом так и не выяснено.
Являются ли эти языки хорошими зависит от контекста использования. Если хочется позаниматься ерундой, то brainfuck вероятно для этого хорош.
Тут нет выполнения, а есть обработка на основаниия правил, которые применяются для этого языка разметки.
>> Возможно их этого и растут ноги, почему много кодеров не понимают как проектировать программы и решать задачи как по вычислению так и по отображению данных.
Язык програмирования - это таки то, на чём можно однозначно выразить программу. Форматированный текст - еще не программа.
Текст написанный в машиночитаемом формате - еще не программа.
Набор инструкций по перекладыванию байтов, внезапно, уже программа.
>>Набор инструкций по перекладыванию байтов, внезапно, уже программа.
но это не значит, что программа это только набор инструкций по перекладыванию байтов. Это может быть что угодно - например, как исполнитель "Черепаха"
2. Можно придумать исполнителя, для которого эти же данные будут программой.
Я говорю про первое, а Вы про второе, ведь так?
Я говорю про ЯП как что-то, на чём можно выразить вычисления или алгоритм, вы говорите, что любой поток данных можно интерпретировать.
Мы и тут упёрлись в терминологию
Преобразование есть, его выполняет ксерокс. Листок с текстом - входные данные от которых зависит результат.
Что бы вы не делали с текстом, вы не сможете на выходе получить зеркальное отражение, не изменяя при этом настройки процеса.
По Вашим словам, дописывая текст на лист, мы изменяем результат, а значит программируем.
Поэтому мне особо не хочется разжёвывать и разбирать каждый высосанный пример из пальца. Но разик попробую. Ксерокс выполняет операцию по клонированию и некому преобразованию. Ему глубоко фиолетово что содержится на самом листке, потому что он работает именно с целым контейнером, и, собственно, на вход получает сам лист и как его преобразовывать. Если смоделировать копир, то в таком случае мы получаем настоящую полиморфную функцию по клонированию, и её можно выразить в виде
Настройки -> Лист of 'ИсходныйТипСодержимого -> ( Лист of 'ИсходныйТипСодержимого, Лист of 'ВозможноДругойТипСодержимого )
если это выполнить этот алгоритм в каком-то конкретном ЯП, то получишь программу по клонированию. В общем говоря, эта модель может быть разбита на две подпрограммы, которые с точки зрения программирования тоже являются программами, т.к. программа может быть идентифицированная уникально по тройке - входной тип, выходной тип и преобразование между ними. Так часто и используют всякие контейнеры зависимостей и при хорошей декомпозиции ты можешь исполнять отдельные модули независимо, как самостоятельные программы.
Собственно, и в разметках ты задаешь содержимое, причем часто не особо важно какое, которое надо обработать по какими-то правилам, а сами правила задаешь контейнерами, которые уже имеют свои связанные инструкции, например текст может быть сдвинут, жирнее или вообще, как я уже писал про урл и изображение, одна категория объектов изменена на другую или, как вариант, можно задавать рекурсивно документы в документах, что бы изобразить что-то сумасшедшее.
Вот про оленей и сани это слегка не то. Тут надо сначала ввести определение транспортного средства. Может помогать с перемещением человека - значит транспортное средство. Да можно начать рассуждать про системы координат, навигацию, уравнение движения и остальное, но смысл останется тот же.
Вы отлично расписали как можно моделировать копир, но я всё таки говорил про то, что входные данные - не программа. В последнем абзаце Вы отметили про связанные инструкции, которые обрабатываются контейнерами. Эти связанные инструкции - язык? Нет. Правила, по которым нужно задавать эти инструкции - язык? Да, так как имеют формальную описанную структуру. Эти правила язык програмирования? Не уверен.
Но если следовать описанию из Вики, которое Вы привели (http://joyreactor.cc/post/3988486#comment18641119), то да, я вынужден с Вами согласиться. Всё - язык програмирования. То о чём говорите Вы, это размусоливание формулировки.
Для меня, на практике, "настоящий" ЯП это тот на котором можно описать вычисления, потому я и считаю полноту по Тьюрингу как признак.
Критерий тьюринговской полноты гнилой и безжизненный.
Язык надо характеризовать кругом задач, выразительностью, стоимостью разработки и т.д.
Внезапно, команды есть только в императивном программировании.
программируя на javascript, мне постоянно хочется вскрикнуть "Fuck this shit!", но я никогда не уверен, к чему относится this
Вы не знаете JS