Versioned Symbols

Windows has a trick where ASCII and Unicode versions of functions have particular suffices. Macros then replace do_something with the underlying do_something_ascii or do_something_unicode.

Unlike records a function may be exposed to the outside world and the name may be used for all time. So we may end up stuck as Microsoft was having to add silly Ex or "2" versions of functions.

One option is to always include a version number in to every function and use a faceplate to remove it. So do_something is what we see in a program but its actually been redefined or symbol exported as do_something_v1.

Another option is all symbols are mangled to some identifier such as with NanoID and our symbols have names like FnLZfXLFzPPR4NNrgjlWDxn while we program with the friendly names.

When we perform a major API break we can reclaim old identifiers and constants. We just point all of the friendly names to new IDs while the old IDs are left in maintenance mode or become compatibility functions. Symbol tables will look like ass but those are not user-facing anyway.