<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">So far as I know, all immutable languages do it. Like Don, I think the reason it&#39;s emphasized so much in Clojure is because of trying to convert the Java crowd and introducing them to immutability. With mutable languages you have to clone _everything_ for fear of later changes affecting earlier copies. Because of this, folks used to mutable languages often erroneously suppose that immutable languages do the same thing. There&#39;s a lot of FUD in the mainstream about declarative/immutable/functional languages and their performance behavior.<br>
</div>
<br>
The idea is simple and you can do it in mutable languages perfectly well (clone the changed part of the spine, point to old substructure) so long as you&#39;re careful not to do mutation, e.g. by marking everything &quot;final&quot;. You don&#39;t see it as much in mutable languages because people get squeamish about the first step: clone the changed spine; they&#39;d much rather mutate it. In heavily GCed languages like Haskell allocation and collection is cheap, so we don&#39;t mind too much; but in Java and the like, both allocation and collection are expensive so the idea of cheap throwaway objects is foreign.<br>
</blockquote><div><span class="Apple-style-span" style="color: rgb(136, 136, 136);"><br></span></div><div>Are you guys saying that the Clojure target audience is current Java programmers, whereas Haskell&#39;s is people who already do functional, immutable programming? Because how long the technique has been used, or how widespread it&#39;s used, is irrelevant when trying to convince someone who doesn&#39;t have experience with immutable data structures that it&#39;s not completely insane.<br>
</div></div>