Комментарии 2
Спасибо за статью, интересный подход.
А в реакторе на порядок стейтментов какие-либо ограничения накладываются? Например, что зависимые должны быть объявлены позже, чем те, от кого они зависят?
А в реакторе на порядок стейтментов какие-либо ограничения накладываются? Например, что зависимые должны быть объявлены позже, чем те, от кого они зависят?
+1
В реакторе возможны два типа стейтментов (ниже выдержка из файла грамматики):
Каждый из стейтментов компилируется в функцию-обработчик, которая при старте подписывается на все свои «управляющие» события (для reactor_expression_stmt — это будет множество связываемых свойств в правой части выражения; для reactor_onevent_stmt — множество событий после ключевого слова onevent). Между самими стейтментами прямой зависимости нет (думайте про каждое из них как про метод), так что в этом плане порядок «формул» и обработчиков «onevent» значения не имеет.
Порядок играет роль лишь при старте реактора — в этот момент нам надо выполнить все стейтменты реактора, чтобы:
Так вот, при старте все стейтменты (за исключением, разумеется, содержимого «onevent») выполняются сверху вниз.
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») выполняются сверху вниз.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Реактивное программирование пользовательского интерфейса в Jancy