You&#x27;re right; most of the languages and platforms used for developing applications don&#x27;t have reliable support for tree-shaking or fine-grained static linking. But there&#x27;s hope for some of them.<p>When building Android applications, it&#x27;s common to process the JVM bytecode with ProGuard before converting it to Dex bytecode. ProGuard includes a tree-shaking step. Sometimes it&#x27;s necessary to tell ProGuard about specific classes or class members that it should leave alone, if they&#x27;re accessed dynamically (e.g. using java.lang.reflect or Class.forName). But it&#x27;s still better than nothing.<p>Likewise, .NET applications for the Windows Store are compiled to native code using .NET Native, and that compilation includes a tree-shaking step. This introduces some limitations on the use of reflection. I&#x27;m guessing similar limitations will apply to the native compilation option of .NET Core.<p>As for JavaScript, Google&#x27;s Closure Compiler can do tree-shaking. But I don&#x27;t know if the Closure Compiler&#x27;s advanced mode works with any of the popular JavaScript libraries or frameworks, or just Google&#x27;s Closure Library.