There is no question that we need types in a programming language. The problem is, there is a mismatch between sematic types and the actual data types. The actual data types are from bottom up: either it is a white horse or it is a black horse, and if there is a horse type, a white horse is not a horse. On the other hand, our semantic types are top-down. First we are only concerned whether it is a horse, only when the situation requires, we differentiate it into white horse or black horse. This mis-match between bottom-up and top-down creates a significant programming friction.
What do we do?
First, I think we should meet in the middle. Let's all work at a default type. For example, integers, let's by default all work with int -- be it 32bit or 64bit, let's assume (for now) it is always of sufficent size and efficiency.
Next, we need the meta programming system the ability to trace the variables and allow certain variable to be upgradable to a more specific types. The meta system has to understand the hierarchy types -- e.g. int64 > int32 = int> int8. That allows us to make requirements, for example, here we require 64 bit.
Then the meta system should be able to propagate that requirement throughout the variables lifetime and all other variables it affects.
Essentially, this middle ground provides a bridge so we can work at our sematic top-down type system while the computer code can work at its bottom-up system.
By the way, I think the implicit string<->number conversion is silly. I don't think we ever mix string with number in our semantic mind, so explict conversion does not conflict with our thought flow. We might need better syntax for these explicit conversions. Perl is eq, ne, lt, gt. ...
vs. ==, !=, >, <, ...
is a great model. Maybe we could do something like:
n_a = <In>
Since n_a
explictly suggest it is int, the conversion is quite explict?
I don't think we will ever need a variable convert back and forth between string and number. It is semantically confusing and it is costly for the underlying computer types as well.