How is a grype with static typing that it is not enforced at runtime? This comes up like once a week, have these people never used statically typed languages?
> The fact that you can put nonsensical types wherever you want and still get a working program has consequences.
Working is questionable, but nothing in C++ prevents this at runtime either, nothing in JVM prevents this at runtime, static typing is not runtime typing, it should not be, it is not the USP.
> There is an Any type and it renders everything useless
Java has object, C++/C has void*, Go has interface{} - none of these render the type system useless, and Python's type system makes it a lot easier to write correct code than Go's type system or C's type system.
Difference between any and object, void* and interface{} is you can't really do anything with the second. Sure you can store something on an "object" type but you need to cast it back to do anything which discourages usage of it (and add runtime checks, usually)
While in python you can mark something as "any" and continue using it as is.
> The fact that you can put nonsensical types wherever you want and still get a working program has consequences.
Working is questionable, but nothing in C++ prevents this at runtime either, nothing in JVM prevents this at runtime, static typing is not runtime typing, it should not be, it is not the USP.
> There is an Any type and it renders everything useless
Java has object, C++/C has void*, Go has interface{} - none of these render the type system useless, and Python's type system makes it a lot easier to write correct code than Go's type system or C's type system.