Автор Тема: Squirrel  (Прочитано 36458 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Squirrel
« Ответ #30 : Апрель 28, 2013, 02:45:09 pm »
В любом компилируемом языке, есть стандартные конструкции. Которые позволяют оперировать переменными. Алгоритмы + структуры данных = программы. А значит можно написать всё.

Мда...

Ну, во-первых компилируемых ЯП не существует.

Во-вторых компилируемость к рассматриваемому тобой вопросу не имеет никакого отношения в принципе.

В третьих, переменные (если ты подразумеваешь изменяемые переменные) тут не в тему - они не обязательны.

Ну и в четвертых - то о чем ты говоришь, называется вычислимостью и полнотой по Тьюрингу. Все полные по Тьюрингу языки эквивалентны в том смысле, что алгоритм реализованный на одном можно реализовать и на другом. Но тут есть нюанс - алгоритм это не приложение. Соответственно если взять два разных ЯП полных по Тьюрингу, то несмотря на то, что на обоих реализуется один и тот же класс алгоритмов, возможности в плане написания на них приложений разные. То есть могут существовать такие классы приложений, что они реализуемы на языке А но не реализуемы на языке Б.

Ну и частный нюанс - иногда корректность данных выдаваемых алгоритмом зависит от того, КОГДА (то есть за какое время) эти данные поступят на выход.

Так что вопросы программирования и возможностей ЯП не ограничиваются лишь полнотой по Тьюрингу.

И это я пока даже не начал говорить о человеческом факторе, а ЯП все же (за редким исключением) создаются для человеков, и этот фактор один из важнейших в программировании.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Squirrel
« Ответ #31 : Апрель 28, 2013, 02:49:36 pm »


Есть ли конкретные примеры. Вроде так как в языке x отсутствует фича a, реализация конктретных алгоритмов невозможна, что сужает круг применения данного языка.
Нет... ЯВУ  которые поддерживают полностью императивную парадигму эквивалентны (в ее рамках).. разумеется, с точки зрения алгоритмического решения задачи (т.е возможности перевести систему из эквивалентного начального состояния в  конечное с помощью эквивалентного по результату алгоритма).. а не самого алгоритма (конечной последовательности действий).И, разумеется,  они не равноценны с точки зрения удобства  описания этой системы, конкретной последовательности действий, и  производительности генерируемого кода..
У языка Тьюринга имеративная парадигма? А у Марковского языка?
Y = λf.(λx.f (x x)) (λx.f (x x))

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Squirrel
« Ответ #32 : Апрель 28, 2013, 02:53:36 pm »
valexey_u

Цитировать
Ну и в четвертых - то о чем ты говоришь, называется вычислимостью и полнотой по Тьюрингу. Все полные по Тьюрингу языки эквивалентны в том смысле, что алгоритм реализованный на одном можно реализовать и на другом. Но тут есть нюанс - алгоритм это не приложение. Соответственно если взять два разных ЯП полных по Тьюрингу, то несмотря на то, что на обоих реализуется один и тот же класс алгоритмов, возможности в плане написания на них приложений разные. То есть могут существовать такие классы приложений, что они реализуемы на языке А но не реализуемы на языке Б.

Можно несколько примеров, что бы лучше в голове улеглось.

DddIzer

  • Гость
Re: Squirrel
« Ответ #33 : Апрель 28, 2013, 02:54:34 pm »


Даже не знал, что в паскале такое есть. Для чего вообще, нужны такие конструкции с подвохом?
а причем здесь подвох? ... тут все OK - тело цикла может ВООБЩЕ отсутствовать (если в условии есть побочный эффект)..  просто , в случае Си (С++) возможностей реализовать такую ситуацию на порядок больше (рассмотрите оператор  следования (,), и  for  вместе с семантикой присваивания). Но данном в конкретном случае..  я говорю о банальной ОПЕЧАТКЕ которую тяжело найти...

DddIzer

  • Гость
Re: Squirrel
« Ответ #34 : Апрель 28, 2013, 02:55:51 pm »

У языка Тьюринга имеративная парадигма? А у Марковского языка?
я сказал, то что сказал.. и сказал ЭТО для того, что бы не вступать в подобные дискуссии.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Squirrel
« Ответ #35 : Апрель 28, 2013, 03:02:12 pm »
DddIzer

Цитировать
а причем здесь подвох? ... тут все OK - тело цикла может ВООБЩЕ отсутствовать (если в условии есть побочный эффект)..

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

Цитировать
Но данном в конкретном случае..  я говорю о банальной ОПЕЧАТКЕ которую тяжело найти...

Теперь понятно, по какому пути идёт Вирт.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Squirrel
« Ответ #36 : Апрель 28, 2013, 03:05:09 pm »
valexey_u

Цитировать
Ну и в четвертых - то о чем ты говоришь, называется вычислимостью и полнотой по Тьюрингу. Все полные по Тьюрингу языки эквивалентны в том смысле, что алгоритм реализованный на одном можно реализовать и на другом. Но тут есть нюанс - алгоритм это не приложение. Соответственно если взять два разных ЯП полных по Тьюрингу, то несмотря на то, что на обоих реализуется один и тот же класс алгоритмов, возможности в плане написания на них приложений разные. То есть могут существовать такие классы приложений, что они реализуемы на языке А но не реализуемы на языке Б.

Можно несколько примеров, что бы лучше в голове улеглось.
Ну, например нет ни одного алгоритма который можно было бы реализовать на Обероне, но нельзя на брейнфаке.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Squirrel
« Ответ #37 : Апрель 28, 2013, 03:14:28 pm »
Это я понял, но для чего это нужно? Такая конструкция лучше оптимизируется, или так нравилось создателю языка и т.д

Если вы возьмете  классиков жанра "K&R"  - то  исключительно ради производительности...(т.е. дает ПРИНЦИПИАЛЬНУЮ возможность писать родственный исполнителю код, особенно выгодно если задача формулируется в терминах близких к исполнителю и достаточно массивна, что бы откинуть мысль работать на уровне ассемблера).. имхо для классных специалистов знающих особенности реализации (компилятора) и архитектуру процессора.. это самое то.. а вот для начинающих (тем более на классе задач решаемых ими)- это "шаманские пляски и наставления"... из серии.. "так писали классики", "профессионалы пишут именно так"," замечено, что в некоторых случая использование адресной арифметики ведет увеличению производительности генерируемого компилятором кода".

DddIzer

  • Гость
Re: Squirrel
« Ответ #38 : Апрель 28, 2013, 03:31:28 pm »
... ну а если отмести в сторону  вудуизм... то, вообще говоря, вариативность выбора конкретной последовательности действий дает определенную вероятность того, что запись с помощью нее некоторого алгоритма будет оптимальной в некотором смысле (несильно отличается от традиционной нотации, записывается с минимальным количеством знаков, оставаясь при этом вполне читаемой и обозримой...).

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Squirrel
« Ответ #39 : Апрель 28, 2013, 05:26:55 pm »
DddIzer

Цитировать
а причем здесь подвох? ... тут все OK - тело цикла может ВООБЩЕ отсутствовать (если в условии есть побочный эффект)..

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

Цитировать
Но данном в конкретном случае..  я говорю о банальной ОПЕЧАТКЕ которую тяжело найти...

Теперь понятно, по какому пути идёт Вирт.

Для того, что бы уменьшить вероятность подобных подвохов, в языке Ада, например, кроме таких неопускаемых операторных скобок, как if-end if, loop-end loop, для указания пустого тела того же цикла необходимо явно написать оператор null (аналог ассемблерной команды NOP), иначе будет ощибка компиляции...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DddIzer

  • Гость
Re: Squirrel
« Ответ #40 : Апрель 28, 2013, 05:45:10 pm »

Для того, что бы уменьшить вероятность подобных подвохов, в языке Ада, например, кроме таких неопускаемых операторных скобок, как if-end if, loop-end loop, для указания пустого тела того же цикла необходимо явно написать оператор null (аналог ассемблерной команды NOP), иначе будет ощибка компиляции...
я вот другое не понял... нафига Вирт оставил их (операторные скобки) в Обероне... (в Аде  и С,С++ -  понятно, с помощью их можно организовать локальное окружение)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Squirrel
« Ответ #41 : Апрель 28, 2013, 06:02:07 pm »
Операторные скобки в Обероне? O_o

DddIzer

  • Гость
Re: Squirrel
« Ответ #42 : Апрель 28, 2013, 07:46:46 pm »
Операторные скобки в Обероне? O_o
а что вас так удивляет? ( BEGIN .... END  - еще с незапамятных времен  -позволяет группировать произвольное количество операторов как и { ... }, только не очень понятно зачем это в случае Оберона) -  модуль и тело процедуры , имхо, можно и нужно трактовать как отдельные конструкции.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Squirrel
« Ответ #43 : Апрель 28, 2013, 07:52:52 pm »
Тык в обероне их же нет.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Squirrel
« Ответ #44 : Апрель 28, 2013, 07:57:03 pm »
Тык в обероне их же нет.
Подтверждаю - блоков в Обероне нет.
Y = λf.(λx.f (x x)) (λx.f (x x))