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