2016-04-07 14 views
2

ブートストラップ言語のコンパイラがうまく動作し、メンテナンス可能な場合、なぜそれを変更しますか?たとえば、コンパイラをバージョン1.5でセルフホスティングするように書き直したところ、compile times to become much slowerが発生しました.Goの目標が高速コンパイルの場合は明らかです。コンパイラが自己ホストする実用的な理由はありますか?

+0

https://en.wikipedia.org/wiki/Eating_your_own_dog_food –

答えて

5

実用的な理由の1つは、コミュニティです。あなたの言語でプログラムする人は、同じ言語で書かれていれば、コンパイラでプログラミングする方が好きかもしれません。私のコンパイラがFortran/COBOLにあり、Goを生成する場合、私はGoの開発者をコンパイラに引き付けることはまずありません。

もう1つは、ビルドチェーンです。つまり、依存関係です。ある言語で書かれたコンパイラを別の言語で生成したコンパイラを使用している場合は、2つのテストセットがあります。これは、また、開発者が複数のツールチェーンなどを知っている必要もない、すなわち、開発者が複数のツールチェーンなどを知っている必要はありません。両方で有能なコンパイラライターになるには十分に2つの言語が分かっていれば、 ほとんどのオープンソースプロジェクトでは、ヘルプの入手は非常に重要です。潜在的な開発者ベースを増やすものは、実用上のメリットです。

また、テストを追加のメリットとしてリストすることもできます。あなたが自己ホスティングコンパイラを書いているなら、言語が比較的簡単に(歯を引っ張るのではなく)自己ホスト、すなわちファイルIO、文字列操作、シンボルテーブル、ツリー、リストなどに多くのことが必要です。これらのすべてがなくても生き残ることができますが、コンパイラの作成をもっと難しくし始めます。あなたの犬の食べ物キャンプを食べるこの種の座っている。

それはRite of Passageと考えられますが、開発者や他の理由があることを証明できない限り、実用的な理由ではないと考えています。それを放棄する可能性は低い。いくつかの具体的な理由から

その上で興味深いトピックがここにあります...

https://softwareengineering.stackexchange.com/questions/263651/why-are-self-hosting-compilers-considered-a-rite-of-passage-for-new-languages

彼らはGo instead of Cに行くコンパイラを移動する理由についてロブ・パイクスライドの読み取りを持っています。スライドの結論は次のとおりです。

  1. Cを取り除くことは、プロジェクトの大きな前進でした。
  2. コードはよりクリーンで、テスト可能で、プロファイリング可能で、簡単に作業できます。
  3. 新しい統合ツールチェーンにより、コードサイズが縮小され、保守性が向上します。 柔軟なツールチェーン、移植性は依然として重要です。

言語によっては、メリットとの移行が異なる場合があります。

+0

外部ツールにも独自のバージョン管理に関する問題があり、コミュニティの影響は開発者だけでなく、直接外部のサークルでも非常に顕著です開発者。バグを分離して徹底したレポートを作成するために、突然二重(または三重)言語スキルが必要な知識のあるユーザー。 (ランタイムライブラリがさらに別の言語で書かれている場合は3倍) –

関連する問題