title: Are Roslyn SyntaxNodes reused?
body: <p>I've been taking a look to <a href="http://msdn.microsoft.com/en-us/roslyn">Roslyn CTP</a> and, while it solves a similar problem to the <a href="http://msdn.microsoft.com/en-us/library/bb397951.aspx">Expression tree API</a>, both are immutable but Roslyn does so in a quite different way: </p>
  
  <ul>
  <li><p><code>Expression</code> nodes have no reference to the parent node, are modified using a <code>ExpressionVisitor</code> and that's why big parts can be reused. </p></li>
  <li><p>Roslyn's <code>SyntaxNode</code>, on the other side, has a reference to its parent, so all the nodes effectively become a block that's impossible to re-use. Methods like <code>Update</code>, <code>ReplaceNode</code>, etc, are provided to make modifications. </p></li>
  </ul>
  
  <p>Where does this end? <code>Document</code>? <code>Project</code>? <code>ISolution</code>? The API promotes a step-by-step change of the tree (instead of a button up), but does each step makes a full copy?</p>
  
  <p>Why they did they make such a choice? Is there some interesting trick I'm missing? </p>