Comment by cong-or

Comment by cong-or 4 days ago

6 replies

The 160k → 90k LOC reduction is nice, but the parallel rollout is the more interesting part. Running Rust alongside the C++ version and using differential fuzzing to check equivalence is a lot more realistic than “rewrite and pray.” You get incremental validation with the old system as a fallback. Curious how long they ran both before cutting over.

Binary size is a real concern on the client side. On servers the Rust stdlib overhead usually doesn’t matter, but when you’re shipping to billions of mobile devices, every KB counts. Good to see they invested in build tooling instead of just accepting the bloat.

galangalalgol 4 days ago

Did they say anywhere what they did? Rebuilding the stdlib as part of your build can shrink it a lot depending on how much of it you use, but that is still nightly only. Maybe they went no_std or created their own?

  • surajrmal 4 days ago

    They didn't but keep in mind that the app is currently 170MiB. The standard library shouldn't have added more than a few hundred kilobytes. They already likely pay similar costs for c++, but it's more worthwhile as they have a lot more c++ code total.

    Also note that if you statically link to the rust std library, lto will excise the majority of it anyways, no need to rebuild it.

    • galangalalgol 4 days ago

      The default hello world stripped with one codegen unit and panic=abort was 342kB both nightly and stable. Adding lto dropped it 42kB in stable and 40kB in nightly. Adding build-std and only building core did not reduce it any further in size.

      • metaltyphoon 4 days ago

        I assume OP is taking about using -Zbuild-std on nightly. This will drop it much more.

        • galangalalgol 4 days ago

          That is what I was talking about. It didn't reduce it at all over just lto. If I'd set optimization to z it probably would have gotten some back, but that starts impacting performance

  • jsgf 3 days ago

    This is built with buck, and core/std are built as a source dependency.