News for hackers. Stuff that matters.
Re:Tiny Treeshaker: JavaScript tree shaking in 200 lines of ... by esperent on Tuesday June 29, 2021 @04:02AM (#27673130)
They are not the same, and the term comes from Lisp in the early 90s, not JavaScript. Tree-shaking is actually "live code inclusion" - in other words, it approaches the problem from the other direction.

https://en.m.wikipedia.org/wiki/Tree_shaking

Re:Tiny Treeshaker: JavaScript tree shaking in 200 lines of ... by lispm on Tuesday June 29, 2021 @05:06AM (#27673517)
In Lisp this might work like this (did and still does work in some commercial Lisp systems):

For example a Lisp system may consist of starting a memory image from disk, which leads to a live running memory heap. The tree shaker then may break unused links in memory - either automatic or under programmer direction. The garbage collector then frees the unused memory. Lisp then dumps a new (typically smaller) image, which has unused code and data removed.

Such features appeared no later than end 1980s.

Re:Tiny Treeshaker: JavaScript tree shaking in 200 lines of ... by aarchi on Tuesday June 29, 2021 @07:44AM (#27674486)
They both start at the entry block (or exported symbols if it's a lib) and traverse the program graph, keeping only live branches. There is no “other direction”. Tree shaking is the same as dead code elimination.
Re:Tiny Treeshaker: JavaScript tree shaking in 200 lines of ... by IshKebab on Tuesday June 29, 2021 @06:33AM (#27674013)
> Tree-shaking is actually "live code inclusion"

That's exactly how all dead code elimination works. How else would you do it?

Re:Tiny Treeshaker: JavaScript tree shaking in 200 lines of ... by Kiro on Tuesday June 29, 2021 @07:26AM (#27674353)
I really don't understand the difference. Please enlighten me.
Re:Tiny Treeshaker: JavaScript tree shaking in 200 lines of ... by bschlenk1 on Tuesday June 29, 2021 @09:02AM (#27675193)
All tree shaking is dead code elimination, but not all dead code elimination is tree shaking (in webpack at least).

Tree shaking happens at the import level. If I say `import { abc } from 'some-lib'`, tree shaking won’t include any other objects some-lib may export.

Removing a branch that can never be true, like `if ('production' === 'production') { … } else { /* dead code */ }` is dead code elimination, but webpack wouldn’t consider that tree shaking.