Here is a code sample that creates a control object which calculates the expressions inside Maniplate again and again and never stop (it's proved by the code in the note):
Sample 1:
Manipulate[date = Table[0, {num}];
For[i = 1, i <= num, i++, date[[i]] = Sin[i]];(*Print@i;*)
ListPlot[{date}], {{num, 2}, 1, 20, 1}]
While has the same problem:
Sample 2:
Manipulate[date = Table[0, {num}]; i = 1;
While[i <= num, date[[i]] = Sin[i]; i++];
ListPlot[{date}], {{num, 2}, 1, 20, 1}]
I know if I choose Do, the problem will no longer exist:
Sample 3:
Manipulate[date = Table[0, {num}];
Do[date[[i]] = Sin[i], {i, 1, num}];
ListPlot[{date}], {{num, 2}, 1, 20, 1}]
Still, I know I can solve the problem if I throw the expression into Module if what I'm using is For:
Sample 4:
Manipulate[Module[{i}, date = Table[0, {num}];
For[i = 1, i <= num, i++, date[[i]] = Sin[i]];
ListPlot[{date}]], {{num, 2}, 1, 20, 1}]
And…yeah, it doesn't work for the code above with While…:
Sample 5:
Manipulate[Module[{j}, date = Table[0, {num}]; j = 1;
While[j <= num, date[[j]] = Sin[j]; j++];
ListPlot[{date}]], {{num, 2}, 1, 20, 1}]
(*This still creates a problematic control object*)
How to solve the problem with While? what actually happens inside Manipulate? what's the exact reason for the endless loop?
OK, the problem with sample 5 turns out to be a collaboration of Sample 4 and Sample 5, before I run sample 5, a control object has been already created by Sample 4 (let's call it Object 4 below, and so we have Object 5 for Sample 5).I think the process should be like this: when date = Table[0, {num}]; in Sample 5 is executed, it's tracked by Object 4, and then For[i = 1, i <= num, i++, date[[i]] = Sin[i]]; in Sample 4 is executed, so it is tracked by Object 5…so this story tells us how important a good programing habit is…

TrackedSymbols:>in your link works! But I still wonder why the solution withModuledoesn't work forWhile… – xzczd Sep 18 '12 at 07:14While? For me it does:Manipulate[Module[{i = 1}, date = Table[0, {num}]; While[i <= num, date[[i]] = Sin[i]; i++]; ListPlot[{date}]], {{num, 2}, 1, 20, 1}]won't result in an endless loop... – Albert Retey Sep 18 '12 at 12:45i=1is set in the expressions:Manipulate[Module[{j}, date = Table[0, {num}]; j = 1; While[j <= num, date[[j]] = Sin[j]; j++]; ListPlot[{date}]], {{num, 2}, 1, 20, 1}]– xzczd Sep 18 '12 at 12:54Manipulateshown at the same time? – Albert Retey Sep 18 '12 at 18:12Manipulatestries to resolve the dependencies and generate a good automatic tracking. This seems to recognize that the assignments todatewithin a scoping construct shouldn't trigger an update while it doesn't recognize the same thing when the assignments are not within a scoping construct... – Albert Retey Sep 20 '12 at 07:58ithat cause the endless loops, the reassignments ofdateseem to be recognized as not worth tracking even without a scoping construct. I still think that my statements about these things being a matter of how the internal heuristics are implemented might be correct... – Albert Retey Sep 20 '12 at 08:15dateisn't tracked in any case in your last comment? Then how to explain the behaviour of Object 4 and Object 5? Also, I observed the case that the endless loop won't appear if Object 4 and Object 5 are not shown up in the notebook concurrently, I mean we should drag the scrollbar and let at least part of the Object be seen, or the loop won't happen, is this what you found? – xzczd Sep 20 '12 at 10:38dateis tracked. See my answer for more details about the difference between the tracking ofianddate, I hope that makes more clear where I think there is still something that hasn't been explained (and most probably can only be explained by someone knowing the internal implementation...) – Albert Retey Sep 21 '12 at 10:26