Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does Rust require a C++ toolchain to produce a Rust binary, while languages like Go do not have this requirement?

Compiling a Rust file with rustc foo.rs fails if I don't have a C++ toolchain installed. But when compiling a Go program, such a toolchain is not required. Why is that?

like image 513
JackSparrow123 Avatar asked Dec 06 '22 09:12

JackSparrow123


1 Answers

TL;DR: Because everyone has a C toolchain.

Slight correction: rustc does not require a C++ toolchain, it only requires a C toolchain. Notably, rustc created binaries only depend on libc (or equivalent), not on libstdc++ (or equivalent).


As Go demonstrated, it is possible to not require a C toolchain. You only need to re-implement its functionality:

  • You need to implement your own linker, respecting the target platform format.
  • You need to implement your own libc (aka OS layer).

There are advantages to doing so, such as possibly faster compilation or easier cross-compiling, however there is a cost in doing the implementation, and it's easy to get things wrong.


The Rust community preferred to put more effort into the language than in the toolchain, and therefore reusing the stock toolchain was easier. Specifically, rustc will require a platform linker (ld on Unix) and platform equivalent to libc.

This is not a core design principle, it's just a pragmatic approach, and there are projects to cut down on these dependencies:

  • Using lld rather than ld would allow shipping a single linker with rustc which can target all platforms.
  • Using cranelift as an alternative backend could also remove the dependency on ld.
  • The Redox project is working on relibc, a portable Rust implementation of the libc API.

Those are all work in progress, and in the meantime rustc will require a C toolchain. Furthermore, even in the foreseeable future, I would expect rustc to require a C toolchain for targets not yet covered by any Rust toolchain, just so you can use the target without waiting for some hypothetical development.

like image 129
Matthieu M. Avatar answered Dec 07 '22 23:12

Matthieu M.