- Object contains a Class that it derrives from (no BaseObject or Modules)
- Class is an Object
- String is an Object
- Boolean is a two-value singleton of true and false
- Number is an abstract subclass of Object
- Decimal and Integer are abstract subclasses of Number
- Float, Double, LongDouble, BigDecimal are concrete subclasses of Decimal
- SignedByte, Byte, Short, UnsignedShort, Int, Unsigned, Long, UnsignedLong, Char, BigInt are concrete subclasses of Integer (or U/I/F## types reminiscent of Rust instead of C type names)
and so on.
Then there is no boxing/unboxing of simple types or literals because they are one-and-the-same, and no there’s no confusion about how to interact with any truly generic type of value.