ブートストラップ言語のコンパイラがうまく動作し、メンテナンス可能な場合、なぜそれを変更しますか?たとえば、コンパイラをバージョン1.5でセルフホスティングするように書き直したところ、compile times to become much slowerが発生しました.Goの目標が高速コンパイルの場合は明らかです。コンパイラが自己ホストする実用的な理由はありますか?
答えて
実用的な理由の1つは、コミュニティです。あなたの言語でプログラムする人は、同じ言語で書かれていれば、コンパイラでプログラミングする方が好きかもしれません。私のコンパイラがFortran/COBOLにあり、Go
を生成する場合、私はGoの開発者をコンパイラに引き付けることはまずありません。
もう1つは、ビルドチェーンです。つまり、依存関係です。ある言語で書かれたコンパイラを別の言語で生成したコンパイラを使用している場合は、2つのテストセットがあります。これは、また、開発者が複数のツールチェーンなどを知っている必要もない、すなわち、開発者が複数のツールチェーンなどを知っている必要はありません。両方で有能なコンパイラライターになるには十分に2つの言語が分かっていれば、 ほとんどのオープンソースプロジェクトでは、ヘルプの入手は非常に重要です。潜在的な開発者ベースを増やすものは、実用上のメリットです。
また、テストを追加のメリットとしてリストすることもできます。あなたが自己ホスティングコンパイラを書いているなら、言語が比較的簡単に(歯を引っ張るのではなく)自己ホスト、すなわちファイルIO、文字列操作、シンボルテーブル、ツリー、リストなどに多くのことが必要です。これらのすべてがなくても生き残ることができますが、コンパイラの作成をもっと難しくし始めます。あなたの犬の食べ物キャンプを食べるこの種の座っている。
それはRite of Passage
と考えられますが、開発者や他の理由があることを証明できない限り、実用的な理由ではないと考えています。それを放棄する可能性は低い。いくつかの具体的な理由から
その上で興味深いトピックがここにあります...
彼らはGo instead of Cに行くコンパイラを移動する理由についてロブ・パイクスライドの読み取りを持っています。スライドの結論は次のとおりです。
- Cを取り除くことは、プロジェクトの大きな前進でした。
- コードはよりクリーンで、テスト可能で、プロファイリング可能で、簡単に作業できます。
- 新しい統合ツールチェーンにより、コードサイズが縮小され、保守性が向上します。 柔軟なツールチェーン、移植性は依然として重要です。
言語によっては、メリットとの移行が異なる場合があります。
外部ツールにも独自のバージョン管理に関する問題があり、コミュニティの影響は開発者だけでなく、直接外部のサークルでも非常に顕著です開発者。バグを分離して徹底したレポートを作成するために、突然二重(または三重)言語スキルが必要な知識のあるユーザー。 (ランタイムライブラリがさらに別の言語で書かれている場合は3倍) –
- 1. DUBレジストリを自己ホストする方法はありますか?
- 2. [自己保持]が有効な場合はありますか?
- 3. COM +アプリケーションでCOMサーバーをホストしない理由はありますか?
- 4. 「自己」はなぜ機能パラメータである必要がありますか?
- 5. LINQのLongCount拡張メソッドが追加された実用的な理由はありますか?
- 6. 自己ホストされた動画をモバイルで実行できない理由を教えてください
- 7. 新しい自己または新しい静的を使用する必要がありますか?
- 8. 自己ホスト型マルチアカウントWebメールクライアントですか?
- 9. まだCVSを使用する理由はありますか?
- 10. JSONPを使用しない理由はありますか?
- 11. OrientDBを使用しない理由はありますか?
- 12. ワイルドカードを使用しない理由はありますか?
- 13. Boost :: shared_ptrsを使用しない理由はありますか?
- 14. IE6/7バグ:論理的な理由のない空白があります
- 15. ここに真実を返す理由はありますか?
- 16. 自己ホストCIとバージョン管理システムを運用するための管理作業は何ですか?
- 17. 異なるコンパイラのascii値に違いがある理由
- 18. where節に1 = 1を使用する論理的な理由はありますか?
- 19. ロックファイルをflockで使用する理由はありますか?
- 20. selfキーワードを使用する理由はありますか?
- 21. varをもう使用する理由はありますか?
- 22. [:over @ :?を使用する理由はありますか?
- 23. スウィフトでセレクタを使用する理由はありますか?
- 24. VBAでENUMを使用する理由はありますか?
- 25. インターポーザークラスがコンパイルされない理由はありますか?
- 26. スレッドクラスを使用して自己をキャプチャする必要がありますか?
- 27. 自己ホストと起動用MongoDBデータベースサービス
- 28. AMPプロジェクトのJavascriptを自己ホストしても問題ありませんか?
- 29. ラズベリーパイの自己ホストSignalRは機能しますか?
- 30. 静的メソッドを隠す正当な理由はありますか?
https://en.wikipedia.org/wiki/Eating_your_own_dog_food –