#286·serde

Migration to serde from rustc-serialize causes binary to grow significantly

Author: alexboolCreated Apr 14, 2016Updated Jun 16, 2026
Labelsbinary size

Some time ago I migrated my crate to serde from rustc-serialize and I was somewhat dissapointed that my binary size increased approximately 2x (and so did compilation times).

If I run nm --size-sort -S, I get a lot of symbols like this:

0000000100120c40 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h0683deb22b9931ffE
0000000100123bb0 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h2fd21583584d6bf1E
00000001001471c0 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h539ca1b6dbf1cb43E
000000010014e650 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h5806957261f0bc9bE
0000000100096cd0 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hb74320b766f864cbE
00000001001a59e0 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hcbf6c07be4ec0d3bE
0000000100109790 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hcc2221ebbabcbce1E
000000010015c1e0 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hcccb666beff69b03E
0000000100191100 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hd99ca0f77ada84c1E
00000001001117e0 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hec08322395fba03eE
000000010010c440 0000000000000370 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hf3862946ff0b8b3cE
...
00000001000b5140 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h21580c3267c18d93E
0000000100138910 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h5c55d12e7448b4a3E
0000000100193c30 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h5d14cb7b1aee2532E
00000001000ab9f0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h5df1c90391bf8f60E
000000010014b7e0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h6b721180eb040b2dE
00000001000d6210 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h85b05d12103203d6E
00000001000b00f0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17h9385aa3d135608f9E
0000000100106900 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hb58e2b12ab99f16dE
00000001000f46a0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hb9a69783daa5ea47E
00000001000bf7c0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hbca6642924436262E
0000000100144350 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17he7129a26a2066f08E
00000001001355e0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hf7e87397027fcc4aE
00000001000ffbb0 0000000000000380 t __ZN41_$LT$rmp_serde..Deserializer$LT$R$GT$$GT$8read_str17hf8b195b1ed175901E

With rustc-serialize, seems like there is no such symbol mutiplication.

OS X rustc 1.9.0-nightly (a43eb4e77 2016-04-12), serde 0.7.0 (I also tried on Windows and results are the same)