|
Point taken - I guess it's a side-effect of some early design decisions. Changing the type of the lhs in an expression such as var1 = var2is contrary to the concepts those familiar with compiled languages are used to which is where the compiler attempts to convert var2 into the type of var1. That confuses us poor simple C and C++ coders.
It becomes difficult to keep track of things if variables become effectively just a handle to something else, since the type is effectively mutable on any assignment.
It's another argument (one I'm sure has already been thrashed out) as to whether it is more useful to convert the lhs to the type of the rhs (as lua effectively does), or vice-versa.
It's just another source of confusion for C and C++ programmers, who are used to the other way around. In this respect, Lua doesn't really protect the user from having to know about types at all. The only interchangeable ones are strings and numbers, and that's only because there are built-in converters between these 2 types.
Anyway, it's core to the language, so it probably shouldn't be changed.In which case, separate functions will need to be written to deep-copy objects... you end up with code like
deepcopy(var1, var2); or maybe var1.Assign(var2); instead of var1 = var2; so I guess __assign is going nowhere. still no comment on __cast though? Miles Bader wrote:
Adrien de Croy <adrien@qbik.com> writes:It could be considered radical maybe for tables. for userdata and lightuserdata, it makes perfect sense to use the same syntax to copy one userdata to another one the same as you would a string value, rather than a function to do it.It seems a fairly fundamental part of Lua that it's a "reference" language (like lisp/scheme, clu, etc): variables store references to their value, not the values (this is slightly relaxed for numbers, but that doesn't change the general properties of this behavior). The result is that users can rely on assignment being very cheap, and having no side effect other than the obvious one. I think any change to this could be considered "huge", as could be any change that makes "assignment" (with "=") different than e.g. parameter passing. -Miles
-- Adrien de Croy - WinGate Proxy Server - http://www.wingate.com