Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  08:31[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение. 

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 4876—4867 | 4866—4857 | 4856—4847 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 140


№ 4866   09-06-2007 11:54 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4865« (Стэн)
___________________________
Ну, я не говорил о том, чтобы запретить все прямые вызовы. Только между объектами, внутри объектов им очень даже место.
Объекты объектам рознь. Очень часто один объект является частью другого и тут прямые вызовы должны быть доступны.
Выделить те границы, через которые можно общаться только сообщениями - дело правильного проектирования. Иначе придется вводить в языке различные категории объектов: для построения сложных объектов одни, а для взаимодействия с шиной сообщений другие.


№ 4865   09-06-2007 11:34 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4864« (Сергей Перовский)
___________________________
>>> Поэтому пока никому не приходит в голову запретить прямые вызовы на уровне среды. Построить VCL на сообщениях, значит заметно затормозить работу.
Ну, я не говорил о том, чтобы запретить все прямые вызовы. Только между объектами, внутри объектов им очень даже место. Тем более, что сейчас ситуация не та, что 20 лет назад. В корпоратичном секторе надежность важнее производительности, а если учесть, что асинхронное взаимодействие на современных процессорах распаралелливается на ура, то производительность вопрос сотни баксов на каждый компьютер...


№ 4864   09-06-2007 11:28 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4863« (Стэн)
___________________________
И я про тоже, но вот вся VCL, например, построена по такому принципу. Да и MFC и WinForms ничем в этом плане не лучше.
Надо заметить, что сообщения, вообще говоря, медленнее прямых вызовов.
Поэтому пока никому не приходит в голову запретить прямые вызовы на уровне среды. Построить VCL на сообщениях, значит заметно затормозить работу.
Извечная проблема надежности/эффективности.
Есть возможность в задаче не экономить время - пишите все через посылку сообщений. А если быстродействие критично, придется использовать прямые вызовы, там где это возможно и так, чтобы не было зацикливаний.


№ 4863   09-06-2007 09:07 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4862« (Сергей Перовский)
___________________________
>>> Заметте, что Вы сформулировали проблему безотносительно к среде исполнения.
Среда исполнения - это ранавидность рантайма? Native, CLR .NET, JVM? Если да, то это не имеет ни какого значения, так как первый раз я реально столкнулся с этим на Delphi, но если взять C#, например, то ситуация будет аналогичная.

>>> Это не проблема языка или среды - это проблема постановки задачи.
Хм, это как посмотреть.Вот Вы знаете Delphi, знаете, как там пишутся обработчики. Поставили на форму кнопку, нажали на нее и написали реализацию OnClick. И внутри этого OnClick Вы можете написать всё, что угодно. Вызвать любой метод этой кнопки - спрятать/показать кнопку, изменить размеры, перенести ее на другую форму, удалить, в конце-концов. И ни среда, ни язык такого не запрещают. И я не знаю, чья это проблема, но она есть.

>>> Никаких прямых вызовов сторонних методов в теле обработчика быть не должно.
И я про тоже, но вот вся VCL, например, построена по такому принципу. Да и MFC и WinForms ничем в этом плане не лучше.


№ 4862   09-06-2007 07:46 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4860« (Стэн)
___________________________
И если в середине выполнения будет вызван внешний метод, который по цепочке вызовет начальный, либо другой обработчик этого же объекта, то при входе в этот обработчик состояние объекта будет неопределенным.
Это не проблема языка или среды - это проблема постановки задачи. Заметте, что Вы сформулировали проблему безотносительно к среде исполнения.
Аналогичные проблемы возникали в имитационном моделировании, только там время было не реальным а модельным. Выход в том, чтобы четко разделить методы -обработчики событий и взаимодействия с другими объектами. Пришел сигнал, вызван соответствующий обработчик, изменено состояние, отправлены сигналы. Только в таком порядке. Никаких прямых вызовов сторонних методов в теле обработчика быть не должно. Иначе никакие программные реализации Вам не помогут. Ни транслятор, ни исполняющая система не могут исправлять ошибки в логике построения программы.


№ 4861   09-06-2007 06:58 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4860« (Стэн)
___________________________

Ответ на »сообщение 4859« (Илья Ермаков)
___________________________
Ещё раз подчеркну. Отложенных вызовов должно произойти столько, сколько сообщений было послано.

Ситуация в целом знакомая.
Я обычно использую отложенные действия с упоминавшимся корпоративным диспетчером...
Вообще, выделение действий в отдельные объекты в ББ ГУЕ используется довольно часто, на этом, например, построен единый диспетчер undo/redo для составных документов.


№ 4860   08-06-2007 15:12 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4859« (Илья Ермаков)
___________________________
>>> В текущей модели шины сообщения идут неотложенно, стековыми экземплярами.

Значит, текущая модель действительно не решает мою задачу…

>>> Тогда я не совсем понял, в чем проблема... Сначала Вы вроде написали, что в том, что компонент, который "держит" обработчик, в момент вызова этого обработчика уже уничтожен... Такой проблемы в ББ, как в компонентной системе, быть не может.

Уничтоженный объект это только частный случай общей проблемы.
Дело в том, что, как мы знаем, у каждого объекта есть состояние, в виде значений его полей. В общем случае, выполнение обработчика (обработка сообщения) меняет это состояние. Поэтому, можно говорить, что объект находится в стабильном состоянии, если ни один обработчик не выполняется и в нестабильном (переходном) при выполнении обработчика. И если в середине выполнения будет вызван внешний метод, который по цепочке вызовет начальный, либо другой обработчик этого же объекта, то при входе в этот обработчик состояние объекта будет неопределенным. И в общем случае эту проблему нельзя устранить, так как в некоторых частных случаях, при недопустимом состоянии объекта, придется генерировать исключение – «циклический вызов». Не вижу в этом ничего хорошего.

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

>>> Требуется, чтобы вместо зацикливания в рекурсивном вызове произошел единственный отложенный?

Ещё раз подчеркну. Отложенных вызовов должно произойти столько, сколько сообщений было послано.


№ 4859   08-06-2007 14:43 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4858« (Стэн)
___________________________

Ответ на »сообщение 4855« (Илья Ермаков)
___________________________
Так как же это реализовано в Обероне? Все ли сообщения передаются по шине асинхронно? А следовательно, есть ли очередь сообщений?

В текущей модели шины сообщения идут неотложенно, стековыми экземплярами.
Тогда я не совсем понял, в чем проблема... Сначала Вы вроде написали, что в том, что компонент, который "держит" обработчик, в момент вызова этого обработчика уже уничтожен... Такой проблемы в ББ, как в компонентной системе, быть не может. А про рекурсивный вызов - не совсем понятно.. Требуется, чтобы вместо зацикливания в рекурсивном вызове произошел единственный отложенный? Мы в ББ это обычно пишем через отложенное действие, установленное в очередь диспетчера корпоративной многозадачности. Сколько раз не установи один объект действия, выполнится он потом только один раз...


№ 4858   08-06-2007 14:35 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4855« (Илья Ермаков)
___________________________
>>> Что, собственно говоря, и есть в ГУИ Блэкбокса. Generic Message Bug - и проблем не знаем :-)

Я еще раз, более внимательно, перечитал Вашу статью «Некоторые идеи архитектуры Оберон-систем», в частности раздел 2, но так и не нашел самого главного. А именно, решение той задачи, о которой я говорил, там не описано. Вы делаете акцент на том, что Оберон дает нам гибкость по сравнению с тем же Delphi, и при прочих равных это конечно хорошо. Но в том, о чем говорил я, гибкость, как и параллелизм, является – бесплатным бонусом.
Например, Smalltalk, где механизм сообщений реализован на полную катушку, не решает мою задачу, так как в нем – синхронный вызов сообщений и это не функциональный язык (т.е. не всё состояние передается через стек). А это означает, что может быть вызван некоторый метод m1, а из него m2 и т.д… В конце-концов, mn снова вызовет m1, (образуется кольцо) до выхода из первоначального m1, и здесь все накроется.
В Вашей статье в этом плане как-то не однозначно. С одной стороны говорится о том, что ест сообщения и есть шина – вроде, то, что надо. Но с другой стороны, во-первых, Вы пишите, что есть особый обработчик HandlePropMsg. Какой особый смысл в таком делении, если всё асинхронно. А во-вторых, и это самое важное, пишите, что экземпляры сообщений могут создаваться на стеке. Что, по-моему, однозначно свидетельствует о том, что в Обероне синхронный вызов. Так как стек, в случае одного потока, однозначно очистится раньше, чем сообщение будет обработано.

Так как же это реализовано в Обероне? Все ли сообщения передаются по шине асинхронно? А следовательно, есть ли очередь сообщений?


№ 4857   08-06-2007 10:34 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 4855« (Илья Ермаков)
___________________________

Generic Message Bug - и проблем не знаем :-)

О! Баги! Это наше всё! Жо))


<<<... | 4876—4867 | 4866—4857 | 4856—4847 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 140


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования