OberonCore
https://forum.oberoncore.ru/

Аналог procedure of object в КП
https://forum.oberoncore.ru/viewtopic.php?f=29&t=2125
Страница 4 из 9

Автор:  Valery Solovey [ Пятница, 10 Декабрь, 2010 15:01 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Galkov не пытается внести что-то новое. Он хочет более эффективное, но такое же читабельное (если рассматривать в отрыве от остального кода).

Автор:  Info21 [ Пятница, 10 Декабрь, 2010 15:31 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Valery Solovey писал(а):
Он хочет более эффективное, но такое же читабельное
Не вполне понимаю, что тут можно хотеть в плане эффективности по сравнению с тем, что есть в Оберонах.

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 11:49 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Valery Solovey писал(а):
Он хочет более эффективное, но такое же читабельное (если рассматривать в отрыве от остального кода).
У Вас очень хорошо и ПОНЯТНО получается подвести итог :D
А вообще-то, я уже ничего не хочу.
Скажем, понятно (по ответам) - это не форум разработчиков. Но ведь можно же явить просто научную честность... Не дождусь наверное.
Ибо ответ из серии: "докажите что это мне будет нужно" - применим к любому вопросу, по любому поводу, с абсолютно предсказуемыми результатами доказательства (любого).
Кстати говоря, я на Вас удивляюсь, Валерий: неужели там Вы не могли зарание предсказать результата :)

Но вот чего я обнаружил в ActiveReport/Delegate Procedure Types (btw: ну мне-то извинительно не знать сразу всех разновидностей Оберонов - но ведь НИКТО не показал пальцем же !!!):
Код:
TYPE
  MediaPlayer = OBJECT
    PROCEDURE Play; .... play a movie .... END Play;
    PROCEDURE Stop; .... stop movie .... END Stop;
  END MediaPlayer;

  ClickProc = PROCEDURE {DELEGATE};
  Button = OBJECT
    VAR
    onClick: ClickProc;
    caption: ARRAY 32 OF CHAR;

    PROCEDURE OnClick;
    BEGIN onClick END OnClick;

    PROCEDURE & Init(caption: ARRAY OF CHAR; onClick: ClickProc);
    BEGIN SELF.onClick := onClick; COPY(caption, SELF.caption)
    END Init;
  END Button;

PROCEDURE Init(p: MediaPlayer);
  VAR b0, b1, b2: Button;
BEGIN
(* Reboot -> call system reboot function *)
  NEW(b0, "Reboot", System.Reboot);
  (* MediaPlayer UI: bind buttons with player instance *)
  NEW(b1, "Play", p.Play);
  NEW(b2, "Stop", p.Stop);
END Init;
Казалось бы - ОНО...
Однако там же, в приложении "Active Oberon Syntax", магическим словом DELEGATE уже и не пахнет...
А господин Мюллер в своем диссере просто мимоходом (типа Miscellaneous) замечает:
Цитата:
Procedure types have been extended so that procedure variables can also store references to methods, not just to normal procedures. A procedure variable now also stores a reference to an object instance, which is NIL in the case of normal procedure variables. The type of a method is identical to that of a procedure with the same signature, making it compatible with procedure variables of the same procedure type.
Тоже непонятно ведь - неужели "барьеры" на использовании... Хотя, каким-нибудь хитрым регистровым соглашением это можно зарешать, наверное.

Может нам Украинские Коллеги распояснят ситуацию :?: :)
Как говорил классик: "... уже не в очках дело. Пусть скажут - они есть, или их нет"

Автор:  Ярослав Романченко [ Четверг, 16 Декабрь, 2010 13:04 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Galkov писал(а):
Однако там же, в приложении "Active Oberon Syntax", магическим словом DELEGATE уже и не пахнет...
Хоть и не пахнет но активно поддерживается, и более того, достаточно произвести поиск в коде системы A2 и можно увидеть, что не только поддерживается а ещё и активно используется.
Описание синтаксиса Active Oberon устарело, актуально поддерживаемый компилятором (PaCo) Active Oberon в некоторой степени отличается. Кроме того идёт работа над новым компилятором (OC) который будет включать как неотъемлемую часть ещё и новые динамические массивы и расширенные векторно/матрично/тензорные операции. Возможно в скором времени выйдет новое "Сообщение об Активном Обероне".
Что-то в основном только жителей Украины и интересует А2... :wink:

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 13:13 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

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

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

Посмотрите код (внимание - не мой!!!) выше с тремя кнопками и одним плэером. Если бы кнопка была одна - никакаих процедурных переменных и не нужно было бы. Жесткая "нервная связь" была бы вполне себе адекватна.
Но их три.
Согласен в этом случае хватило бы процедурного типа, имеющегося в классическом Обероне.
А также еще и скажу: что и без него можно было бы обойтись. Химия вполне справилась бы.
В данном конкретном примере с тремя кнопками и плэером.
Ну подумаешь - какой-то with пришлось бы ставить - он же типа всего "за семь тиков" делается
Что нам говорит Окамм ??? Правильно, не вводи новую сущность без необходимости. Осталось выяснить, что есть необходимость.
Так вот, введение новой сущности не нарушает данного принципа, если эффективность кода является показателем назначения (есть такой бюракратический термин).
Если мне пофиг на то, через какое место вырезаются гланды, тогда ДА - процедурный тип должен быть изгнан из языка.
Но Вирт его не изгнал. Следовательно, опять зафиксируем для себя вхождение эффективности результата в критерий "необходимости"

Так, пока мы договорились, что вышестоящий пример из ActiveReport, вполне мог бы обойтись и процедурными типами. "Условный рефлекс" такой, кторый можно и изменить в течении жизненного цикла. При желании-то...

Но я напомню, что природа занимается "метасистемными переходами" все время, а не один раз (склонировавши кнопочку два раза).
Давайте попробуем склонивать несколько раз всю подсистему (3 кнопки + плэер), и организовать из них новую систему (btw: более близкий к жизни пример я приводил в этом топике. В смысле - именно так я и делал, и использовал после этого).

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

И мне приятно, что в Оберон сообществе таки существуют люди, с которыми не надо вести на ту тему религиозных войн.
В смысле, понимают смысл Окамма/Калашникова, а не знакомые буквы в тексте выискивают.

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 13:15 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Ярослав Романченко писал(а):
Что-то в основном только жителей Украины и интересует А2... :wink:
И ведь что занимательно...
Я ведь тоже свое отбыл :lol: Северодонецк с 1984-2000

Автор:  Info21 [ Четверг, 16 Декабрь, 2010 13:41 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Galkov писал(а):
Info21 писал(а):
Не вполне понимаю, что тут можно хотеть в плане эффективности по сравнению с тем, что есть в Оберонах
Ну ладно давайте попробуем еще раз. ...
В смысле, понимают смысл Окамма/Калашникова, а не знакомые буквы в тексте выискивают.
Спасибо за комплимент, конечно, но ... "Could you say it ... shorter?" (C)

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 14:00 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Делегаты - ещё один объект, которым придётся управлять сборщику мусора...
Размер делегата становится 2*sizeof(pointer)...
Много технических нюансов.
А нужно всё равно редко. 7 тактов дороги только для встроенки. Ну так для низкоуровневых вещей отдельно можно расширить язык и спец. компилятор.

А в софте общего назначения провоцировать народ на делегаты вместо сообщений тоже незачем. Процедурные переменные вот крайне редко используются прикладниками. Больше callback-объекты.

Автор:  Ярослав Романченко [ Четверг, 16 Декабрь, 2010 15:02 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Илья Ермаков писал(а):
Процедурные переменные вот крайне редко используются прикладниками. Больше callback-объекты.
Ну не скажите, используются, используются :lol:

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 15:08 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Прикладниками?

Обычно "по инерции". Потому что в любой прикладной задаче выгоднее объект сразу заложить. ОбщЕе для развития. Ту же функцию представить удобнее объектом. Можно научить её потом всякое о себе рассказывать и сообщения обрабатывать. И т.п.

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 15:36 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Илья Ермаков писал(а):
Делегаты - ещё один объект, которым придётся управлять сборщику мусора...
Размер делегата становится 2*sizeof(pointer)...
Много технических нюансов.
Илья Евгеньевич, ну мы же все обсудили уже.
Не еще один, а ровно столько же.
"Химия" указывает на объект в хипе. Делегат - это встроенный тип, который тоже только один раз (столько же!!!) указывает в хип. Ничем он не хуже обыкновенного указательного типа. И заниматься им сборщику мусора надо ровно столько же, сколько и указательным типом.
Для сборщика мусора - это еще одна разновидность слота, не более.
Что Вы такое говорите... Какой такой "управляемый объект", побойтесь бога.


Илья Ермаков писал(а):
в софте общего назначения провоцировать народ на делегаты вместо сообщений тоже незачем.
Удивляюсь порой. Ну все Вы за народ знаете.
То, что приведено из ActiveReport - это вовсе НЕ объекты в хипе. Обыкновенный базовый тип. Причем не + к имеющимся, а вместо процедурного типа. Даже новую сущность не вводили, а расширили старую. Чтобы "метасистемные переходы" не имели ограничения на каскадность.
Тут как я думаю: если Вы считаете патерн "метасистемных переходов" не должен поддерживаться неким языком, то не надо называть его - языком общего назначения.

А народ (к каковому я себя причисляю), по опыту KOL-а, считает сии сущности значительно более простыми и понятными, чем соответствующий патерн от Банды 4-х.

Посмотрите просто на код из ActiveReport, и покажите пальцем на страшно провакационное место. Можно еще переписать этот же код (с тремя кнопками и плэером) на использование родовой шины, и попробовать убедить народ в его большей понятности.
Ничего у Вас не выйдет :P В смысле - не убедите, наверное.

_______________________________________________________
P.S. Илья. Мне показались Ваши рассуждения прекрасным примером "поставленной техники применения шаблонов". Раз делегат - значит как в додиезе. Раз как в додиезе - значит динамический объект. Так ? :)
Побойтесь бога. Слово Делегат произнесено даже не мной, а Обероноцами (очень активными типа)

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 16:27 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Не понимаю, как Вы собрались указывать на процедуру объекта не в хипе?

Что есть этот ваш PROCEDURE OF OBJECT внутри.

Это два указателя: адрес процедуры + адрес экземпляра, для которого вызывается процедура.

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

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 16:30 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Info21 писал(а):
Спасибо за комплимент, конечно, но ... "Could you say it ... shorter?" (C)

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

Насчет Could... Могу. И сэйнул бы, но опять же - не поймете ничего, и по этой уважительной причине объявите все это клеветой на Обероны.

Вот, скажем, очень короткое заключение: "если Вы считаете патерн "метасистемных переходов" не должен поддерживаться неким языком, то не надо называть его - языком общего назначения"
Т.е., AO - значительно в большей степени язык общего назначения, чем CP. Коротко и понятно.

Можно еще одно заключение сделать: природа использует как химию, так и безусловные рефлексы, так и условные рефлексы. Понятно кто за кем исторически появился. Но (внимание!!!) природа не выкидывает старых механизмов. Поэтому в этой аналогии становится актуальным вопрос - где те границы, когда наиболее эффективно (или понятно???) использование прямых процедурных вызовов, вызовов через процедурную переменную (обогащенную делегированием, естественно), или через родовую шину сообщений...

Для меня это пока открытый вопрос...

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 16:38 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Цитата:
Вот, скажем, очень короткое заключение: "если Вы считаете патерн "метасистемных переходов" не должен поддерживаться неким языком, то не надо называть его - языком общего назначения"
Т.е., AO - значительно в большей степени язык общего назначения, чем CP. Коротко и понятно.


С какой это стати некая "умозрительная заумь" Турчина (может, и любопытная для чтения на досуге, но...) должна становится критерием для оценки языков?

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 16:45 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Galkov писал(а):
Т.е., AO - значительно в большей степени язык общего назначения, чем CP. Коротко и понятно.


АО - в значительно меньшей степени язык общего назначения, чем КП, в силу того, что содержит всё большее количество узкоспециализированного мусора вроде перегрузки операций, матриц-векторов, ООП в стиле имитационного моделирования...

И вообще, что АО? Полигон для стьюдентов. Это, конечно, красивая тема для курсовой или диплома - чо-нить ещё воткнуть в компилятор.

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 16:48 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Илья Ермаков писал(а):
Не понимаю, как Вы собрались указывать на процедуру объекта не в хипе?
Что есть этот ваш PROCEDURE OF OBJECT внутри
Давайте немного уточним: я лично ничего не изобретал. Это все сто лет работает в Дельфи. И, оказывается - уже давно в AO.
Чего там понимать - взяли и посмотрели.
И никто никогда не напрягает мусоровоз - ну где Вы увидели хоть какой-то намек на какой-нибудь NEW из ActiveReport ???
И в Дельфи я ничего такого не припоминаю... Хучь убей.

Грубо говоря - я не понимаю, чего Вы не понимаете :)
Возможно, станет понятно, если Вы "покажите пальцем на страшно провакационное место"
По буковкам-то и установим наше разночтение.

Илья Ермаков писал(а):
Это два указателя: адрес процедуры + адрес экземпляра, для которого вызывается процедура
Ну да. Для Дельфи. Для AO - вот я привел цитату из Мюллера. Очень похоже, что больше про это у него ни слова (в смысле - не дочитал еще).
Ну я вижу, что это один к одному как procedure of object в Дельфи. Но в упор не вижу вновь созданных динамических объектов. И где Вы их увидели - не пойму...

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

Автор:  Galkov [ Четверг, 16 Декабрь, 2010 16:56 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

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

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

Автор:  Ярослав Романченко [ Четверг, 16 Декабрь, 2010 17:00 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Вот, хотя-бы для паттерна Strategy viewtopic.php?p=55707#p55707 очень полезен процедурный тип, но это даже не ООП, а как-раз жесткая критика ООП :D

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 17:00 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

При чём тут уважаемый Валентин Турчин.
Он не несёт ответственность, что его философского характера опусы кто-то будет приплетать как аргумент в конкретных инженерных вопросах.

Автор:  Илья Ермаков [ Четверг, 16 Декабрь, 2010 17:01 ]
Заголовок сообщения:  Re: Аналог procedure of object в КП

Цитата:
что я лично назвал эту "заумь" - ООП


Да нет никакого ООП... как авторитетной теории, с позиций которой можно что-то доказывать.

Есть механизмы конкретные.

Страница 4 из 9 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/