# DRAFT SharedValueTable Proposal
```
[Serializable]
interface SharedValueTable {
undefined insert([EnforceRange] unsigned long long key, any value); // value must be serializable
any get([EnforceRange] unsigned long long key);
undefined remove([EnforceRange] unsigned long long key);
};
```
TODO write more
Keeping track of some use cases, and random thoughts
- Thread-shareable objects
- WebGPU objects (`get` needs to be FAST, avoid locks)
- By construction, also `SharedArrayBuffer`s and other `SharedValueTable`s
- For performance reasons it's probably ideal for `get()`` to cache the object it returns so it can return the same one again (in the case of thread-shareable objects at least)
- Regular serializable values (like numbers, JS objects, etc.)
- These would NOT be by reference; if you get() an object out of the table and modify it, the modifications shouldn't magically show up elsewhere
- Maybe this slightly conflicts with the `get()`` caching above
- Blobs (audio, images, other files), e.g. being loaded into a game engine
-