Programmers don’t usually spend a lot of time thinking carefully about names and values. As long as we follow a few basic rules, our code will generally behave as expected. As I develop my language Leaf however, I need to give a great deal of consideration to these rules. The separation between names and values, and how things are assigned, form the core of a language. Of course I’d like to get this right. Unfortunately it’s not as simple as deciding between “by value” or “by reference” semantics. There are many situations and programming techniques to consider.