Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How is Rust compiled to machine code?

Tags:

rust

I've recently been looking at the Rust programming language. How does it work? Rust code seems to be compiled into ELF or PE (etc) binaries, but I've not been able to find any information on how that's done? Is it compiled to an intermediate format then compiled the rest of the way with gxx for example? Any help (or links) would be really appreciated.

like image 295
Dllewellyn Avatar asked Apr 13 '17 06:04

Dllewellyn


People also ask

How does Rust compilation work?

The Rust compiler uses a query system which is unlike most textbook compilers, which are organized as a series of passes over the code that execute sequentially.

Is Rust interpreted or compiled?

Rust is an ahead-of-time compiled language, meaning you can compile a program and give the executable to someone else, and they can run it even without having Rust installed.

Does Rust use C++ compiler?

C++ has multiple compilers: for example, Clang, GCC, MinGW, Cfront, Intel C++ Compiler, Tiny C Compiler, LLVM, and more. For now, Rust's only compiler is LLVM-based, but a change is right around the corner, some language features used in high-performance code are only available with C++.

What coding language is Rust coded in?

The programing language that was used to create Rust is C# since the game was created using the Unity game engine. The Unity game engine uses C++ for the runtime of the game then uses C# for most of the elements and scripting of the game.


1 Answers

The code-generation phase of the Rust compiler is mainly done by LLVM. LLVM is a set of tools for building a compiler, most notably used by the C[++] Compiler clang[++].

First, the Rust compiler (just like clang, for example) does all the Rust specific stuff like type and borrow checking; in the end, it generates LLVM-IR. IR stands for intermediate representation and it's... comparable to assembly, but a tiny bit more high level and most importantly: platform independent. Then the Rust compiler just calls ☏ LLVM and says:

Hey buddy, could you please take this IR and generate machine code for the current platform? That would be fantastic ◕ ◡ ◕

To which LLVM responds:

🌈 Sure, no problem, new friend. Here is your highly optimized machine code for [e.g.] x86_64! ♫♪♫

Afterwards they invite a few more friends to wrap it all up in a nice little [e.g.] ELF package and beautifully place it in the users file system. (and the user is like...)


Information like this can be found in the official FAQ which contains a lot of interesting information anyway. For more in-depth details on the Rust compiler, you can read the "Rustc Guide". For this question, the chapter "High Level Overview" is pretty interesting.

like image 90
Lukas Kalbertodt Avatar answered Sep 20 '22 22:09

Lukas Kalbertodt