> There is no var keyword that you have to use when first create a variable. My > "implicit var" proposal was for Nim to behave the same way for b = 2 as for > var b = 2. You'd still get b type-inferred as int with static checking like > in Crystal (or like with b := 2 in Go).
But there are cases where var b = 2 and b = 2 have different meanings in Nim, for instance: proc p(b: var int) = var b = 2 Run and proc p(b: var int) = b = 2 Run And here: var a = 0 # some code. while true: a = 2 # Run compared to: var a = 0 # some code. while true: var a = 2 # Run So we need var to maintain the difference between a declaration with initialization and an assignment. Giving the user the possibility to remove var and let the compiler guess what he is meaning, would only make Nim confusing. In some cases b = 2 would be a declaration, in other cases an assignment, and in others something ambiguous. Personally, I think that this would be a mess. And, still, I maintain that the languages have very different semantic and changing the syntax to make them look more closer is a trap. b = 2 in Python is, in Nim, neither equivalent to var b = 2 nor to b = 2 despite the apparences. At least, when Python users use var in Nim, they know: * that they have reserved some memory to store a value whose size is determined by its type; * that no declaration with the same name is allowed in the same block; * that when exiting the block containing the declaration, the memory assigned to the variable will be freed. None of these statements is true in Python.