自分自身の次のバージョンを構築するためにどのようなツールが使用されているのか興味があります。
たとえば、Delphi は「Delphi は Delphi で書かれている」と長い間主張してきました。
Visual Studio は Visual Studio を使用して記述されていると想定しています。
それ自体で作成されたツールの他の例は何ですか?
自分自身の次のバージョンを構築するためにどのようなツールが使用されているのか興味があります。
たとえば、Delphi は「Delphi は Delphi で書かれている」と長い間主張してきました。
Visual Studio は Visual Studio を使用して記述されていると想定しています。
それ自体で作成されたツールの他の例は何ですか?
興味深いことに、VB.NET および C# コンパイラ自体はアンマネージ C++ で記述されています (C++ チームの T シャツ: 「私のコンパイラがあなたのものをコンパイルしました」)。C# チームは、VS2010 用の完全に管理された C# でホストされる C# コンパイラを用意したいと考えています。
Bjarne Stroustrup はThe Design and Evolution of C++で、最初の C++ コンパイラは C++ で書かれたと述べました。
私はちょうどこれが彼のFAQの質問でもあることに気付きました:
最初の C++ コンパイラ (Cfront) は C++ で書かれました。それを構築するために、まず C を使用して「C with Classes」から C へのプリプロセッサを作成しました。「C with Classes」は、C++ の直接の祖先となった C の方言です。そのプリプロセッサは、「C with Classes」構成要素 (クラスやコンストラクタなど) を C に変換しました。これは従来のプリプロセッサであり、すべての言語を理解するわけではなく、ほとんどの型チェックを C コンパイラに任せ、個別に変換しました。完全な知識なしで構築します。その後、「C with Classes」で Cfront の最初のバージョンを書きました。
これはトピックから外れていますが、厳密に言えば、それ自体を構築するツールの例です。
reprap-オープンソースの3Dプロトタイピングマシン。最近、「最初の完全に機能する複製コピー」が誕生しました。
私はこの種のものが大好きです。
一般的に言えば、C コンパイラは通常 C で書かれています... *nix カーネルは *nix などでコンパイルされます。
また、Python で書かれた Python インタープリターを提供するpypyプロジェクトもあります。
別の例を次に示します。MonoのC#コンパイラはセルフホスティングです。つまり、C#で記述され、それ自体をコンパイルするために使用されます。
ドッグフーディングとは、特に開発中に自社製品を社内で使用する企業のより一般的な慣行を指します。
gcc (Gnu C コンパイラhttp://gcc.gnu.org/ ) が広く利用できなかったときは、ソースからコンパイルし、ステージ 1 コンパイラをコンパイルしてから、ステージ 2 をステージ 1 でコンパイルし、最終的なコンパイラを入手する必要がありました。きっと今日も同じだと思います。
Squeakは、それ自体で記述された Smalltalk-80 の実装です。
その仮想マシンでさえ完全に Smalltalk で書かれているため、デバッグ、分析、および変更が容易です。
Sun の Java コンパイラは、長い間 Java で記述されてきました。ただし、最近の作業では、Java でも JIT コンパイラを作成しています。これは、Java バイト コードをネイティブ プロセッサ命令に変換する JVM コンポーネントです。
Lisp で Lisp を実装する方法を調べるのが好きな人はたくさんいます。
典型的な開発プロセスの一部であるほとんどすべてのツールは、可能な限り独自の開発に関与すると思います。これも:
これらのツールの 1 つを構築しているチームに所属していて、自分のチームに当てはまらない特定のニッチ向けにそれを開発しているわけではない場合、それを自分自身を構築するために使用しない理由がわかりません。開発者に製品のユーザーになってもらうことは、改善の可能性を見つける最良の方法の 1 つです。
Haskell コンパイラである ghc は、ほとんどが Haskell で記述されています。
tccは、x86 および ARM 用のもう 1 つのセルフホスティング C コンパイラです。その名声への主張は、まあ、小さいことです(プリプロセッサ、コンパイラ、アセンブラ、およびリンカで100k程度)。
AmigaOS には、後でコンパイラを購入できるサードパーティの Basic インタープリタ (名前は忘れてください) がありました。コンパイラはソースとして提供されたので、インタプリタを使用してコンパイラを実行し、それ自体をコンパイルする必要がありました...
ケント・ベックを引用するには:
...自分で脳手術をするのと少し似ているかもしれません。
RealBasic を使用して開発を行っています。IDE はそれ自体で書かれているので、私はそう信じるようになりました。
Eclipse IDEは、通常、Eclipse IDE を使用して構築および開発されます。
Oracle Application Expressは、それ自体に組み込まれている Web アプリケーション開発ツールです。
Visual Studio と Team Foundation Server は、それ自体をビルドします。これはドッグフーディングと呼ばれ、Microsoft に由来しない場合でも、確かに好まれる用語です。
要するに、javascriptを使用したJavascript「コンパイラ」として説明されています。
当然のことながら、Jetbrains チームは独自の IDE IntelliJ IDEAを使用してこの IDE を開発しています。
これはほとんどの IDE ベンダーに当てはまると思います。
私の知る限り、EMACS をソースからビルドする場合、ELISP コードはすべてブートストラップされます。私はそれが非常に注目に値することを発見しました。
あなたが求めているものとはまったく異なりますが、Revolution http://www.runrev.comの開発環境全体は Revolution 自体を使用して構築されており、ソース (ライセンスを強制する小さな部分を除く) はソース形式で完全に公開されています。 . したがって、開発環境の実装方法が気に入らない場合は、変更できます。バグを見つけて修正します。また、追加の開発ツールを簡単に構築して統合することもできます。
私は IDE ベースのコード ジェネレーターを構築しており、それを使用してそれ自体を構築しています。実際、Stroustrup が行ったように、私は最初に有効なジェネレーター モデルを構築し、プリプロセッサを使用してコンパイルする最終的な C++ コードを構築しています。IDE の正常に機能するバージョンができたら、それを使用してそれ自体のさらなるバージョンを構築します。
「再帰的プログラミング」の意味に新しい次元を与えるようなものです!
古い Watcom C/C++ コンパイラは、それ自体を使用して構築されました。
コード探索を支援および加速するnWireという Eclipse プラグインを開発しています。十分に安定した瞬間から開発の一部として使用しており、今ではそれなしでは生きられません (まあ、すぐに習慣になる傾向があります :-)。
私にとっては「自分のドッグフードを食べる」ことですが、本当に役に立ちます。これも商品への自信につながります。
これは、ほとんどのコンパイラが機能する方法です。はい、例外がありますが、実際にはそれらの例外をリストする方が短い場合があります。
それまでの間、 gnat をソースからコンパイルするには Ada コンパイラが必要であることを知っています ( gnatはそうします)。GCC にはある種の C コンパイラが必要で、それ自体を使用してビルドするためのブートストラップ フェーズがあります (または、少なくとも 15 年前に私が最後にその苦痛を経験したときはそうでした)。Draco I belive の作成者は、Draco で書かれたと私に言いました。
Kragen Sitaker のUr-Schemeは、それ自体で書かれた小規模で重要なコンパイラの良い例です。そのページは、その流れでさらにいくつかの優れた情報源にリンクしています。
Maven2は Maven2 を使用してビルドされます。わかりました、プロジェクトをビルド (つまりコンパイル) するためのツールであるため、それ自体を使用してビルド (つまり、記述) されていませんが、独自のコードを使用してコンパイルしています...
AFAIK は、最初にインストールされた Java を使用してOpenJDKをビルドし、その後それ自体を使用してビルドします。
私は Smalltalk-80 の回答を増やしました。私が考えることができる最高の、最もエレガントな例です。また、この質問は、以前は一般的だった少し関連する問題を思い出させます。それは、自分自身を出力するプログラムを書くというものです。同じレベルのブートストラップではありませんが、娯楽のための楽しい小さなプログラミング パズルです。すべての言語で可能ではないでしょうか?
エイダとフォース