I think the area where languages vary the most is how they allow you to talk about the *name* of something, rather than the object itself. And this varies for names of globals, constants, classes, instance variables, local variables, and methods. I believe that the degree to which these concepts are unified is a measure of the quality of the language. (And whether or not (in a dynamic language) accessing an undefined variable leads to nil or an exception. In Ruby, undefined local access produces this amusing message: > undefined local variable or method but an undefined instance variable produces nil. I think anything that discourages people from using a proper Hash is very bad.) Consider: Ruby, Smalltalk, Python, Java, Scheme, Objective-C, Lua Well, I will have to learn about object systems in Scheme, and how Smalltalk handles variables. Further reading: * PLAI * EOPL * SICP