<div dir="ltr"><br><br><div class="gmail_quote">On Sat, Jul 26, 2008 at 2:17 PM, James Hague <<a href="mailto:james.hague@gmail.com">james.hague@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">> Imagine this:<br>
><br>
> X = tl(L),<br>
> ... many messy lines ...<br>
> *X = tl(X),<br>
> ... another many lines ...<br>
> *X = tl(X),<br>
> ... another many almost unreadable messy lines ...<br>
> sensitive_usage(X), % <--- buggy X value observed here<br>
><br>
> And my question is, where Value of X came from? It goes from L, but how long<br>
> it take and how many errors you can do when you will investigate?<br>
<br>
</div>It's just as bad when there's code like this:<br>
<br>
T2 = something(T),<br>
T3 = something(T2),<br>
T4 = something(T3),<br>
T5 = something(T4),<br>
T6 = something(T5)<br>
<br>
You may laugh at that code, but it's hardly uncommon, even in code<br>
written by experienced programmers.  It's very easy to accidentally<br>
use T4 in a spot when you meant T3, or to have to renumber things and<br>
make a mistake.<br>
<br>
Please note that I am not arguing for changes in Erlang.  I truly am<br>
not.  But I can understand why this request comes up regularly.<br>
<div><div></div><div class="Wj3C7c"><br></div></div></blockquote><div><br>There is a way to satisfy this request without breaking single assignment, and that is to have a more sophisticated  scoping. <br><br>For example, the above in lisp/scheme are:<br>
<br>(let ((t (something t)))<br>  (let ((t (something t)))<br>     (let ((t (something t)))<br>...)))<br><br>No mutabilities involved - just better scopes - can't be that bad for Erlang, right? ;)<br><br>Cheers,<br>yc<br>
<br></div></div></div>