Have decided to restart Om from scratch again. Too much unexpected things have made the current implementation feel icky. Mainly the running of object destructors but sure there are other things too.
Issues to consider from day one on this iteration are:
* decrementing a reference can run code in the current execution context
* said code can cause errors
* want to be able to precompile a module and load from a stored binary representation
* objects and arrays to be merged. Int access is array, string or dot access is object, so the entity will contain both an ID map and a vector. Tiny size cost if not used in exchange for simplification
* overhead of Om::Value to be entirely removed from internals and constructed at API boundaries
* remove all explicit support for global values. Means some things might not be intuitatuve in module writing, but can be worked round and encourages design avoiding global state
Am currently rewriting pod_vector to use two pointers for front and back, instead of a pointer and an index so that back() requires no index addition, as used often as the stack structure. This approach keeps cost of push_back() and pop_back() same as before while improving back() performance. Maybe irrelevant but may as well.
Will be approaching in a different order this time, getting minimum in place in compiler and VM to create objects with destructors, so that tricky business of this written in minimal existing context and everything else built upon that.
Hate typing on this bloody phone :)