I like these things; they make you rethink how work.
From what I see, the first problem with this is scalability (precisely one of the problems you aim to solve when rewriting code in new projects).
Scalability doesn’t just imply “compatibility,” but also simplicity in the code. When you complicate things by duplicating databases (to achieve compatibility), you break the essence of scalability (that something should be easily possible in the future). Future, project, see beyond, speculate, etc. It will depend on what is to be implemented later and what does not yet exist.
Scalable in this case means that you can maintain the base16 encoding and have it embedded within the base36 encoding. But that’s not the case.
- base16: 0-9, A-F
- base36: 0-9, A-Z
Compatibility would only be achieved from 0 to F (16 values).
This creates a structural code problem (Renoise relies almost entirely on base16; incidentally, Renoise uses ranges exceeding 256 elsewhere, if I remember correctly).
Another problem is format compatibility, beyond xrns itself.
Another issue is in Lua. There’s no direct conversion (standard syntax). You have to write your own two functions that convert values in both directions to work with base36. In C++ and Lua, you can refer to base16 directly (for example, 0xFF), just like with the numeric base 0 to 9. The same applies to strings, where there are code functions that return the correct values (for example, string.format("%X", n), n=number). However, with base36, there’s no such thing; you have to create it yourself.
As it stands now, Lua and the Renoise API could create complex window tools working in base36, but this wouldn’t be very useful. It wouldn’t make sense if Renoise’s limitation is base16 and you’re constantly referencing values in that base.
It’s as if everything is focused on something outdated that was considered sufficient at the time. Now, changing it would involve modifying too many things to make the whole thing coherent. You either use base16 for everything or base36 for everything, but not both at the same time. Perhaps it’s best not to. I’m speaking from a programming perspective.
At present, if someone had to create a new Renoise from scratch, base36 might be a good starting point, given the powerful hardware we have now. But this would only be advantageous in large projects, I suppose. In most cases, base16 seems sufficient. However, at some point, things will have to evolve. If that were the case, I think I would keep the base16 and break the 2-digit limit (in any case). I wouldn’t use base36. But this would actually complicate understanding even further. Hexadecimal notation remains a learning barrier for many. I don’t even want to imagine what would happen with base36.
That’s why it’s so important to study things beforehand so that they can be scaled. But that scalability will conflict with compatibility with older formats (not just xrns). Many programs use base16. It is something “universal” or familiar.