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/ |