I'm playing with DLR to get a better understanding of it. I'm not completely familiar yet with all its concepts and its terminology so sorry for any terminological or conceptual mistakes in my question.
Basically, the way I understand it is that you pass around objects in expression trees but you use binders in order to expose your objects' dynamic functionality to other DLR-aware languages. So instead of doing an addition, for example, directly in the expression tree (With Expression.Add), you create a binder that is invoked by the call site whenever it is needed and does the addition for you.
However, since you pass objects around, at the end of the addition operation (if the operands are, for example, two Int32 values) you will have to box the resulting Int32 to an object since (still in the binder) that what the call site expects. I'm a bit afraid that this constant boxing / unboxing might affect the performance of the runtime somewhat.
Is this really how it is supposed to work (with all the boxing / unboxing) or am I missing something?