4 ms·
Language with "dynamic" type can't be called "statically typed".
by EugeneOZ 8y ago
Language with "dynamic" type can't be called "statically typed".
- mraleph 8y agoIs C# statically typed?
- EugeneOZ 8y agoI don't know.
- EugeneOZ 8y agoReally happy to see this absolutely honest and neutral answer downvoted. It says a lot about the level of my opponents.
- panopticon 8y agoYes, it is.
- drb91 8y agoMost languages I can think of have this type, from void* to dyn to bounding by the root of the type hierarchy. Not all languages. However, what is c, c++, java, rust, go, if not statically typed? Ambiguously typed? Seems like not a useful distinction to make. I argue static typing is the ability to static type up to 100% of a program, not the exclusion of a dynamic type.
- EugeneOZ 8y agoRust doesn't have such type. And type annotations in Dart are optional - when programmers are not obliged to use them, guess what will happen? They do NOT use them. People are lazy. Dart's types exist only on compilation step. You can try to use "strong mode" in theory, in practice you will never compile it with third-party libraries.
- foldr 8y agoRust has both raw void* pointers (within unsafe code) and the safe std::any::Any trait: https://doc.rust-lang.org/std/any/trait.Any.html https://doc.rust-lang.org/std/any/trait.Any.html
- EugeneOZ 8y agoTrait is not a type, Any is just a custom trait. Types: https://doc.rust-lang.org/book/second-edition/ch03-02-data-types.html https://doc.rust-lang.org/book/second-edition/ch03-02-data-t... You can create trait with name "Magic" or "Fuck" and it will not mean anything. Pointers is not a type also.
- foldr 8y agoPointers are certainly types in Rust, and although it's of course true that the Any trait is not itself a type, a reference to an Any trait (which is what you'd actually pass around) is a type.
- EugeneOZ 8y agoWell, you can repeat it many times but it will not become true. I gave you link to the list of Rust types. Pointers are pointers, not types. Traits can have any name, their names mean nothing.
- foldr 8y agohttps://doc.rust-lang.org/book/first-edition/raw-pointers.html https://doc.rust-lang.org/book/first-edition/raw-pointers.ht... *const u32 (for example) is a clearly a Rust type -- a const pointer to an unsigned 32-bit integer, analogous to const uint32_t *p in C/C++. I'm not sure what you mean about trait names. The purpose of the Any trait is to make it possible to pass around values of any type and dynamically downcast them, as the documentation indicates. That is a safe analogue of casting a void pointer to another type.
- darpa_escapee 8y agoIf you have a well-thought out argument, and not a quippy one-liner, I'd earnestly like to hear it. Dart's developers think otherwise[1]: > Q. Is Dart a statically typed language? > Yes, Dart 2 is statically typed. For more information, see Dart’s Type System. > With its combination of static and runtime checks, Dart has a sound type system, which guarantees that an expression of one type cannot produce a value of another type. No surprises! > Even with type-safe Dart, you can annotate any variable with dynamic if you need the flexibility of a dynamic language. The dynamic type itself is static, but can contain any type at runtime. Of course, that removes many of the benefits of a type-safe language for that variable. [1] https://www.dartlang.org/faq#q-is-dart-a-statically-typed-language https://www.dartlang.org/faq#q-is-dart-a-statically-typed-la...
- EugeneOZ 8y ago> With its combination of static and runtime checks Do you personally use it? That "strong mode" is a theory-only thing, it doesn't work with any real code, only with code you wrote without real third-party libraries.
- dragonwriter 8y agoYou are, at best, confusing Dart 2 with Dart 1; strong mode was one of several Dart 1 modes, but, yes, it's possible to run into problems because dependencies weren't designed for it. There is no option in Dart 2; everything is the equivalent of strong mode, which eliminates ecosystem problems.
- EugeneOZ 8y agoI mentioned I've only tried Dart 1.x. Glad to hear it's changed in Dart 2.
- munificent 8y ago> only with code you wrote without real third-party libraries. Your claim was true several years ago, but since then the entire ecosystem has migrated onto the new strict type system. It was a monumental amount of work, but, thanks to lots of effort from our users, we're there. Aside from a small number of more-or-less dead packages, you should be able to use any third-party Dart packages you want while still using the new type system.
- munificent 8y agoC#, Scala, Kotlin, TypeScript, et. al have a dynamic type. As long as every type isn't dynamic, I think it's reasonable to claim you have static types.