<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
More generally, there seem( to be several different kinds of statically-known or constant timescales and scopes here:<br></blockquote><div><br></div><div>There should be a name for this hierarchy, because it comes up for all manner of programming-language problems. If you are writing a checker, these are the different times where a property is possible to verify. If you are writing an optimizer, these are the different places where the optimizer will know enough to be both effective and  safe.</div><div><br></div><div>You can usually do things too late. A context-independent static will still be static under any of the other definitions. At least in the old days, Alan Kay encouraged his collaborators to err towards doing everything late, because he wanted to explore fundamentally new constructs.</div><div><br></div><div>For completeness, "link time", or maybe "whole-program static", is sometimes interesting. It goes between "context-dependent static" and "context-dependent dynamic". An example would be whole-program dead code removal. Another example, from my world of the last few years, is stratifying a Datalog program.</div><div><br></div><div><br></div><div>Lex Spoon</div><div><br></div></div></div></div>