Thank you!!! That really means a lot. I’m always self-conscious about how my story ideas are niche or ditch the “rule of cool” in favor of just exploring the experiences of intense and often-overlooked consequences of things.
I read the first book, and loved it, but didn’t read the other books. Then I discovered Peter Watts and read nearly every novel and short story he wrote. Then I went back to re-read Three-Body Problem because I planned to finish the series, and for some reason it hit completely different and just didn’t engage me the same way.
However, Cixin Liu has absolutely massive ideas and focuses on the consequences of things, so I’m honored if anything I come up reminds anyone of his stuff.
Yes, even though @jbg keeps tangling the fruit of “do more with caching, tables, amd smaller data types” like a committed professor.
(Hides my white board of attempted solutions behind a curtain)
However, TADS 3 has a BigNumber
data type, but performing calculations with it is slowwwwwwwwww, especially as you do more and more of them in nested loops. This is totally conjecture, but I’m guessing the reason why is Mike (creator of TADS) did not want to rely on the CPU to handle floating-point math (because you can do multiplayer in TADS 3, and floating-point can cause desyncs between computers). So to make the results both deterministic and consistent across all platforms, I assume his BigNumber
class does a homebrew implementation of floating-point math, probably in an above-metal abstraction layer. Also, every calculation done with BigNumber
drops at least one or two more objects into garbage collection, so there’s also that.
(Again, hearsay and conjecture; I don’t think I can email the guy to satisfy my curiosity, lol)
RTS games like StarCraft get around this by forcing the CPU to use a specific kind of floating point calculation/circuit, but I assume Mike’s goal was to allow TADS 3 to run on anything, even computers that cannot have that floating-point standard enforced.
So my goal was to create a multi-word fixed-point data type with zero impact on garbage collection, and a heavy use of macros to unroll code during compile.
Of course, anyone can tell you that this created the ANTITHESIS of clean code, though it was necessary for performance.
This was still necessary, even after I tried caching and tabling everything, by the way.
Eventually I lost all of my steam, had many sleepless nights, and the problem was starting to get to me. Also, I wanted to try my luck at joining a comp, so I switched to my current SpringThing project, which is making me lose sleep for different reasons!