go言語のセルフホスト

go

セルフホストってどういう意味かご存知でしょうか?

簡単に言うと、ある言語で書かれたコードをコンパイルすることで、その言語のコンパイラを生成することです。

ちょっと何言ってるかわかりませんね。

わかりやすい例を示しましょう。

ここに、go言語のコンパイラのバイナリ(実行ファイル)があるとします。

このコンパイラで、go言語で書かれたソースコードをコンパイルすることによりバイナリを生成することができます。

ここで、ある go言語で書かれたソースコードをコンパイルして生成されたバイナリが、go言語のコンパイラだったとします。

これがセルフホストです。

つまり、go 1.16のコンパイラで、go言語で書かれたgo 1.17のソースコードをコンパイルしたら、go 1.17 のコンパイラが生成されたのです。

つまり、この世界は完全に go言語で閉じているわけですね。

全てが go言語だけで完結しています。

冷静に考えたらすごいことだと思いませんか?

正直最初にセルフホストの話を聞いた時、わけがわかりませんでした。

もっと身近な例を言うと、ruby のコンパイラを c言語で書いていたとします。

そしたら、いつのまにか ruby のコンパイラ自身も ruby で書かれていた。みたいな。

そんな感じで go言語のセルフホストの記事です。

goのgcコンパイラーがC実装を除去 – 2015-02-24
https://cpplover.blogspot.com/2015/02/gogcc.html

Goコンパイラをゼロから作って147日でセルフホストを達成した – 2020年09月18日
https://qiita.com/DQNEO/items/2efaec18772a1ae3c198

コメント

タイトルとURLをコピーしました