anchor.diff:      } else {
         var addOrRemove = false;
         if (current != null) {
  +        if (current.onExit != null) current.onExit(e);
           //TODO optimize the computation of component diff
           current.forEach((provider) {
             var np = next.getByType(provider.type);
  
positive.code:   }
  }
  
  class EntityState {
    final _componentProviderByType = new Bag<ComponentProvider>();
    final _indicesP = new Set<int>();
  
    final modifiers = new List<ComponentModifier>();
  
    void add(ComponentProvider provider) {
      int index = provider.type.id;
  
negative.code:       next.modifiers.forEach((modifier){
          modifier.apply(e);
        });
        if (next.onEnter != null) next.onEnter(e);
        if (addOrRemove) e.changedInWorld();
      }
    }
  