anchor.diff:  /// batches to ensure maximum throughput when processing the manually-junctioned components.
   /// Also note that all junctions are guaranteed to keep the same size and order as the related components so that they
   /// can be accessed by the same index.
  -type SystemCorrelated<'c, 'w when 'c : struct and 'c :> 'c Component> (buffered, ecs : 'w Ecs) =
  +type SystemCorrelated<'c, 'w when 'c : struct and 'c :> 'c Component> (buffered, isolated, ecs : 'w Ecs) =
       inherit System<'w> (Unchecked.defaultof<'c>.TypeName)
   
       let mutable (correlateds, correlatedsBuffered) = ecs.AllocateComponents<'c> buffered
  
positive.code:     let correlations = dictPlus<Guid, int> HashIdentity.Structural []
      let correlationsBack = dictPlus<int, Guid> HashIdentity.Structural []
  
      new (ecs) = SystemCorrelated (false, ecs)
  
      member this.Correlateds with get () = correlateds
      member this.WithCorrelatedsBuffered (fn : 'c ArrayRef -> 'w option -> 'w option) worldOpt = lock correlatedsBuffered (fun () -> fn correlatedsBuffered worldOpt)
  
negative.code:             correlationsBack.Add (index, entityId)
              correlateds.Array.[index] <- comp
  
              // register correlation with ecs if needed
              if not isolated then
                  match ecs.Correlations.TryGetValue entityId with
                  | (true, correlation) ->
                      correlation.Add this.Name |> ignore<bool>
                      ecs.CorrelationChanges.[entityId] <- correlation
                  | (false, _) ->
                      ecs.Correlations.Add (entityId, HashSet.singleton StringComparer.Ordinal this.Name)
                      ecs.CorrelationChanges.[entityId] <- ecs.EmptyCorrelation
  
              // make component ref
              ComponentRef.make index correlateds correlatedsBuffered
  