OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 17 Сентябрь, 2025 12:11

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




Начать новую тему Ответить на тему  [ Сообщений: 76 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Суббота, 15 Ноябрь, 2008 19:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Владимир Лось писал(а):
Info21 писал(а):
...честно говоря, не в первый раз просто не понимаю Ваших...

Что бы прекратить "базар", нужно, что бы кто-то замолчал...
А публика ЗДЕСЬ сама решит на чьей стороне истинна в конкретном вопросе...

Мне показалось, что у GUEST'а содержательные намерения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Ноябрь, 2008 19:42 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2463
Откуда: Россия, Томск
AVC писал(а):
Реальна ли на практике ситуация, когда модулей, желающих при своей инициализации установить эту переменную, окажется больше одного? Есть ли в этом какая-нибудь опасность?
Опасность в виде потери функционала - есть, сам интерфейс не гарантирует, что потери не будет. Просто заменяем один объект на другой. Другое дело, что есть соглашение о том, что во избежание потери нужно перед заменой запоминать старый объект и переадресовывать ему все необработанные вызовы.

Если регистрируется несколько потомков Files.Directory, то порядок регистрации может быть важен.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 15 Ноябрь, 2008 23:25 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
Если регистрируется несколько потомков Files.Directory, то порядок регистрации может быть важен.

Штуки типа Files.Directory используются, скорее, наверное, все-таки для "раскрутки" системы, создаваемой с нуля.

Если в приложении в других отношениях независимые модули соревнуются, кто первый подставит свою реализацию Files.Directory, то виноват архитектор однозначно.

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

Известный мне пример, где потенциально может случиться обход запрета циклического импорта при инициализации модулей:
Dialog.Call, где в параметрах имя команды в виде цепочки литер.
Если модуль А в секции инициализации вызывает Dialog.Call с именем процедуры из модуля B, который в своей инициализации вызывает процедуру из А.
Если тут всюду имеют место прямые вызовы процедур, то B вызовет процедуру из А, когда А еще не доинициализировался.
Но если Dialog.Call правильно ставит вызов в очередь через Service.Action, то всё должно быть в порядке.

По исходнику не видно, кто инициализирует соотв. hook в Dialog, чтобы понять, что там происходит. Может, орловцы разбирались.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 00:11 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Info21 писал(а):
По исходнику не видно, кто инициализирует соотв. hook в Dialog, чтобы понять, что там происходит. Может, орловцы разбирались.

Реализует Dialog.CallHook модуль StdInterpreter. Там всё весьма просто сделано, очередей отложенных нет. Просто берётся через метапрограммирование адрес процедуры и вызывается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 06:32 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Info21 писал(а):
Нужный порядок элементарно фиксируется вставкой одного из соревнующихся модулей в список импорта другого, даже если с этим модулем ничего больше не делается. То есть форсируется полный порядок на модулях.


Ничего вы не форсируете. Завтра придет новый разработчик, с новым модулем, который не в курсе того, чего вы там нафорсировали в своем модуле, и ваш модуль будет глючить. Потому что этот новый модуль пойдет в глобальный стэйт и сделает там что-то такое, чего вы совсем не ожидаете, потому что думаете, что у вас все под контролем (только ваш модуль чего-то делает с этим глобальными стэйтом).
Про хрупкость фиксации порядка в импорте я тоже упоминал. Вы сами через год другой решите поменять этот порядок из каких-нибудь эстетических соображений или исключите какой-то модуль из импорта потому что больше не импортируете из него ничего.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 09:38 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Info21 писал(а):
Владимир Лось писал(а):
Info21 писал(а):
...честно говоря, не в первый раз просто не понимаю Ваших...

Что бы прекратить "базар", нужно, что бы кто-то замолчал...
А публика ЗДЕСЬ сама решит на чьей стороне истинна в конкретном вопросе...

Мне показалось, что у GUEST'а содержательные намерения.
А как иначе? Но Вы не ответили. Прихожу к заключению, что ответа пока нет. Тогда вопрос снимается.
Владимир Лось писал(а):
...истинна...
Что мешает?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 10:52 
Аватара пользователя

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

Фиксация порядка делается не в обычном модуле, а в специально для этого сделанном, с соотв. названием (типа Init, Config или что-то ещё), который не несёт другой смысловой нагрузки. Можно динамически грузить из его BEGIN-а.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 11:12 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
GUEST писал(а):
Info21 писал(а):
Мне показалось, что у GUEST'а содержательные намерения.
А как иначе?

Вот. Приятно, что не ошибся.

GUEST писал(а):
Но Вы не ответили.

Неправда. Я ответил, что не понимаю Вашего вопроса.

GUEST писал(а):
Прихожу к заключению, что ответа пока нет.

Если нет вопроса, то и нет ответа. Ясное дело.

GUEST писал(а):
Тогда вопрос снимается.

Пусть даже есть вопрос. Почему, если нет ответа, вопрос должен сниматься? Почему не оставить его стоять :-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 11:15 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Vlad писал(а):
... Завтра придет новый разработчик, с новым модулем, который не в курсе того, чего вы там нафорсировали в своем модуле, и ваш модуль будет глючить. Потому что этот новый модуль пойдет в глобальный стэйт и сделает там что-то такое, чего вы совсем не ожидаете, потому что думаете, что у вас все под контролем (только ваш модуль чего-то делает с этим глобальными стэйтом).
Про хрупкость фиксации порядка в импорте я тоже упоминал. Вы сами через год другой решите поменять этот порядок из каких-нибудь эстетических соображений или исключите какой-то модуль из импорта потому что больше не импортируете из него ничего.

Завтра придет разработчик и от балды впишет строчку в случайное место старой программы. Хрупкость. Да.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 13:04 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Илья Ермаков писал(а):
Фиксация порядка делается не в обычном модуле, а в специально для этого сделанном, с соотв. названием (типа Init, Config или что-то ещё), который не несёт другой смысловой нагрузки. Можно динамически грузить из его BEGIN-а.
Насколько я понял, есть 3 пути преодоления частичной упорядоченности набора модулей, чтобы гарантировать порядок инициализации.
1. Включить (явно неиспользуемый) модуль в список импорта другого (info21).
2. Управлять порядком загрузки из специального модуля конфигурации (Илья Ермаков).
3. Явно указать линкеру порядок загрузки модулей.
IMHO, третий вариант - лучший, если список модулей ограничен и заранее известен (т.е. при линковке отдельной программы или динамической библиотеки).
Но главное - изменение состояния другого модуля из своего блока инициализации должно рассматриваться как исключение из правила (IMHO, это нужно редко).


Последний раз редактировалось AVC Воскресенье, 16 Ноябрь, 2008 13:26, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 13:08 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Info21 писал(а):
GUEST писал(а):
Но Вы не ответили.

Неправда. Я ответил, что не понимаю Вашего вопроса.
Вы неточны и в этом убедиться труда не составит.
Info21 писал(а):
Почему, если нет ответа, вопрос должен сниматься? Почему не оставить его стоять :-)
На Ваше усмотрение. Снятие означает прекращение его обсуждения и более ничего.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 13:20 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
GUEST писал(а):
Info21 писал(а):
GUEST писал(а):
Но Вы не ответили.

Неправда. Я ответил, что не понимаю Вашего вопроса.
Вы неточны и в этом убедиться труда не составит.
Повторите вопрос, пожалуйста. :roll:
А то я добрался только до такой формулировки:
GUEST писал(а):
Кажется я ясно сказал, что. Или нужно повторить?
Возможно, сам вопрос был задан раньше и "выпал" при "нарезке" веток.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 13:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
Насколько я понял, есть 3 пути преодоления частичной упорядоченности набора модулей, чтобы гарантировать порядок инициализации.
1. Включить (явно неиспользуемый) модуль в список импорта другого (info21).
2. Управлять порядком загрузки из специального модуля конфигурации (Илья Ермаков).
3. Явно указать линкеру порядок загрузки модулей.
IMHO, третий вариант - лучший

В варианте 1. необходимые связи выражены статически, проверку делает компилятор. С этой точки зрения (максимум информации должен быть выражен статически) -- именно он лучший.
(Раз кому-то непонятно: такое включение в список импорта должно идти красной строкой с комментарием.)

С этой же точки зрения вариант 3 -- наихудший, а вариант 2 -- промежуточный.

Отсюда вывод:
В силу простоты вариант 1 -- вариант по умолчанию.
Для обоснования большей сложности варианта 2 нужен аргУмент.
Для варианта 3 -- вдвойне.

Пусть авторы 2 и 3 приведут для коллекции примеры соотв. обоснований.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 14:08 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
С этой же точки зрения вариант 3 -- наихудший, а вариант 2 -- промежуточный.
<...>
Отсюда вывод:
В силу простоты вариант 1 -- вариант по умолчанию.
Для обоснования большей сложности варианта 2 нужен аргУмент.
Для варианта 3 -- вдвойне.

Пусть авторы 2 и 3 приведут для коллекции примеры соотв. обоснований.
А как же принцип структурирования? :wink:
Разве правильно импортировать ненужный модуль?
В другом приложении эти модули могут вообще не использоваться совместно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 14:18 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Info21 писал(а):
В варианте 1. необходимые связи выражены статически, проверку делает компилятор. С этой точки зрения (максимум информации должен быть выражен статически) -- именно он лучший.
(Раз кому-то непонятно: такое включение в список импорта должно идти красной строкой с комментарием.)

С этой же точки зрения вариант 3 -- наихудший, а вариант 2 -- промежуточный.

Так вариант 2 - это тоже статика. Просто для этой упорядочивающей строчки IMPORT заводится отдельный модуль, не содержащий, вероятно, вообще больше ничего, а уж он цепляется в содержательные модули. ("разделяй и властвуй").


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 14:23 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
IMHO, варианты 2 и 3 могут рассматриваться как применение паттерна Посредник (Mediator) из книги банды четырёх.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 16:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
AVC писал(а):
А как же принцип структурирования? :wink:
Разве правильно импортировать ненужный модуль?
А причем здесь принцип структурирования, если модулю зачем-то нужно, чтобы другой модуль был уже проинициализирован. Какой же он ненужный тогда.

AVC писал(а):
В другом приложении эти модули могут вообще не использоваться совместно.
Вот это похоже на аргумент. Только насколько он не умозрительный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 16:42 
Аватара пользователя

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

Илья Ермаков писал(а):
Просто для этой упорядочивающей строчки IMPORT заводится отдельный модуль, не содержащий, вероятно, вообще больше ничего, а уж он цепляется в содержательные модули. ("разделяй и властвуй").

Что значит "цепляется"?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 17:12 
Аватара пользователя

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

Почему не вынести этот порядок в IMPORT отдельного модуля, а в этом вместо списка их написать один, тот специальный? Даже если нам нужны сами эти модули тоже, лучше, по-моему, порядок зафиксировать в отдельном, импортировать его, а уже затем дописать их ещё раз.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 16 Ноябрь, 2008 20:39 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
Info21 писал(а):
А причем здесь принцип структурирования, если модулю зачем-то нужно, чтобы другой модуль был уже проинициализирован.
Самому модулю это как раз ни к чему. Он и знать не знает о существовании другого модуля.
Это нужно по какой-то причине разработчику программной системы в целом.
Но модуль в этом не виноват, и не надо нагружать его ненужным импортом.

Info21 писал(а):
AVC писал(а):
В другом приложении эти модули могут вообще не использоваться совместно.
Вот это похоже на аргумент. Только насколько он не умозрительный.
Это, конечно, вопрос.
Сформулируем так. Есть два модуля, которые могут использоваться совершенно независимо. Оба они при инициализации устанавливают некую глобальную переменную третьего модуля, который они оба импортируют.
Пока проблем нет. Но теперь добавляем ещё один момент: по злой воле программного архитектора (или просто в силу открытости/расширяемости компонентной системы) их "пути пересеклись".
Вот эту ситуацию мы сейчас и рассматриваем.


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

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


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

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


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

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