
On Sunday 26 October 2003 10:13, Greg Ewing wrote:
Hardly arbitary (I have fond memories of several languages that used :=).
But all the ones I know of use it for ordinary assignment. We'd be having two kinds of assignment, and there's no prior art to suggest to suggest which should be = and which :=. That's the "arbitrary" part.
The only language I can remember seeing which had two kinds of assignment was Simula, which had := for value assignment and :- for reference assignment (or was it the other way around? :-) I always thought that was kind of weird.
VB6 had LET x = y for value assignment and SET x = y for reference assignment. Yes, very confusing particularly because the LET keyword could be dropped. Fortunately we're not proposing anything like that;-). Icon had := for irreversible and <- for reversible assignment. (also :=: and <-> for exchanges and diffferent comparisons for == and === so maybe it HAD gone a bit overboard:-). I do recall an obscure language where <op>= was always augmented assignment equivalent to a = a <op> b. But in particular the : operator meant to evaluate two exprs and take the RH one, like comma in C, so a := b did turn out to mean the same as a = b BUT fail if a couldn't first be evaluated, which (sort of randomly) is sort of close to Just's proposal. Unfortunately I don't remember the language's name:-(. Googling a bit does show other languages distinguishing global from local variable assignments. E.g, in MUF, http://www.muq.org/~cynbe/muq/muf1_24.html , --> (arrow with TWO hyphens) assigns globally, -> (arrow with ONE hyphen) assigns locally. It appears that this approach is slightly less popular than the 'qualification' one I suggested (e.g. in Javascript you can assign window.x to assign the global x; in Beanshell, super.x to assign to x from enclosing scope) which in turn is less popular than declarations. Another not very popular idea is distinguishing locals and globals by name rules, as in Ruby $glob vs loc or KVirc Glob (upper initial) vs loc (lower initial). Alex