6 ms·
Same can be said of static type checking so what is your point? Are you suggesting that those working in static languages don't need to write tests? Static typ
by lucisferre 10y ago
Same can be said of static type checking so what is your point? Are you suggesting that those working in static languages don't need to write tests?
Static type checking generally represents an even lower form of error detection than functional and unit testing does. Sure, it can be convenient to have it, but lately I see a lot of static language novices around here talking about their recent and limited experience with type checking as if they are suddenly experts in the tradeoffs between static and dynamic languages.
- pka 10y agoBut, as you surely know, types prove something about a piece of code. This means they can very well prove the absence of (certain) bugs. So generally, the more invariants you manage to capture in your types, the more categories of bugs you can statically prove will never happen.
- jw- 10y agoThis is all true, but is it not a problem that most static languages don't let you (easily) specify the kind of invariants people include in unit-tests.
- acjohnson55 10y agoSure. But you write unit tests for those.
- willtim 10y ago> Same can be said of static type checking so what is your point? That isn't true. Static typing offers machine checked proofs of the absence of a whole class of trivial errors; and potentially any invariants you've managed to teach it. My point was that testing does not negate the need for static types, as implied by the previous poster.
- kazinator 10y agoAlthough "class" sounds big, in fact there is only a countable number of places (nodes in the program's tree) where you can have a type error. The space in which any error whatsoever can occur is astronomical.
- TheDong 10y agoLet me give an analogy: Claim: "Getting vaccinated stops a whole class of diseases which might kill you" Your rebuttal: Although "class" sounds big, in fact there are only a countable number of viruses that vaccines save you from. The number of ways in which you can die is astronomical. In the above analogy, as in your original statement, you're completely missing the point that the class of errors / class of diseases is an important class and easily preventable, therefore you should do it. In fact, I think what you've said is the reverse of true. Static typing means that there's a chance of an error at each node in the program's tree because a statically typed and statically compiled language ensures that the program can be rendered as an AST before you ship it to your user. A dynamically typed interpreted language can have an error at literally any character in the entire thing, and you don't have "compile-time" to tell you it's not an error. The class of errors that you're saving yourself from is "every single character of this program could be wrong in a way that results in it not even being representable as an AST; there are astronomically many ways that can occur". In addition, it now goes wrong much later. You have to ensure that you've hit every path with testing before you can be even somewhat confident it's valid code, let alone logically correct and bug-free in other ways. A compiled statically-typed language you waste no more time than a compile-cycle to get that minimal assurance.
- jdmichal 10y ago> Are you suggesting that those working in static languages don't need to write tests? You certainly don't need to write tests that Math.floor will return NaN when you pass it something that's not a number...
- kazinator 10y agoWhat? NaN is actually a number in the sense of being in the domain of the floating-point type. You seem to be mixing up "not a number" (as in character string or list) versus "not a number" as in a special IEEE representation that has special uses in numeric code. A floor function that returns NaN when given a string, instead of throwing a type mismatch exception, is crap design, and a strawman example of that type of checking. It's not an appropriate use of NaN!
- jdmichal 10y agoI agree with you [0], but that's what JavaScript gives us to work with. [0] https://news.ycombinator.com/item?id=11898046 https://news.ycombinator.com/item?id=11898046