Автор Тема: [CP] Вопрос про Message Bus.  (Прочитано 10831 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
[CP] Вопрос про Message Bus.
« : Февраль 01, 2013, 05:13:17 pm »
Вопрос собственно, наверно к Илье Ермакову: правильно ли я понимаю, что в в случае Message Bus, все сообщения сидят на стеке? Или они все же в массивах где-то в куче обитают?

Интересно сколько существует сообщений одновременно - намного ли их больше чем типов сообщений? И являются ли в твоем случае эти сообщения мутабельными? Могут ли обработчики сообщений напрямую вызывать других обработчиков с параметрами, или же их дергает только некий центральный менеджер?

Вообще, можешь краткий упрощенный пример того как это все используется накидать?
Y = λf.(λx.f (x x)) (λx.f (x x))

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #1 : Февраль 01, 2013, 08:09:46 pm »
Исходники же есть.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [CP] Вопрос про Message Bus.
« Ответ #2 : Февраль 01, 2013, 08:13:23 pm »
Исходники же есть.
Реализаций оного Message Bus'а полно. Меня интересует не только реализация, но и применение.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #3 : Февраль 01, 2013, 08:16:48 pm »
Применяют ведь конкретную реализацию.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [CP] Вопрос про Message Bus.
« Ответ #4 : Февраль 01, 2013, 08:21:06 pm »
Применяют ведь конкретную реализацию.
Применяют минимум три разные реализации (если судить по оберонкору).

Кроме того, меня не интересует все что связано с метапрограммированием, а те реализации это дело активно используют.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #5 : Февраль 01, 2013, 08:28:18 pm »
Как же ты без метапрограммирования модули обнаружишь? Будешь хуки везде таскать?

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #6 : Февраль 01, 2013, 08:28:59 pm »
А если ты про объекты, то посмотри на Views, там же везде сообщения.

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #7 : Февраль 01, 2013, 08:45:57 pm »
Применяют минимум три разные реализации (если судить по оберонкору).
Я к тому, что применяют же реализацию, поэтому всё что тебя волнует можно реализовать как угодно.
Вот у отображений методы только для реализации, не вызвать их извне, только через сервис. А у модулей - экспортированная процедура - вызывай, кто хочешь.
Реализация Абф и наследники - не хранит сообщение и синхронно сливает его в хендлеры, реализация блаблабла - хранит сообщение и работает с массивами, организуя асинхронную рассылку и очередь.
Странно всё, короче.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [CP] Вопрос про Message Bus.
« Ответ #8 : Февраль 01, 2013, 08:50:46 pm »
Применяют минимум три разные реализации (если судить по оберонкору).
Я к тому, что применяют же реализацию, поэтому всё что тебя волнует можно реализовать как угодно.
Вот у отображений методы только для реализации, не вызвать их извне, только через сервис. А у модулей - экспортированная процедура - вызывай, кто хочешь.
Реализация Абф и наследники - не хранит сообщение и синхронно сливает его в хендлеры, реализация блаблабла - хранит сообщение и работает с массивами, организуя асинхронную рассылку и очередь.
Странно всё, короче.
У Ильи была позиция "не мусорить", то есть его использование концепции таково, что сборщик мусора вообще никак не задействуется. Вот мне и интересны детали (как задач которые этим решаются, то есть применение, так и реализация). То есть самого механизма разбрасывания сообщений. Как именно хендлеры находят - не интересно.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #9 : Февраль 01, 2013, 09:07:51 pm »
через VAR параметр.
все могут дёргать всех, в том числе и прям из хендлера, одна месага инициирует отправку другой.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [CP] Вопрос про Message Bus.
« Ответ #10 : Февраль 01, 2013, 09:30:15 pm »
через VAR параметр.
все могут дёргать всех, в том числе и прям из хендлера, одна месага инициирует отправку другой.
Я это понимаю, но хочется подробностей. Собственно список вопросов я уже озвучил в начале. Очевидно, что сообщения не могут быть тут на стеке если их непредсказуемо много. В общем, хочу деталей использования от Ильи.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #11 : Февраль 01, 2013, 09:55:07 pm »
Другой вопрос, зачем такое писать?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [CP] Вопрос про Message Bus.
« Ответ #12 : Февраль 01, 2013, 09:56:05 pm »
Другой вопрос, зачем такое писать?
Какое?
Y = λf.(λx.f (x x)) (λx.f (x x))

kkk

  • Гость
Re: [CP] Вопрос про Message Bus.
« Ответ #13 : Февраль 01, 2013, 10:05:47 pm »
зачем работать с сообщениями до взрыва стека?

X512

  • Newbie
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: [CP] Вопрос про Message Bus.
« Ответ #14 : Февраль 02, 2013, 07:06:35 am »
Вопрос собственно, наверно к Илье Ермакову: правильно ли я понимаю, что в в случае Message Bus, все сообщения сидят на стеке? Или они все же в массивах где-то в куче обитают?

Интересно сколько существует сообщений одновременно - намного ли их больше чем типов сообщений? И являются ли в твоем случае эти сообщения мутабельными? Могут ли обработчики сообщений напрямую вызывать других обработчиков с параметрами, или же их дергает только некий центральный менеджер?

Вообще, можешь краткий упрощенный пример того как это все используется накидать?
Сообщения хранятся на стеке. Например сообщения ввода выделяются в модуле HostWindows.

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

Для сообщений ввода используется очередь сообщений Win32. При принятии сообщения оно конвертируется в родной формат в модуле HostWindows и передаётся в Views.ForwardCtrlMsg, который вызывает обработчики отображений. Можете поставить HALT(0) в какой-нибудь обработчик и посмотреть как происходит доставка сообщения.

Сообщения являются изменяемыми. Это активно используется в сообщениях свойств.