OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 01:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Что может означать этот трап?
СообщениеДобавлено: Вторник, 18 Май, 2010 07:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Хм. Да. Контроллер - хранимый объект, это я упустил из виду.
Одна из слабостей Stores - "прошитость" порождения объекта.


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Одна из слабостей Stores - "прошитость" порождения объекта.
Можно пояснить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что может означать этот трап?
СообщениеДобавлено: Вторник, 18 Май, 2010 07:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Когда считываем Store, то среда создаёт экземпляр именно того типа, который был сохранён. Нет способа виртуализовать это создание.

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
При сохранении записывается не имя типа, а имя переменной с фабрикой. Например, "FormControllers.storeDir". При загрузке идёт обращение FormControllers.storeDir.New(). Имя фабрики можно узнавать сообщением у самого объекта.
Это сложный механизм.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что может означать этот трап?
СообщениеДобавлено: Вторник, 18 Май, 2010 07:50 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я думаю, что Stores просто недоэволюционировал до вот этой "точки расширяемости" (эта часть каркаса - Files-Stores - очень древняя). Простота - прежде всего; но простоту можно "замораживать" тогда, когда в неё заложена точка расширения. А тут как раз место нерасширяемости, не раз уже мешавшее.

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

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Я думаю, что Stores просто недоэволюционировал до вот этой "точки расширяемости" (эта часть каркаса - Files-Stores - очень древняя). ...
Да, есть ощущение, что Stores нужно бы доуточнить.
Но это очень ответственная часть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что может означать этот трап?
СообщениеДобавлено: Вторник, 18 Май, 2010 09:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Илья Ермаков писал(а):
Я думаю, что Stores просто недоэволюционировал до вот этой "точки расширяемости" (эта часть каркаса - Files-Stores - очень древняя).


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


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

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Лучше всего спросить в списке рассылки, почему так сделано, и в каком направлении автор видел возможные пути развития (может быть, проблема и решение уже известны, просто руки не дошли реализовать). Потом предложить доработанный модуль для включения в очередную версию ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что может означать этот трап?
СообщениеДобавлено: Вторник, 18 Май, 2010 15:15 
Модератор
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Что может означать этот трап?
СообщениеДобавлено: Вторник, 03 Май, 2011 10:14 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Этот трап начал возникать снова, пришлось копать.

В процессе раскапывания приходим к важному требованию - в реализации метода 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.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB