← Back to context

Comment by uticus

11 hours ago

I don't understand what "tree-shaking" means, can you point to a reference to give me a better understanding?

You might know it as "dead code stripping": You remove all the things from the image that aren't used in your shipping app.

Calling it "tree shaking" is web development term AFAIK.

  • > Calling it "tree shaking" is web development term AFAIK.

    I think that's backwards. Lars Bak and the other V8 folks came from the Smalltalk world and brought the "tree shaking" term with them as far as I know.

    • Wikipedia claims that it originated in Lisp, and the oldest reference I can find is this from 1991: https://www.dreamsongs.com/Files/LispGoodNewsBadNews.pdf (section 1.6.3)

      In any case, before the JavaScript usage, it seems that treeshaking applied to objects to be included in a runtime image. The JavaScript usage is actually more akin to the dead-code elimination and link-time symbol removal of compiled and linked languages.

Tree shaking in this context is not unlike a compiler: it looks at all the code and determines if it will ever run in the image, eliminating any unnecessary code and delivering the minimal image needed. The code is in a “tree” format like an AST, and you’re shaking the tree to test what can be removed.

I used a more recent term known to Web developers.

It means going through the image and remove most code that isn't directly needed by the application, or only exists to support developer workflows.

Usually needs a bit help for fine tuning, regarding what code to keep, and what to delete.

You also find this on Java (jlink, ProGuard, D8/R8 on Android), and .NET (trimming, .NET Native manifests).