Goに書き換えられたGoコンパイラ

これらの言葉で、Goマスターブランチへの新たなコミットでコメントが始まります。

この変更により、GoコンパイラおよびアセンブラのC実装がmasterブランチから削除されます。
(「これらの変更により、GoコンパイラおよびアセンブラのC実装がメインブランチから削除されます」)



これらの言葉は、コンパイラをCからGoに書き直したGoチームのほぼ1年の作業です。 これは90%の自動プロセスでした。 これで、Go自体がコンパイルされます。



なぜ必要だったのか、もう少し詳細を説明します。





画像: Twitter Russ Cox



すべての言語コミュニティで何らかの形で発生し、ほとんど誰も成功しない純粋な学問的関心(「言語はそれ自体をコンパイルできるか」)に加えて、Goコンパイラの書き換えの問題は、別のプログラム。 確かに、Cは言うまでもありませんが、Cの開発速度と生産性はGoよりもはるかに低く、一部の場所では実際のショーストッパーであることは明らかです。 著者自身が書いているように、「Goでのプログラミングは楽しい。 Cでのプログラミングはそうではありません。」



Goの作成者がコンパイラ/ランタイムに実装したかった変更は、多くの場合、実装の実際的な複雑さにかかっていました。 たとえば、ガベージコレクターを高速化し、そのインジケーターをハードリアルタイムの世界で受け入れられるものに近づけるために、真のコンカレントガベージコレクターを実装することを長い間計画していました(ストップワールドを作成しない)が、Cで実装することはできませんでした。 Goでは、実装がはるかに簡単になります。



チームに生じた主な質問-実際、この大規模な動きをどのように実行するのか? Cで80,000行以上のコードを書き直したり、何かを失ったり失ったりすることはほとんど不可能です。 言語の文法の類似性を考慮して、CからGoへの自動コンバーターを作成して使用することが決定されました。 1つの大きな修正。



タスクは実際に設定されました-コンバーターはGoコードベースで動作する必要があり、すべての場合にユニバーサルコンバーターをスイングしませんでした。 コードの99%は自動的に変換され、残りの困難な瞬間はすでに手作業で完了できます。



これは、過去のGopherConのこのトピックに関する興味深いビデオです。 実装の詳細を気にする人を見る:







スライドはこちら: talks.golang.org/2014/c2go.slide



新しいコンパイラを最適化するための多くの作業がまだあります-すべて同じように、人々の主な興奮は「Goコンパイラが著しく遅くなった場合」でしたが、Go 1.5はすでにCコードの1行がなく、すべてのツールが開発者に自由に表示されますコードの最適化とプロファイリングでGoプログラマーに馴染みのあるもの-レースディテクター、あらゆる種類のプロファイラー、静的コード分析ツールなど。



Go 1.5のリリースは2015年8月に公式に予定されています。



Go!の歴史上、チーム全体とこの重要なイベントに関与したすべての人々を安全に祝福できます。



UPD。 コメントは、コンパイラを書き換えることは珍しいことではないことを正しく指摘しており、これを行うことに成功した人はほとんどいないと言っています。



All Articles