3 ms·
I'm no language designer either, but I would guess that since Crystal wants to be 100% type inferred, they feel that having to type "var" or "let" is just boile
by gagege 12y ago
I'm no language designer either, but I would guess that since Crystal wants to be 100% type inferred, they feel that having to type "var" or "let" is just boilerplate.
- eudox 12y agoThat has nothing to do with the scoping. There's no way to know whether "left = right" means "Set 'left' to 'right'" or "Create a new variable 'left', with value 'right'".
- Igglyboo 12y agoHow are they different? Both produce the same end result, Python manages this syntax just fine.
- exogen 12y ago"Just fine" is papering over the fact that people get tripped up by this in Python all the time – sometimes you need to use the `global` or `nonlocal` statements to resolve the ambiguity. https://docs.python.org/3/reference/simple_stmts.html#global https://docs.python.org/3/reference/simple_stmts.html#global https://docs.python.org/3/reference/simple_stmts.html#nonlocal https://docs.python.org/3/reference/simple_stmts.html#nonloc... Classic example: http://stackoverflow.com/questions/9264763/unboundlocalerror-in-python http://stackoverflow.com/questions/9264763/unboundlocalerror... If you search for UnboundLocalError on StackOverflow, there are 918 results. Not all of them are due to this particular scoping ambiguity, but many of them are.
- lmm 12y agoIt's a mistake even in Python. It makes typos harder to catch. And a visible distinction between variables that change and values that don't makes code much easier to reason about.
- axiomabsolute 12y agoEven in type inferred languages they serve some use, namely in avoiding mis-typed variable names. Languages which require "var" make a distinction between the intent of declaring a new variable vs setting the value of an existing variable, and so are able to catch instances where the programmer tries to set a non-existent variable.
- vorg 12y agoOr more tersely use := and = to distinguish them.