OberonCore
https://forum.oberoncore.ru/

Тотальный HandleMsg и базовый Object
https://forum.oberoncore.ru/viewtopic.php?f=127&t=4940
Страница 1 из 2

Автор:  Илья Ермаков [ Вторник, 14 Январь, 2014 12:21 ]
Заголовок сообщения:  Тотальный HandleMsg и базовый Object

В свете того, что "все пути приводят к HandleMsg":
http://obertone.ru/doku.php?id=bbextendnohost

стоит, думаю, обдумать этот вопрос :)

Если любой абстрактный тип каркаса имеет HandleMsg, то никаких проблем с расширяемостью нет.
А пока в базовой поставке этого нет, то проблемы с расширяемостью будут постоянные.

Т.е. стоит аккуратно подумать о том, либо:
1) Во все типы каркасы, где этого ещё нет (Stores, Files) ввести HandleMsg - в базовой сборке.
2) Либо вообще ввести единый базовый тип Object с таким HandleMsg.

Автор:  Пётр Кушнир [ Вторник, 14 Январь, 2014 12:36 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

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

Автор:  Илья Ермаков [ Вторник, 14 Январь, 2014 12:46 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

В каком смысле "деталь"? )

Автор:  Пётр Кушнир [ Вторник, 14 Январь, 2014 12:53 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Для Stores и наследников кто-то предлагал ввести доменную шину (.HandleDomainMsg), было бы достаточно.
Для всяких Files, Ports, Windows необходимость сообщений назрела. Но иметь общий предок для File и Window это какой-то оверхед.
А при создании новых системных абстрактных интерфейсов можно вообще исключить методы, все кроме хэндлера.

Илья Ермаков писал(а):
В каком смысле "деталь"? )

Вспоминая вот эту тему viewtopic.php?f=47&t=4175
Возможна ли реализация более удобного сервиса деталей без модификации ядра? Ну или с расширением функций ядра в виде плагина.

Автор:  Евгений Темиргалеев [ Вторник, 14 Январь, 2014 14:35 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

И, товарищи, не зацикливайтесь на объектах.

Автор:  Пётр Кушнир [ Вторник, 14 Январь, 2014 16:12 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Евгений Темиргалеев писал(а):
И, товарищи, не зацикливайтесь на объектах.

А какой Ваш вариант?

Автор:  Илья Ермаков [ Вторник, 14 Январь, 2014 16:44 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Пётр Кушнир писал(а):
Вспоминая вот эту тему viewtopic.php?f=47&t=4175
Возможна ли реализация более удобного сервиса деталей без модификации ядра? Ну или с расширением функций ядра в виде плагина.


Да это всё узкоспециальная вещь )

Автор:  Info21 [ Среда, 15 Январь, 2014 22:22 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Пётр Кушнир писал(а):
Для Stores и наследников кто-то предлагал ввести доменную шину (.HandleDomainMsg), было бы достаточно.
Предлагал и продолжаю.

Автор:  Пётр Кушнир [ Вторник, 18 Февраль, 2014 09:48 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Еще можно сделать необязательный метод любому объекту, типа FINALIZE только HANDLE.
Тогда базовый Object не нужен.

Автор:  Илья Ермаков [ Вторник, 18 Февраль, 2014 10:18 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Да, но это изменение языка уже и компилятора.

Автор:  Пётр Кушнир [ Вторник, 18 Февраль, 2014 11:23 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Но у ядра же есть скрытые функции по управлению методами, может компилятору и не нужно добавлять метод самостоятельно, достаточно средствами ядра найти метод.

Автор:  Илья Ермаков [ Вторник, 18 Февраль, 2014 11:56 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Это будет очень дорого обходиться...

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

Но какая-то уже больно рантаймо-специфичная семантика уже, не хотелось бы.

Автор:  Евгений Темиргалеев [ Вторник, 18 Февраль, 2014 11:59 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Завязываясь на какие-либо функции ядра, нужно не забывать, что ядро --- это конкретная платформозависимая реализация. А не нечто перманентное в долгосрочных перспективах.

Автор:  Пётр Кушнир [ Вторник, 18 Февраль, 2014 12:02 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

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

Автор:  Евгений Темиргалеев [ Вторник, 18 Февраль, 2014 12:08 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Ядро должно обеспечить определённый функционал. Способ реализации и скрытый интерфейс это никак не фиксирует.

Автор:  Илья Ермаков [ Вторник, 18 Февраль, 2014 12:16 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Да, но в случае финализаторов - это поддержка семантики, закреплённой в языке.

Автор:  Пётр Кушнир [ Вторник, 18 Февраль, 2014 12:26 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Ну для решения одной задачи "добавить HANDLE" достаточно того, что ядро уже имеет возможность пройтись по таблице методов. Не нужно менять язык. И зависимости от хоста (ядра) мы уже обсуждали. Осталось только получить возможность найти в нужный момент нужный метод конкретного объекта, и вызвать его.

У финализаторов в ядре есть преимущество, конечно. Они вычисляются при создании объекта, и хранятся в списке.

Автор:  Илья Ермаков [ Вторник, 18 Февраль, 2014 12:35 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

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

Автор:  Пётр Кушнир [ Вторник, 18 Февраль, 2014 12:43 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Я просто не сильно понимаю на этом уровне :)

Автор:  Илья Ермаков [ Вторник, 18 Февраль, 2014 12:55 ]
Заголовок сообщения:  Re: Тотальный HandleMsg и базовый Object

Когда Вы пишите v.Do, то компилятор шьёт код:
полезть по указателю v-4
взять оттуда тег типа - адрес Kernel.Type
пойти на -N от этого адреса (где виртуальная таблица методов)

Вот этот -N известен на этапе компиляции (т.к. интерфейс v статически известен, в символьном файле).
И он прошивается в код константой.

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