I think there should be a clear distinction between type casting (i.e. o as Thing) and type conversion (i.e. 10 as an Int → 10 as a float). In the latter, they might abstractly represent the same thing, but they are two completely different data points. The C-style type casting tried to wear far too many hats for my liking. Even without unsafe casts being a thing, the old syntax is one I’d rather see go the way of it.
That said, converting Ints to floating points is a simple reality of coding and when the “least-ugly” solution to the extremely common case is distance( x + 0f, y + 0f) then I think there’s room for improvement.
Also, personally, I don’t get the logic behind disabling implicit number widening conversions for things of the same kind (i.e. Short to Int to Long). It’s not like data is being lost the way it is when converting Int to Float and compiler logic could easily handle the case of nullible equality. Just because java.lang.Long(0) != java.lang.Int(0) does not mean (0 as Long?) != (0 as Int?) has to be true. Is “Long?” really “implicitly a boxed Long” and not a “Nullible Long”? It’s your language, isn’t it?