anchor.diff:  type [<NoEquality; NoComparison; Struct>] EntityRef<'w when 'w :> Freezable> =
       { EntityId : Guid
         EntityEcs : 'w Ecs }
  -    member this.IndexPlus<'c when 'c : struct and 'c :> 'c Component> () : 'c outref =
  -        let systemName = typeof<'c>.Name
  -        let system = this.EntityEcs.IndexSystem<SystemCorrelated<'c, 'w>> systemName
  -        let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
  -        &correlated.ComponentAref.Array.[correlated.ComponentIndex]
       member this.Index<'c when 'c : struct and 'c :> 'c Component> () =
           let system = this.EntityEcs.IndexSystem<SystemCorrelated<'c, 'w>> typeof<'c>.Name
           let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
           &correlated.ComponentAref.Array.[correlated.ComponentIndex]
  -    member this.ReadPlus<'c when 'c : struct and 'c :> 'c Component> () : 'c outref =
  -        let systemName = typeof<'c>.Name
  -        let system = this.EntityEcs.IndexSystem<SystemCorrelated<'c, 'w>> systemName
  -        let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
  -        &correlated.ComponentArefReadOnly.Array.[correlated.ComponentIndex]
  -    member this.Read<'c when 'c : struct and 'c :> 'c Component> () =
  +    member this.IndexPlus<'c when 'c : struct and 'c :> 'c Component> () : 'c outref =
           let system = this.EntityEcs.IndexSystem<SystemCorrelated<'c, 'w>> typeof<'c>.Name
           let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
  -        &correlated.ComponentArefReadOnly.Array.[correlated.ComponentIndex]
  +        &correlated.ComponentAref.Array.[correlated.ComponentIndex]
  +    member this.IndexBuffered<'c when 'c : struct and 'c :> 'c Component> () =
  +        let system = this.EntityEcs.IndexSystem<SystemCorrelated<'c, 'w>> typeof<'c>.Name
  +        let correlated = system.IndexCorrelated this.EntityId : 'c ComponentRef
  +        &correlated.ComponentArefBuffered.Array.[correlated.ComponentIndex]
       type Ecs<'w when 'w :> Freezable> with
           member this.GetEntityRef entityId =
               { EntityId = entityId; EntityEcs = this }
  
positive.code: and [<NoEquality; NoComparison; Struct>] ComponentRef<'c when 'c : struct and 'c :> 'c Component> =
      { ComponentIndex : int
        ComponentAref : 'c ArrayRef
        ComponentArefReadOnly : 'c ArrayRef }
  
      member inline this.Index
          with get () = &this.ComponentAref.[this.ComponentIndex]
  
      member inline this.Assign value =
          this.ComponentAref.[this.ComponentIndex] <- value
  
      member inline this.Read
          with get () =
              let this = this
              lock this.ComponentArefReadOnly (fun () -> this.ComponentArefReadOnly.[this.ComponentIndex])
  
      static member inline (<!) (componentRef, value) =
          componentRef.ComponentAref.Array.[componentRef.ComponentIndex] <- value
  
      static member inline make index arr arr2 : 'c ComponentRef =
          { ComponentIndex = index
            ComponentAref = arr
            ComponentArefReadOnly = arr2 }
  
  /// An ECS event.
  and [<NoEquality; NoComparison>] SystemEvent<'d, 'w when 'w :> Freezable> =
  
negative.code:             match arrayObjs with
              | UnbufferedArrayObjs _ -> ()
              | BufferedArrayObjs buffered ->
                  lock arrayObjs $ fun () ->
                      for i in 0 .. buffered.WritableArrayObjs.Count - 1 do
                          let writableAref = buffered.WritableArrayObjs.[i] :?> 'c ArrayRef
                          let readOnlyAref = buffered.ReadOnlyArrayObjs.[i] :?> 'c ArrayRef
                          lock readOnlyAref (fun () ->
                              if readOnlyAref.Array.Length = writableAref.Array.Length
                              then writableAref.Array.CopyTo (readOnlyAref.Array, 0)
                              else readOnlyAref.Array <- Array.copy writableAref.Array)
          | (false, _) -> ()
  
      member this.WithComponentArraysBuffered<'c when 'c : struct and 'c :> 'c Component> fn =
          let componentName = typeof<'c>.Name
          match arrayObjss.TryGetValue componentName with
          | (true, arrayObjs) ->
              match arrayObjs with
              | UnbufferedArrayObjs unbuffered -> unbuffered |> Seq.cast<'c ArrayRef> |> Seq.toArray |> fn
              | BufferedArrayObjs buffered ->
                  lock arrayObjs $ fun () ->
                      let readOnlyArefs = buffered.ReadOnlyArrayObjs |> Seq.cast<'c ArrayRef> |> Seq.toArray
                      fn readOnlyArefs
          | (false, _) -> ()
  
      type System<'w when 'w :> Freezable> with
  