"hello world" binary size increase in each release (original) (raw)

The binary size of "hello world" program increased in each release:
image
image

Detail table

Rust version debug debug - stripped release release - stripped
1.32.0 2382904 199096 2375720 199016
1.40.0 2595400 215464 2588264 215384
1.41.0 2637336 215464 2629832 215384
1.42.0 2659672 211368 2652488 211288
1.43.0 2729192 223584 2722128 223504
1.44.0 2584120 248160 2579144 248080
1.45.0 2847440 244064 2842464 243984
beta 2848152 244064 2843168 243984
nightly 3210208 293200 3203712 293112

main.rs

fn main() { println!("hello world"); }

Script to reproduce

rustup set profile minimal rustup toolchain install 1.{40..45}.0 beta nightly

RUST_DBG_FLAGS='-C debuginfo=1 -C panic=abort -C opt-level=0' RUST_REL_FLAGS='-C debuginfo=0 -C panic=abort -C opt-level=3'

mkdir -p build/debug mkdir -p build/release for ver in 1.{40..45}.0 beta nightly; do bin_dbg=build/debug/main-$ver bin_rel=build/release/main-$ver rustc +$ver RUSTDBGFLAGSmain.rs−oRUST_DBG_FLAGS main.rs -o RUSTDBGFLAGSmain.rsobin_dbg echo "-- $ver" before=$(stat --printf="%s" $bin_dbg) strip $bin_dbg after=$(stat --printf="%s" $bin_dbg) printf " dbg: %d, stripped: %d\n" beforebefore beforeafter

rustc +$ver <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi><mi>U</mi><mi>S</mi><msub><mi>T</mi><mi>R</mi></msub><mi>E</mi><msub><mi>L</mi><mi>F</mi></msub><mi>L</mi><mi>A</mi><mi>G</mi><mi>S</mi><mi>m</mi><mi>a</mi><mi>i</mi><mi>n</mi><mi mathvariant="normal">.</mi><mi>r</mi><mi>s</mi><mo>−</mo><mi>o</mi></mrow><annotation encoding="application/x-tex">RUST_REL_FLAGS main.rs -o </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em;"></span><span class="mord mathnormal" style="margin-right:0.00773em;">R</span><span class="mord mathnormal" style="margin-right:0.10903em;">U</span><span class="mord mathnormal" style="margin-right:0.05764em;">S</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em;">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.00773em;">R</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.05764em;">E</span><span class="mord"><span class="mord mathnormal">L</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em;">F</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal">L</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.05764em;">GS</span><span class="mord mathnormal">main</span><span class="mord">.</span><span class="mord mathnormal">rs</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">o</span></span></span></span>bin_rel
before=$(stat --printf="%s" $bin_rel)
strip $bin_rel
after=$(stat --printf="%s" $bin_rel)
printf "    release: %d, stripped: %d\n" <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mi>e</mi><mi>f</mi><mi>o</mi><mi>r</mi><mi>e</mi></mrow><annotation encoding="application/x-tex">before </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">b</span><span class="mord mathnormal">e</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">ore</span></span></span></span>after

done

rustup toolchain uninstall 1.{40..45}.0 beta nightly

Meta

beta:

rustc 1.46.0-beta.5 (cfbc6d4cf 2020-08-21)
binary: rustc
commit-hash: cfbc6d4cf1acbac5c025acf8ed68929caa551df3
commit-date: 2020-08-21
host: x86_64-unknown-linux-gnu
release: 1.46.0-beta.5
LLVM version: 10.0

nightly:

rustc 1.47.0-nightly (de521cbb3 2020-08-21)
binary: rustc
commit-hash: de521cbb303c08febd9fa3755caccd4f3e491ea3
commit-date: 2020-08-21
host: x86_64-unknown-linux-gnu
release: 1.47.0-nightly
LLVM version: 10.0