Google Closure and GWT both do exactly that - they use static analysis to cull code which never gets called. You can't use them with standard JS libs though - JS code needs to be specially marked up to use that feature in Closure, and GWT development is in Java.
GWT takes the idea one step further - the code splitting functionality lets you define split points, and code that only ever gets called behind the split point does not need to be downloaded on page load, but can instead be downloaded when that split point is first reached.
3x would cause antialiasing artifacts for apps with images optimized for 2x retina displays. Apple decided to wait for pixels to be 4x smaller before jumping to a higher resolution, so they must think these artifacts are unacceptable. Therefore, the logical next step is 4x displays with 528ppi :)
Ugh, `dynamic` doesn't provide the benefits of a dynamically typed language by long, long way, and yes I've used it extensively. But thanks for the downvote all the same.
In case you plan on skimming that and missing the details the tl;dr is that Rob, pushes `dynamic` as far as he can and it still comes up far short of the extensibility and expressiveness of Ruby constructs.
Upvoted. Spot on. It's nowhere near as dynamic as a basic dynamic language. So much so that I just don't bother with dynamic in C# (I also don't bother with nullable types and a load of other features as well but that's another story).
However, I don't find that a problem. I tend to prefer the correctness of statically typed languages these days.
To me, the loophole seems to be 'Now his widow can sell those shares without paying any income tax on the appreciation before his death. She would have to pay taxes only on the increase in value from the time of his death to the time of the sale. '
Why doesn't the widow need to pay taxes on the increase from the original cost basis to time of sale? What is the reasoning for resetting the cost basis to 'value at time of death', when no taxes are paid at that time?
GWT takes the idea one step further - the code splitting functionality lets you define split points, and code that only ever gets called behind the split point does not need to be downloaded on page load, but can instead be downloaded when that split point is first reached.