This slows down object access as detecting and stripping the NaN tag requires few CPU instructions. Plus it assumes that pointers only have 48 bits with rest are zeros (true for AMD, ARM and Intel) or at least have fixed values (can be arranged on more exotic CPUs). But that does not require to box numbers greatly reducing GC pressure.
Except when it isn't: https://en.wikipedia.org/wiki/Intel_5-level_paging
That's not something you're likely to run into on consumer hardware, but with JS being used on the server I wonder if/when JS engines will need to deal with that.
I guess you could have a lot of files mmaped though?
https://stackoverflow.com/questions/63550957/why-does-v8-use...
Yes other engines use NaN boxing, but not all engines do.
Both languages I mentioned use regular 8/16/32/64 bit size values, which is why I asked.
F# doesn't do that and always stores a separate tag field for sum types. This is marginally less efficient, but doesn't make interop with 99% of languages and data formats in existence awkward.