anchor.diff:      new() = TransientVect<'T>(0,Literals2.blockSizeShift,NodeR.InCurrentThread(),Array.create Literals2.blockSize null)
       
       member internal this.EnsureEditable(node:NodeR) =
  -        if node.Thread = root.Thread then node else
  -        NodeR(root.Thread,Array.copy node.Array)
  +        if node.ThreadId = root.ThreadId then node else
  +        NodeR(root.ThreadId,Array.copy node.Array)
   
       member internal this.NewPath(level,node:NodeR) =
           if level = 0 then node else
           let ret = Array.create Literals2.blockSize null
           ret.[0] <- this.NewPath(level - Literals2.blockSizeShift,node) :> obj
  -        NodeR(node.Thread,ret)
  +        NodeR(node.ThreadId,ret)
   
       member internal this.PushTail(level,parent:NodeR,tailnode) =
           //if parent is leaf, insert node,
  
positive.code: 
      member this.persistent() : RandomAccessList<'T> =
          this.EnsureEditable()
          root.SetThread null
          let l = count - this.TailOff()
          let trimmedTail = Array.init l (fun i -> tail.[i])
          RandomAccessList(count, shift, root, trimmedTail)
  
      member internal this.EnsureEditable() =
          if root.Thread = Thread.CurrentThread then () else
          if root.Thread <> null then
              failwith "Transient used by non-owner thread"
          failwith "Transient used after persistent! call"
  
  
negative.code: 
      member internal this.NewPath(level,node:NodeR) =
          if level = 0 then node else
          let ret = NodeR(root.ThreadId,Array.create Literals2.blockSize null)
          ret.Array.[0] <- this.NewPath(level - Literals2.blockSizeShift,node) :> obj
          ret
  
  