たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

RUST/LLVM/WASM入門

WebAssemblyがずっと気になる、しかしC言語は書きたくない。お?それ以外の方法があるって…?で調べた記事。

概要

高速かつ安全な低級言語Rustは中間表現LLVM IRにコンパイルされる。
LLVM IRはWebAssembly (WASM) へ変換でき (つなわちWASM backendをもち)、Rust2LLVM2WASMが実現できる。

Rustのコンパイル

Rust言語自体は各自ググってくれ。
Rustのコンパイルは次の過程を経る。

Rust -> HIR -> MIR -> LLVM IR
High-level overview of the compiler source - Guide to Rustc Development

All of the previous chapters deal with rustc's frontend.

rustc uses LLVM for code generation. ref

rustc's backend is LLVM

Code Generation - Guide to Rustc Development

The end result of all this is (at long last) something executable (e.g. an ELF object or wasm).

LLVM

frontend - 共通IR optimization - Backend 型のコンパイラsuite
共通IRはLLVM IRという。

www.aosabook.org

LLVM Projectというコンパイラ・ツールチェーン

  • LLVM Core: middle optimizer + backend
  • Clang: C/C++/Obj-Cのfrontend & 関連ツール?

...ほかにもいくつものsub projectがある

eternal projectが山のようにLLVM frontendとしてコンパイラを用意している。しゅごい
上記の通り、RustもLLVMコンパイラに組み込んでいる言語