Автор Тема: [Oberon7] "Man or Boy test" by Donald Knuth  (Прочитано 46820 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #90 : Июль 25, 2013, 04:39:31 pm »
как вы поймете по существующему синтаксису в каком случае нужно сохранять локальный контент процедуры, в  каком нет?

Очевидно, что надо сохранять то, на что есть ссылки из локальной процедуры. Нет?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #91 : Июль 25, 2013, 05:45:20 pm »
Про синтаксис я не понял -- у замыканий синтаксис такой же как у обычной процедуры. Может быть maliya имел в виду лямбды?
При чем тут синтаксис? Имелась ввиду естественно семантика замыкания контекста. Лямбды тут вообще не в тему.

Я, конечно, знаю, что в английском пишется "Манчестер", читается "Ливерпуль", но не настолько же.
maliya чётко написал:
Цитата: maliya
for my little knownledge of closure reason,I dont known what syntax should be add to cp if we want it.
Вот я и удивился, не понял, что он имел в виду...
to iterate is human, to recurse, divine

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

qp

  • Newbie
  • *
  • Сообщений: 28
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #92 : Июль 25, 2013, 09:09:49 pm »
Промелькнуло в одной из рассылок http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html, "Достижение сатори с помощью замыканий":

* * *

  The venerable master Qc Na was walking with his student, Anton.  Hoping to
prompt the master into a discussion, Anton said "Master, I have heard that
objects are a very good thing - is this true?"  Qc Na looked pityingly at
his student and replied, "Foolish pupil - objects are merely a poor man's
closures."

  Chastised, Anton took his leave from his master and returned to his cell,
intent on studying closures.  He carefully read the entire "Lambda: The
Ultimate..." series of papers and its cousins, and implemented a small
Scheme interpreter with a closure-based object system.  He learned much, and
looked forward to informing his master of his progress.

  On his next walk with Qc Na, Anton attempted to impress his master by
saying "Master, I have diligently studied the matter, and now understand
that objects are truly a poor man's closures."  Qc Na responded by hitting
Anton with his stick, saying "When will you learn? Closures are a poor man's
object."  At that moment, Anton became enlightened.

:)

DddIzer

  • Гость
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #93 : Июль 26, 2013, 09:52:25 am »
как вы поймете по существующему синтаксису в каком случае нужно сохранять локальный контент процедуры, в  каком нет?

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

maliya

  • Newbie
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #94 : Июль 26, 2013, 12:28:55 pm »
More trouble than benefit! keep language and compiler as simple as possible,though any problem can be solved by reference to other language's compiler,I think there is no need to continue to do: we are not good
at function programming just now, isn't it?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #95 : Июль 26, 2013, 03:45:31 pm »
Очевидно, что надо сохранять то, на что есть ссылки из локальной процедуры. Нет?
Да (т.е. локальные переменные допустимых типов внешней процедуры), но меня беспокоит другой вопрос.. а если по замыслу эти внешние переменные не являются обьектами замыкания (являются обычными глобальными переменными относительно этой процедуры), сохранять их в любом случае?

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #96 : Июль 26, 2013, 03:54:33 pm »
More trouble than benefit! keep language and compiler as simple as possible,though any problem can be solved by reference to other language's compiler,I think there is no need to continue to do: we are not good
at function programming just now, isn't it?

Yeah, adding closures to original CP/Oberon requires a big piece of work from compiler/runtime implementation stand point. Although closures do not open something new comparing to classical "objects" (qp's quote has a good reflection on this) they can make source code much more clearer. So eventually I'd like to see them in some oberon implementation.

DddIzer

  • Гость
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #97 : Июль 26, 2013, 04:26:45 pm »


Все "внешние" переменные, используемые в локальной процедуре являются объектами замыкания. Иначе оно не будет работать в общем случае. Если какую-то внешнюю переменную надо исключить из замыкания, но при этом ее значение используется в локальной функции, то такую переменную всегда можно передать как аргумент (т.е., скопировать и запомнить).
можно то можно, но не всегда удобно. Ладно, а ради чего все это делается в Обероне - с одной стороны, есть возможности создания обьектов с почти такими же свойствами (временем существования, степенью изолированности), с другой стороны, семантика Оберона ограничена...- более точно формулирую вопрос следующим образом: имеет ли смысл вводить замыкания не расширяя Оберон (по крайней мере его семантику)?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #98 : Июль 26, 2013, 04:57:27 pm »
Ладно, а ради чего все это делается в Обероне - с одной стороны, есть возможности создания обьектов с почти такими же свойствами (временем существования, степенью изолированности), с другой стороны, семантика Оберона ограничена...- более точно формулирую вопрос следующим образом: имеет ли смысл вводить замыкания не расширяя Оберон (по крайней мере его семантику)?

Да, именно поэтому и бродила раньше такая шутка: "Объекты -- это замыкания для бедных. Замыкания -- это объекты для бедных".

Не знаю, честно говоря, есть ли смысл вводить замыкания в Оберон -- там куда полезнее были бы шаблоны. Но просто это выглядит как-то искусственно -- есть все возможности что бы ввести замыкания, которые могут быть кому-то полезными, но для упрощения транслятора от этой возможности отказываются.
Впрочем, после отказа Вирта от перечислимого типа и от "forward declarations" я уже ничему не удивляюсь...  :-\
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #99 : Июль 26, 2013, 04:57:54 pm »
Ладно, а ради чего все это делается в Обероне - с одной стороны, есть возможности создания обьектов с почти такими же свойствами (временем существования, степенью изолированности), с другой стороны, семантика Оберона ограничена...- более точно формулирую вопрос следующим образом: имеет ли смысл вводить замыкания не расширяя Оберон (по крайней мере его семантику)?

Э... Не расширив семантику ввести не получится - там явно прописано, что с локальными процедурами нельзя ничего делать :) По поводу смысла я там писал выше для maliya - меньше городить на ровном месте. Представь простейший, классический и часто употребимый случай - фабрика. Ты спускаешь фабрику какой-то компоненте, чтоб она могла создавать другие компоненты ничего не зная о них. В текущем состоянии языка (ББ) это делается через абстрактную запись с методом Create. Запись надо описать, потом расширить, создать... Горка кода. Если бы были полноценные замыкания, то потребовалось бы только процедурная переменная.

P.S. Это на ББ горка кода. На обероне-07 - вообще ужос-ужос. Запись с процедурным полем + последующие касты... В общем переборщил Вирт с простотой, переборщил...

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #100 : Июль 26, 2013, 05:03:04 pm »
Although closures do not open something new comparing to classical "objects" (qp's quote has a good reflection on this) they can make source code much more clearer.

Что за "qp's quote"?
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #102 : Июль 26, 2013, 05:07:52 pm »
P.S. Это на ББ горка кода. На обероне-07 - вообще ужос-ужос. Запись с процедурным полем + последующие касты... В общем переборщил Вирт с простотой, переборщил...

"Язык, который был проще, чем нужно"

Давным-давно кто-то из людей, делавший компилятор из Оберона в байт-код.
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #103 : Июль 26, 2013, 05:14:22 pm »
P.S. Это на ББ горка кода. На обероне-07 - вообще ужос-ужос. Запись с процедурным полем + последующие касты... В общем переборщил Вирт с простотой, переборщил...

Поэтому если пилить О7 в сторону большей человечности, то добавление замыканий залечит вот такие вот проблемы с недо-ООП (можно будет хотя бы писать "object.method()"). При этом описание языка практически не пострадает. Правда эффективность с точки зрения машины ухудшится, да.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [Oberon7] "Man or Boy test" by Donald Knuth
« Ответ #104 : Июль 26, 2013, 05:17:21 pm »
"Язык, который был проще, чем нужно"

Угу - это хороший эпиграф к O7 :)