5 ms·
> I was always under the impresion that Rust apps are pretty lightweight, but that install size is nearing Java levels of binary/dependency bloat. For what it'
by neobrain 1y ago
> I was always under the impresion that Rust apps are pretty lightweight, but that install size is nearing Java levels of binary/dependency bloat.
For what it's worth, the zed executable on Linux weighs 3.2 MB.
EDIT: Sorry, the nix store is too good at hiding things from me. It's actually around 337 MB plus webrtc-sys.
- johnisgood 1y agoI just compiled "zed" with "cargo build --release" and not only did it pull >2000 dependencies, its size (executable file) is literally 1.4G. Debug is 1.2G. $ pwd /tmp/zed/target/release $ ls -lh ./zed -rwx------ 2 john john 1.4G Aug 28 17:10 zed --- $ dut zed/ | sort -h 598M 0B | | /- webrtc-sys-0a11149cbc74bc90 598M 0B | | | /- out 598M 0B | | |- webrtc-sys-090125d01b76a5e8 635M 160M | | /- s-hal7osjfce-1h7vhjb-4bdtrsk93m145adnqs17i9dxe 635M 160M | | |- project-06kh4lhaqfutk 641M 161M | | /- project-1ulvakop54j8y 641M 161M | | | /- s-hal5rdrth3-0j8nxqq-d0wsc7qnin39797z4e8ibhj4w 1.1G 1.1G | | /- zed-ed67419e7a858570 1.1G 1.1G | |- zed 1.3G 1.3G | /- zed-64b9faeefdf3b7df 1.3G 1.3G |- zed 1.4G 0B |- build 2.2G 0B | |- build 7.9G 1.4G /- deps 9.4G 0B |- release 14G 2.9G | |- incremental 19G 4.2G | /- deps 33G 0B /- debug 42G 0B /- target 42G 0B zed Summary: $ du -h ./target/debug/deps/ 20G ./target/debug/deps/ $ du -h ./target/release/deps/ 8.0G ./target/release/deps/ $ du -h ./target/debug/zed 1.2G ./target/debug/zed $ du -h ./target/release/zed 1.4G ./target/release/zed This is on a whole new level of bloat; both with regarding to dependencies AND the resulting executable file(s) (EDIT: executable files are unstripped). Any explanations as to why "cargo" does not seem to re-use libraries (dependencies) in a shared directory, or why it needs >2000 dependencies (that I see being downloaded and compiled), or why the executable file of the release mode is 1.4G unstripped while of the debug one it is less?
- neobrain 1y agoUnstripped, perhaps? ls -lh /nix/store/63rdpgbzn7f1smh7688crcrpfsh833bb-zed-editor-0.199.10/bin/zeditor -r-xr-xr-x. 2 root root 3.2M Jan 1 1970 /nix/store/63rdpgbzn7f1smh7688crcrpfsh833bb-zed-editor-0.199.10/bin/zeditor EDIT: Ah, it was too good to be true. The true binary is hidden in libexec/.zed-editor-wrapped :( ls -lh /nix/store/52smrb1z8r4n71zx50xagkcdrhlga4y5-zed-editor-0.207.4/libexec/.zed-editor-wrapped -r-xr-xr-x. 2 root root 337M Jan 1 1970 /nix/store/52smrb1z8r4n71zx50xagkcdrhlga4y5-zed-editor-0.207.4/libexec/.zed-editor-wrapped Extra weight also comes from webrtc, which nixpkgs dynamically links. So yeah, it's quite a large binary indeed.
- vga42 1y ago[dead]
- deleted 1y ago[deleted]
- johnisgood 1y ago$ strip --strip-all ./target/release/zed $ du -h ./target/release/zed 261M ./target/release/zed $ strip --strip-all ./target/debug/zed $ du -h ./target/debug/zed 482M ./target/debug/zed Correct. It is still embarrassing, in my opinion. To make matters worse, it takes several minutes for Zed's window to appear on a cold start, whereas VSCode launches almost instantly. [1] I am trying to measure it as we speak but it is taking quite a long time.
- neobrain 1y ago> Not to mention it takes minutes for the window of Zed to open, whereas VSCode is almost instant. That one is interesting. It's much quicker for me, even cold starts are below 1s, and subsequent startups are basically instant.
- johnisgood 1y agoCold starts are minutes, subsequent startups are much faster than VSCode[1]. I wonder why though. [1] I have not measured subsequent launches of VSCode though, but Zed is relatively pretty quick after the initial launch.
- SSLy 1y agoMaybe some kind of "security" software interfering?
- deleted 1y ago[deleted]
- deleted 1y ago
- deleted 1y ago[deleted]
- johnisgood 1y agoI suppose it has to do with how every Rust crate (including dependencies) gets statically linked into the final binary, and this leads to extremely large intermediate artifacts, even when many crates share common dependencies. Or the fact that there is incremental compilation artifacts... And of course the amount of dependencies. A single project might depend on hundreds of crates (quite common), each compiled separately with its own build artifacts. sighs.
- andrewl-hn 1y agoCargo does the de-duplication, but only up to a point. If two packages request the same dependency with semver ranges that have a common overlap (say, `1.4` and `1.6`) then it will use a single package for both (say, `1.7.12`). But if they request semver-incompatible versions (`2.1` and `1.6`) then cargo will use both.
- panzi 1y agoI read the question differently as: Why doesn't cargo cache (compiled) crates in ~/.cargo?
- phplovesong 1y agoThis is pretty common for larger rust projects. Its basically the new javascript+npm mess, this time with a borrow checker.
- WD-42 1y agoAmazon q is 100mb and that’s a cli app. Rust programs be huge.
- torginus 1y agoWhat does a desktop text editor have to do with WebRTC?
- neobrain 1y agoJudging by this note in the docs: Collaboration features. https://zed.dev/docs/development/freebsd#webrtc-notice https://zed.dev/docs/development/freebsd#webrtc-notice
- torginus 1y agoIf they're going to implement every feature under the sun and include half of userspace to support it, they might as well build the whole thing on top of a browser.
- WesolyKubeczek 1y agovscode has entered the chat...