Pull to refresh

Comments 2

Спасибо за статью, интересный подход.

А в реакторе на порядок стейтментов какие-либо ограничения накладываются? Например, что зависимые должны быть объявлены позже, чем те, от кого они зависят?
В реакторе возможны два типа стейтментов (ниже выдержка из файла грамматики):

reactor_body
    :   '{' reactor_stmt+ '}'
    ;

reactor_stmt
    :   reactor_expression_stmt
    |   reactor_onevent_stmt
    |   ';'
    ;


Каждый из стейтментов компилируется в функцию-обработчик, которая при старте подписывается на все свои «управляющие» события (для reactor_expression_stmt — это будет множество связываемых свойств в правой части выражения; для reactor_onevent_stmt — множество событий после ключевого слова onevent). Между самими стейтментами прямой зависимости нет (думайте про каждое из них как про метод), так что в этом плане порядок «формул» и обработчиков «onevent» значения не имеет.

Порядок играет роль лишь при старте реактора — в этот момент нам надо выполнить все стейтменты реактора, чтобы:

  • вычислить адреса управляющих событий — ведь они могут быть и не статическими (например, членами классов)
  • как минимум попытаться обеспечить справедливость всех указанных в реакторе формул (понятно, что реактор можно спроектировать так, что все выражения не могут выполняться одновременно: например a = b + 1; b = a + 1)


Так вот, при старте все стейтменты (за исключением, разумеется, содержимого «onevent») выполняются сверху вниз.
Sign up to leave a comment.