5.3 Резиденты



Резидентом называется специальная активная сущность, отслеживающая состояния некоторых (целевых) процессов и передающая собранную информацию своему владельцу. Резиденты создаются в результате доказательства конструкторов резидентов.

В общем случае, каждому резиденту соответствуют:

1.Процесс, являющийся «владельцем» резидента.

2.Атомарная формула (вызов функции), заданная в конструкторе резидента.

3.Некоторые «целевые» миры резидента. Процессы, в состав которых входят целевые миры резидента, называются «целевыми» процессами резидента.

4.Некоторые переменные, являющиеся общими для резидента и его владельца.

Владельцем (создателем) резидента является процесс, одному из слотов миров которого соответствовал инициализатор — конструктор рассматриваемого резидента. Резидент взаимодействует со своим владельцем как некоторый процесс — с помощью переключающих потоковых сообщений, по правилам передачи потоковых сообщений.

Целевыми мирами резидента считаются все экземпляры классов, входящие в состав значения целевого параметра в текущий момент времени — набор целевых миров может изменяться в ходе исполнения программы. Если вместо целевого параметра в конструкторе резидента задан конструктор мира, целевым параметром считается экземпляр класса, построенный в результате доказательства этого конструктора мира. Если целевой параметр или заменяющий его конструктор мира в конструкторе резидента не заданы, целевым параметром считается предопределённый атрибут self.

Резидент решает следующие задачи и осуществляет следующие действия:

1.Построение множества списков, соответствующих различным целевым мирам резидента. Каждый такой список должен содержать все значения, возвращаемые в результате исполнения вызова функции (заданного в составе конструктора резидента) в рассматриваемом целевом мире.

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

В случае если некоторые списки ещё не построены, или если некоторые целевые процессы находятся в состоянии «неиспользуемый», «неудачный», «объявленный» или «сформированный», а также если в составе значения целевого параметра вместо некоторых миров присутствуют несвязанные переменные, вместо соответствующих списков значений функции в составе потокового сообщения передаются спейсеры #.

3.Постоянное слежение за состояниями целевых процессов. Повторное построение и передача списков значений функции после каждой фазы исполнения целевого процесса.

4.Приём новых значений через простые порты при изменении соответствующих общих переменных. Повторное построение и передача списков значений функции при получении новых значений через простые порты.

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

Перед началом вычисления значений функции осуществляется активизация некоторых портов целевого процесса в соответствии с правилами обработки прямых сообщений

Для вычисления значений функции в целевом мире (временно) создаётся и доказывается с откатом актор Q. В случае если доказательство актора Q завершается исключительной ситуацией, (недостроенный) список значений функции теряется, и резидент осуществляет повторную попытку построить список значений функции.

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

Примечание. Повторное построение списков значений функции резидента разрешается не производить в тех случаях, когда повторное исполнение функции не приведёт к получению новых значений.

Примечание. Рекомендуемые графические обозначения резидентов:

а) Резидент, которому соответствует один целевой мир.

б) Резидент, которому соответствуют несколько целевых миров.





Содержание