anchor.diff:  
             aNode.update(bNode, context);
           } else {
  -          parent.removeChild(aNode, context);
  +          parent.removeChild(aNode, attached);
             removeOffset++;
           }
         }
  
positive.code:     while (aEndNode.key == bStartNode.key) {
        aEndNode.update(bStartNode, context);
  
        parent.moveChild(aEndNode, a[aStart], context);
  
        aEnd--;
        bStart++;
  
negative.code:         // more complex situations with inserting/removing and repositioning
          // childrens.
          if (a.first.key == null) {
            return _updateImplicitChildren(parent, a, b, context, attached);
          }
          return _updateExplicitChildren(parent, a, b, context, attached);
        }
      }
    } else if (b != null && b.length > 0) {
      // all childrens from list [b] were inserted
      for (var i = 0; i < b.length; i++) {
        final n = b[i];
        parent.insertChild(n, null, context, attached);
      }
    }
  }
  
  void _updateImplicitChildren(VNode parent, List<VNode> a, List<VNode> b, VContext context, bool attached) {
    int aStart = 0;
    int bStart = 0;
    int aEnd = a.length - 1;
  