5 ms·
> Strong, because values have one specific type (or None) Because its type system does not provide implicit type conversion I guess. But some languages have a
by NoiseByNW 8y ago
> Strong, because values have one specific type (or None)
Because its type system does not provide implicit type conversion I guess.
But some languages have a stronger type system with, in addition, highly qualified types (e.g. constness, range, sign or any custom contract).
> Dynamic, because variables acquire type information at runtime, and the same variable can, at different points in time
This is not a characteristic of dynamic typing, some statically typed languages supports variable shadowing in the same scope.
A dynamic (or hybrid) typing system is IMHO simply a system which provides a variant type as first class citizen.
- tudorb 8y ago> But some languages have a stronger type system with, in addition, highly qualified types (e.g. constness, range, sign or any custom contract). Sure. Those are overly simplistic categories, but a full discussion of type systems in programming languages would be out of scope for that post. > some statically typed languages supports variable shadowing in the same scope Shadowing is a different issue. Shadowing refers to two different variables (which happens to have the same name), so it's orthogonal to whether the same variable is allowed to hold values of different types at different times.
- deleted 8y ago[deleted]
- seanmcdirmid 8y agoThere are also static type systems that support dynamic inheritance (eg the one designed for Cecil) where the type of a value can change over time.
- ubernostrum 8y agoThis is not a characteristic of dynamic typing, some statically typed languages supports variable shadowing in the same scope. A dynamic (or hybrid) typing system is IMHO simply a system which provides a variant type as first class citizen. You're welcome to your humble opinion. Your opinion is not generally accepted, though. The most common definitions of static versus dynamic typing boil down to whether both names and values have types and those types must be compatible (static) or whether only values have types and no checking for compatibility with names is required (dynamic). That is: a = 3 a = 'foo' The above probably fails in a statically-typed language, because 'a' will be a name of a type incompatible with the value 'foo'. In a dynamically-typed language it's perfectly OK.
- AnaniasAnanas 8y ago> The above probably fails in a statically-typed language I am not sure that this is always correct. I am pretty sure that your example would be accepted in some static type systems with union types such as https://www.cl.cam.ac.uk/~sd601/papers/mlsub-preprint.pdf https://www.cl.cam.ac.uk/~sd601/papers/mlsub-preprint.pdf
- ubernostrum 8y agoYou know, I considered the possibility someone would "well, actually..." me there, and I thought about putting in a pedantic "unless the language you are using supports a type which can be either an integer or a string, and you have previously indicated that the name in question is of such a type, and the values you are attempting to assign are legal for that previously-indicated type". But then I decided I wanted to live in a world where people don't need to write a Ph.D. thesis with a hundred pages of footnotes covering every conceivable logically-possible eventuality just to make a simple point.
- AnaniasAnanas 8y ago> and you have previously indicated that the name in question is of such a type This is not needed under the inference system proposed in that paper. > But then I decided I wanted to live in a world where people don't need to write a Ph.D. thesis with a hundred pages of footnotes covering every conceivable logically-possible eventuality just to make a simple point. Have you considered finding better examples instead? I think that a better explanation on the differences between static and dynamic typing would be to simply say that in dynamic typing type checking happens during the runtime while in static typing type checking happens during the compile time.
- ubernostrum 8y agoHave you considered finding better examples instead? Have you considered being a better person? Rushing to "well actually" someone else over even the tiniest omission in something they say is not a positive character trait. What you should do is immediately and permanently and irrevocably stop doing it.