merk писал(а):
а в вашей концепции????
есть мессага - бутылка и приделанные к ней обработчики??? это какие? у бутылки обрабочик - выпить? вопрос - кто а кто пьяным будет? обработчик - выкинуть в помойку?
Нет, Вы неверно поняли. Есть "автономный объект", назовём так. У него есть обработчик, с селектором по типу сообщений. Когда объекту посылают сообщение (obj.Call(msg), где Call - не переопределяемый метод, описанный в библиотеке. В Обероне можно запретить переопределять методы в типах-расширениях.), то рано или поздно (потому что в середине может происходить что угодно, действовать прозрачно какие-то механизмы, например, распределённости) какой-то системный поток (программиста, использующего библиотеку, не интересует - какой) вызовет Handler этого объекта, передав ему сообщение и его состояние как VAR-параметры. Объект оператором WITH разбирает тип сообшения, обрабатывает его, меняя своё состояние и посылая какие-то другие сообщения. И возвращает управление.
Если же объект должен действовать постоянно, то он обрабатывает какое-то спец. системное сообщение, и может не возвращать управление из своего обработчика.
Эти "автономные объекты" и выполняют роль актёров. А пассивные объекты скрыты внутри, они не разделяются (т.к. доступ к своему состоянию имеет только сам актёр и только во время обработки конкретного сообщения, а сообщения могут передавать только данные по копированию, либо динамические immutable strcutures - а на чтение данные можно безопасно разделять сколько угодно).
Т.е. никаких разделяемых на запись данных. Уж сколько раз убеждались все, что это зло... Тем более в компонентной системе, в которой, как Вы справедливо замечали, заранее неизвестно, сколько и каких активностей будет дейстовать. Разделяемым данным место в пассивных хранилищах на периферии системы (что-то типа баз данных, только в оперативной памяти. Ну и, конечно, в обычных полноценных БД).