constructor(backend, dataMover){
        this.backend = backend;
        this.dataMover = dataMover;
        this.data = new WeakMap();
        this.dataIdsCount = 0;
    }
The interface that defines the kernels that should be implemented when
adding a new backend. New backends don't need to implement every one of the
methods, this can be done gradually (throw an error for unimplemented
methods).