Benchmark: timing 55000 iterations of FacedDieObjNotStored, FacedDieObjStored, FacelessDieObj, PsuedoHashObj, pureDieObj, pureSub, purists... FacedDieObjNotStored: 1 wallclock secs ( 2.32 usr + 0.00 sys = 2.32 CPU) @ 23706.90/s (n=55000) FacedDieObjStored: 2 wallclock secs ( 2.77 usr + 0.00 sys = 2.77 CPU) @ 19855.60/s (n=55000) FacelessDieObj: 1 wallclock secs ( 2.06 usr + 0.00 sys = 2.06 CPU) @ 26699.03/s (n=55000) PsuedoHashObj: 3 wallclock secs ( 3.97 usr + 0.00 sys = 3.97 CPU) @ 13853.90/s (n=55000) pureDieObj: 1 wallclock secs ( 1.72 usr + 0.00 sys = 1.72 CPU) @ 31976.74/s (n=55000) pureSub: 2 wallclock secs ( 1.12 usr + 0.00 sys = 1.12 CPU) @ 49107.14/s (n=55000) purists: 1 wallclock secs ( 0.51 usr + 0.00 sys = 0.51 CPU) @ 107843.14/s (n=55000) Rate PsuedoHashObj FacedDieObjStored FacedDieObjNotStored FacelessDieObj pureDieObj pureSub purists PsuedoHashObj 13854/s -- -30% -42% -48% -57% -72% -87% FacedDieObjStored 19856/s 43% -- -16% -26% -38% -60% -82% FacedDieObjNotStored 23707/s 71% 19% -- -11% -26% -52% -78% FacelessDieObj 26699/s 93% 34% 13% -- -17% -46% -75% pureDieObj 31977/s 131% 61% 35% 20% -- -35% -70% pureSub 49107/s 254% 147% 107% 84% 54% -- -54% purists 107843/s 678% 443% 355% 304% 237% 120% --