Tcl 8 introduced dual-ported objects. Everything can exist as a typed object that is convertible back to a string in certain cases (some form of string operation typically). That plus the bytecode engine makes it work completely different than prior releases.
That's just a performance optimisation. It doesn't change the semantics at all. From the changelog:
> Tcl automatically manages these values so their type is transparent to the Tcl script writer.
https://www.tcl-lang.org/software/tcltk/whatsnew.tml