`# placeholder just to make the compiler shut up type Storage[T] = seq[T] proc
newStorage[T](size: int): seq[T] = newSeq[T] size proc components[T](x: var
seq[T]): var seq[T] = x type Entity = object id: int ComponentMotion = object
x, y: float template setupComponent(t: typedesc) = var x {.used.} =
newStorage[t] 100 proc getStorage(_: typedesc[t]): var Storage[t] = x proc
getComponent(self: Entity, _: typedesc[t]): ptr t = addr x.components[self.id]
proc setComponent[T](self: Entity, comp: T) = self.getComponent(T)[] = comp
setupComponent ComponentMotion var en = Entity(id: 0) en.setComponent
ComponentMotion() en.getComponent(ComponentMotion).x = 10 echo
en.getComponent(ComponentMotion).x echo getStorage(ComponentMotion)[0].x `
Run