3 ms·
javascript and python would disagree with you.
by yanilkr 10y ago
javascript and python would disagree with you.
- gagege 10y agoA lot of people are perfectly happy if Javascript and Python disagree with them.
- Jtsummers 10y agoParent's claim: Of course, but not all tools are equal. In programming languages, languages that have a static type system have an insurmountable advantage of dynamically typed ones. Your response: javascript and python would disagree with you. My question: How so? Since the claim is about the advantages of static type systems, I'll respond on that claim alone. The primary advantage of static type systems, particularly expressive ones, but even of less expressive ones like C, is that a large class of errors can never occur in run-time code. You cannot, possibly, without deliberate effort to defeat the type checker do the following in a statically typed language without at least a compile time warning (to permit C and its weak type system and occasional implicit casting): Define a function in your language of type: int -> int -> int [or (int, int) -> int]. Pass in something that is not an int to either parameter. Python will happily accept this code: def add(a,b): a + b ... some context add("aoeu", 3) And not tell you until that add call occurs. A run-time error. Could be very infrequent, which makes it really hard to reproduce. In C: int add(int a, int b) { return a+b; } ... some context add("aoeu",3); the add call won't even make it past the compiler. JavaScript is even worse: You won't get an error at all! function add(a,b) { return a + b; } ... some context add("aoeu",3) // results in "aoeu3" as the return! Dynamic and weak typing! This doesn't mean python and javascript are bad. But it does mean they possess disadvantages relative to statically typed languages. Their type systems mean that significant testing has to be put in to verify/validate your program for guarantees that are baked into statically typed languages (caveat for implicit conversions of certain types, again, in languages like C, but this usually gets at least a warning if not an error).
- yanilkr 10y ago"insurmountable advantage" - I don't think so. the simplicity that javascript and python provides is an enormous advantage to many kinds of projects.
- kmiroslav 10y agoThese languages stopped being simpler when type inference became mainstream in statically typed languages about ten years ago.
- Jtsummers 10y agoIt's not simple when you have to maintain it or debug it. There are many classes of errors that can occur when writing software. Languages with implicit variable creation like python obscure errors like mistyping the name of a new variable (versus an explicit declaration like in C or an ML where the mistyped name will result in an error immediately modulo name conflicts). It looks correct at a glance, but: def foo(a_name, b_name): # computations a_nam = #some more computations # computations using a_name, not a_nam, returns # erroneous values (NB: The above is bad practice anyways, an advantage of the single static assignment of the dynamically typed erlang.) Oops, we forgot an 'e' at some point. Now we have a new variable, but we used the old variable name for future computations and returned a result based on that. Type errors, I've already discussed. Logic errors like: if(a < b) // when we meant a <= b Are universal to all languages, they can't eliminate these. Actually, this leads to a major gripe I have with C. The duplication of meaning for = as both initial value assignment and later reassignment paired with the use of non-zero values to indicate true. if (a = b) // well, shit. a has a wrong value, and we go // down the wrong branch now depending on the // value of b. Good practices only get us so far. Moving those good practices (static typing paired with type inference for simplicity, single static assignment or immutability by default, etc.) into the language does add mental overhead to programming. But it also produces less errorful final products. As a guy who writes software that can literally save or kill someone depending on how well or not it functions, I'm in favor of better languages.
- niothiel 10y agoPer your typo point, this has already been solved by linting. If I made a typo like that, any decent editor (Sublime in my case) would draw a big red box and complain at me for using an undeclared variable. In the case of a typo on assignment as in your example, the linter would report a variable declaration without usages. Per your testing point, so what? Doesn't everyone strive for 100% code coverage anyway? One of the big advantages of dynamic languages is that more functionality can be implemented in less code which in turn makes it easier to hit that 100% coverage.