5 ms·
Although it'll always be tempting to provide isinstance() type checks in your dynamic language, there's no reason you have to have them!
by panic 9y ago
Although it'll always be tempting to provide isinstance() type checks in your dynamic language, there's no reason you have to have them!
- crdoconnor 9y agoOver the last few years I've started using them a lot simply because it means you get simpler, clearer and more actionable errors more quickly. They're especially useful when you are writing libraries for use by somebody else.
- weberc2 9y agoThis is basically the "correctness" argument for static typing. That you do this in a dynamic language is a liability.
- crdoconnor 9y agoPlacing a small number of sanity (hint: it's not always type that needs checking) checks on border code is not any kind of argument for static typing. I'd do the same thing in most languages - in fact, I'd end up doing way way way more of it in C because it's very weakly typed.
- weberc2 9y ago> it's not always type that needs checking I think type theorists would disagree. > Placing a small number of sanity checks on border code is not any kind of argument for static typing. Yes it is if any of those checks are for types. > I'd do the same thing in most languages - in fact, I'd end up doing way way way more of it in C because it's very weakly typed. C doesn't have type checks, unless you're using some runtime type system (like GObject) on top of it. At any rate, C may not be completely type safe, but it's better than dynamic languages which are completely type unsafe; even if you could do type assertions, you would do them far less frequently in C than, say, Python. Further, C is not the canonical statically typed language, and you would be laughed out your workplace if you proposed adding a runtime type check on your function parameters. Even if you're using Python (assuming you have the good fortune to use a modern version), you can just use type annotations and the static type checker rather than littering the code and slowing your program. Albeit your point stands about writing library code for another's consumption.
- deleted 9y ago[deleted]
- crdoconnor 9y ago>C doesn't have type checks, unless you're using some runtime type system (like GObject) on top of it. At any rate, C may not be completely type safe, but it's better than dynamic languages which are completely type unsafe And worse than dynamic languages which have greater type-safety. Point being that it's type safety, not static typing that helps cut down on the need for sanity checking. >you can just use type annotations Type annotations are both unchecked and render any code that you write unusable in python 2. >rather than littering the code Type annotations DO litter the code.
- weberc2 9y ago> And worse than dynamic languages which have greater type-safety I think you're confusing strong typing with type safety. Strong typing doesn't preclude errors; you just don't see the error until you hit the code, which might be all the time for a happy path, or almost never for an error path. Static typing, on the other hand, completely eliminates the need for sanity type checks (and depending on your language's notion of 'type' this can include virtually all forms of sanity checks). > Type annotations are both unchecked and render any code that you write unusable in python 2 Static type checking is supported for both Python 2 and 3. If you need to write Python 2/3, you could probably just use the Python 2 annotations. > Type annotations DO litter the code. They don't. They're a small annotation that tells you what the variable actually is/does. Much neater than Sphinx docs, etc. And you do need to know the type, whether you like it or not.
- crdoconnor 9y ago>I think you're confusing strong typing with type safety. Check the wikipedia page for strong typing. Type safety is one of the ~11 or so different definitions. It's one reason I try to avoid using the term - because it's more emotional than meaningful. >Static typing, on the other hand, completely eliminates the need for sanity type checks You've not programmed in C have you?
- panic 9y agoYeah -- a dynamic language could provide an assertinstance() operation, which throws an error if the types don't match, without going all the way to a boolean isinstance() check.
- weberc2 9y agoI agree; but there's nothing enforcing it either, and I always prefer rails for enforcing best practices rather than code review (where egos tend to be bruised, feedback takes longer, etc etc).