LinuxForum.Fans
Тема

Что вы понимаете под словосочетанием "Язык программирования"?

Автор: elve 49 сообщений 11008 просмотров
#83497

Хоссспидяя.... Сколько горячих парней.... :)

Остыньте уже. Я лишь объяснил почему лично я написал эту абривиатуру. И если вы внимательно почитаете мои посты то я не говорил о том, что сказать "ХТМЛ -язык программирования" это технически грамотно.

UPD:

язык прямо таки чешется подлить масла в огонь.. :P
Надеюсь вы поняли, что я понимаю: строго говоря HTML не язык программирования. Но давайте "пофиософствуем".
Итак.
Предположим есть задача вывести некий текст на экран. Текст стоит из заголовка и одного абзаца. Итак пишем программу:
(языконезвисимый код :) )

text

 1. // Блок кода вывод заголовка 
 2. Некая_Операция_Предваряющая_Вывод_Заголовка
 3. Вывод_Заголовка
 4.  Некая_Операция_Завершающая_Вывод_Заголовка
 5. Некая_Операция_Предваряющая_Вывод_Параграфа
 6. Вывод_Параграфа
 7.  Некая_Операция_Завершающая_Вывод_Параграфа

По большому счету важны и обязательны для решения нашей задачи только строки 3 и 6.
Идем дальше. Согласитесь компьютеру на наш листинг глубоко фиолетово. На понятый компу язык перводит интерпретатор команд.
А мы в свою очередь должны написать наш листинг на понятном интерпретатору языке. Итак пишем. (Заголовок я решил выделить лишь переводом строки для легкости)

text

#!/bin/sh
echo Наш заголовок
echo А здесь идет безумно длинный текст абзаца. Содержащий множество букав.
text

<?php
print  "Наш заголовок\necho А здесь идет безумно длинный текст абзаца. Содержащий множество букав.";
?>
text

#include <iostream>
int main()
{
  cout << 'Наш заголовок\necho А здесь идет безумно длинный текст абзаца. Содержащий множество букав.';
  return 0;
}

Итак в результате мы имеем на экране выведенные строки. Для вывода первых двух нам нужен интерпретатор с именем нашего сырца в качестве параметра. (для первого это скрыто от глаз). Для третьего компилятор.
Ну, а теперь напишем

text

<h1>Наш заголовок</h1>
<p>echo А здесь идет безумно длинный текст абзаца. Содержащий множество букав.</p>

Как и в первых трех примерах мы сообщили о своем желании увидеть на экране заголовок и параграф. И как в первых трех случаях мы его увидим при помощи "интерпретатора" - браузера.

Так в чем же отличие, кроме простого определения?
Да в первых трех случаях интерпретаторы позволяют намного больше различных действий выполнять, случае с ХТМЛ только вывод текста (ну или какой-то графической инфы) . Ну да. Совершенно верно. А разве у нас больше нет узконаправленных ЯП?
Нечеткие инструкции? А в каком они месте менее четкие чем в первых трех вариантах?
Текст в браузере может выглядеть совершенно по разному? Ну так давайте все же рассматривать умолчальные случаи. Ведь можно в консоли настроить хитрую раскраску, можно переопределить какието функции и т.п.

Пройдемся по вики:

text

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

Компью́терная програ́мма — последовательность инструкций, предназначенная для исполнения устройством управления вычислительной машины. 

Ну да вот h1 а вот p.....

text

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

Угу.

Идем дальше. Вроде нормальный ЯП позволяет получать и некий функционал. Да HTML этого мало но есть:

text

<input type="radio" name="test">
<input type="radio" name="test">

Щелкаем и при этом чеканут только один радиобокс. Да, вы скажите это уже браузерный код работает. (более того порой не то, что браузерный в элементах форм, а вообще системный)
Ну и что? А вот такая "прога":

text

#include <QtGui/QApplication>
#include <QCalendarWidget>

int main(int argc, char *argv[]) { QApplication a(argc, argv); QCalendarWidget w; w.show(); return a.exec(); }

А ведь многие объекты (касается всех ОС и многих ЯП) содержаться, скажем, в общих либах. Да и написаны могут быть третьем ЯП.

#83502
voral написал:
Как и в первых трех примерах мы сообщили о своем желании увидеть на экране заголовок и параграф. И как в первых трех случаях мы его увидим при помощи "интерпретатора" - браузера.

Так в чем же отличие, кроме простого определения?

а где тег, что-бы вместо "17+13" вывел "тридцать"?

#83527
drBatty написал:
а где тег, что-бы вместо "17+13" вывел "тридцать"?

А разве нет ЯП с узкоограниченной сферой применения?
Да и в определении ЯП нет пункта об обязательной возможности арифметических действий....

#83540

Вот например в 1С есть довольно-таки мощный встроенный язык. Чем не язык программирования?

#83548
voral написал:
А разве нет ЯП с узкоограниченной сферой применения?

есть. sed.

voral написал:
Да и в определении ЯП нет пункта об обязательной возможности арифметических действий....

нет. вот в sed нету. и тем не менее, sed - это ЯП. примитивный, тупой, жутко тупой. Но - ЯП.
там нет действий, там даже нет чисел! но есть всё, для того, что-бы выполнить любую задачу. в т.ч. и сложение. Хотя делать сложение на sed, это... это нецензурно.

вот:

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

http://ru.wikipedia.org/wiki/Полнота_по_Тьюрингу
ИМХО ЯП - это язык для вычислителя полного по Тьюрингу.
Ну... неполные по Тьюрингу граматики тоже в некотором смысле ЯП, некоторые даже являются компилируемыми, например всем известные регулярные выражения (т.е. один раз скомпиллированное RE можно использовать многократно, например в той-же sed или используя glibc в программе на C). Вот только всё что угодно на RE не напишешь, есть очень много алгоритмов, которые не реализуются на RE принципиально.

Moohin написал:
Вот например в 1С есть довольно-таки мощный встроенный язык. Чем не язык программирования?

это их бейсик по-русский? который "ИДИ НА!.. 10"
я всегда ржал над программами :)
и всё же... Это полноценный ЯП. Хотя и смешной )

#83554
voral написал:
Идем дальше. Вроде нормальный ЯП позволяет получать и некий функционал. Да HTML этого мало но есть:

<input type="radio" name="test">
<input type="radio" name="test">

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

HTML тот-же текст, только там алфавит богаче, а ещё мы можем менять свойства каждого элемента. Тоже самое - Linux-терминал. Там кроме букв и цифр можно двигать курсор, менять цвет букв, очищать экран, и прочее. Но это-же не язык. Просто терминал, для вывода информации. Кружок там не нарисуешь, разве-что можно кружок нарисовать на ЯП, и вывести на терминал.

#83559
drBatty написал:

это не функционал реализованный HTML, это просто перечисление функций, которые обязаны быть реализованы в браузере.

Ну так я уже вспоминал, что и в ЯП часто вызываются объекты из сторонних либ. Которые, в свою очередь, могут быть написаны на любом другом ЯП.

drBatty написал:

HTML тот-же текст, только там алфавит богаче,

Не согласен. <h1> - это не символ предназначенный для вывода. Это управляющая конструкция сообщающая браузеру: "Автор хочет вывести последующий текст в виде заголовка. Давайте загоним в либу функию (код ниже не относится к конкретному ЯП)


function header(stringtype str) {
print str;
}

Далее в нашем проекте пишем:

text
header("Hello. world!");

ну и чем это отличается
от

text
<h1>Hello, world!</h1>

Да ни чем. Лишь разные формы записи и разные интерпретаторы.
Подозреваю, что даже в сях при помощи инструкций компилятора можно замутить так, чтоб можно было писать в коде <h1>...</h1> :)

#83561
drBatty написал:

это не функционал реализованный HTML, это просто перечисление функций,

Кстати, вспомнилось. Кажется в делфе смотрел, что то в исходниках стандартных классов. Видел, что кое что почти полностью реализовано не на Pascal, а на asm........

#83565
drBatty написал:

ИМХО ЯП - это язык для вычислителя полного по Тьюрингу.

Хм. Но ни где не сказано, что ЯП должен быть тьюринг-полным.

Кроме того. Давайте несколько упростим виковское определение:
"тьюринг-полным языком называется язык, всем элементам которого можно поставить в соответствие алгоритмы для машины Тьюринга."

Ну и читаем если на входе <h1> переходим в сотстояние вывода зоголовка..... (Естественно это ну очень уж упрощено)

Войдите или зарегистрируйтесь, чтобы ответить.