OberonCore
https://forum.oberoncore.ru/

Что может означать этот трап?
https://forum.oberoncore.ru/viewtopic.php?f=24&t=2645
Страница 2 из 2

Автор:  Илья Ермаков [ Вторник, 18 Май, 2010 07:17 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Хм. Да. Контроллер - хранимый объект, это я упустил из виду.
Одна из слабостей Stores - "прошитость" порождения объекта.

Автор:  Info21 [ Вторник, 18 Май, 2010 07:19 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Илья Ермаков писал(а):
Одна из слабостей Stores - "прошитость" порождения объекта.
Можно пояснить?

Автор:  Илья Ермаков [ Вторник, 18 Май, 2010 07:36 ]
Заголовок сообщения:  Re: Что может означать этот трап?

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

Как организуется с виртуализацией:
При сохранении записывается не имя типа, а имя переменной с фабрикой. Например, "FormControllers.storeDir". При загрузке идёт обращение FormControllers.storeDir.New(). Имя фабрики можно узнавать сообщением у самого объекта.

Автор:  Info21 [ Вторник, 18 Май, 2010 07:47 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Илья Ермаков писал(а):
При сохранении записывается не имя типа, а имя переменной с фабрикой. Например, "FormControllers.storeDir". При загрузке идёт обращение FormControllers.storeDir.New(). Имя фабрики можно узнавать сообщением у самого объекта.
Это сложный механизм.

Базовый всё равно не отменяется -- и он нужен постоянно.

Нужен сложный -- используйте сложный, какие проблемы.

Автор:  Илья Ермаков [ Вторник, 18 Май, 2010 07:50 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Я думаю, что Stores просто недоэволюционировал до вот этой "точки расширяемости" (эта часть каркаса - Files-Stores - очень древняя). Простота - прежде всего; но простоту можно "замораживать" тогда, когда в неё заложена точка расширения. А тут как раз место нерасширяемости, не раз уже мешавшее.

Использовать тот вариант, который я описал, со Stores - не получается, только со своими вариантами хранимости... Stores без переделки не расширить.

Впрочем, я не пытаюсь "раздувать проблему". Всё решаемо, как обычно.

Автор:  Info21 [ Вторник, 18 Май, 2010 08:33 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Илья Ермаков писал(а):
Я думаю, что Stores просто недоэволюционировал до вот этой "точки расширяемости" (эта часть каркаса - Files-Stores - очень древняя). ...
Да, есть ощущение, что Stores нужно бы доуточнить.
Но это очень ответственная часть.

Автор:  Иван Горячев [ Вторник, 18 Май, 2010 09:06 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Илья Ермаков писал(а):
Я думаю, что Stores просто недоэволюционировал до вот этой "точки расширяемости" (эта часть каркаса - Files-Stores - очень древняя).


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

Автор:  Александр Ильин [ Вторник, 18 Май, 2010 09:34 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Лучше всего спросить в списке рассылки, почему так сделано, и в каком направлении автор видел возможные пути развития (может быть, проблема и решение уже известны, просто руки не дошли реализовать). Потом предложить доработанный модуль для включения в очередную версию ББ.

Автор:  Евгений Темиргалеев [ Вторник, 18 Май, 2010 15:15 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Info21 писал(а):
Илья Ермаков писал(а):
При сохранении записывается не имя типа, а имя переменной с фабрикой. Например, "FormControllers.storeDir". При загрузке идёт обращение FormControllers.storeDir.New(). Имя фабрики можно узнавать сообщением у самого объекта.
Это сложный механизм.

Базовый всё равно не отменяется -- и он нужен постоянно.
как один из вариантов:
- в модуле типа у опред. поцедуры запрашивать новый объект. Процедура одна на все типы модуля, производные от Stores
- нет процедуры или она объект не создала - действует базовый механизм

Автор:  Иван Кузьмицкий [ Вторник, 03 Май, 2011 10:14 ]
Заголовок сообщения:  Re: Что может означать этот трап?

Этот трап начал возникать снова, пришлось копать.

В процессе раскапывания приходим к важному требованию - в реализации метода Restore ни в коем случае нельзя инициировать обновление отображений с помощью Views.Update. Вообще, при отрисовке нельзя предпринимать ничего такого, что вызовет Views.AddRect. Это может привести к увеличению счётчика областей отрисовки в цикле (см. исх. Views.ValidateRoot)
Код:
WHILE i < n DO
   RestoreRoot(root, rgn.r[i].l - root.gx, rgn.r[i].t - root.gy, rgn.r[i].r - root.gx, rgn.r[i].b - root.gy);
   INC(i)
END

и произойдёт нарушение предусловия
Код:
ASSERT(root.update.n = 0, 22);
процедуры Views.RestoreRoot.

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