どのツールが自分自身を使用して構築されていますか? [閉まっている]
-
06-07-2019 - |
質問
自分自身の次のバージョンを構築するためにどのツールが使用されているのか興味があります。
たとえば、Delphiは長い間、" DelphiはDelphiで記述されていると主張してきました "。
Visual StudioはVisual Studioを使用して記述されていると想定しています。
それ自体で記述されたツールの他の例は何ですか?
解決
C ++の設計と進化で言及されているBjarne Stroustrup最初のC ++コンパイラはC ++で記述されました。
これは彼の FAQ :
最初のC ++コンパイラ(Cfront)は C ++で書かれています。それを構築するには、まず Cを使用して" Cを記述する Classes" -to-Cプリプロセッサ。 " C クラス"となったC方言でした C ++の直接の祖先。それ プリプロセッサを" Cに変換 クラス"コンストラクト(クラスなど およびコンストラクター)からCへ。 しなかった従来のプリプロセッサ 残されたすべての言語を理解する Cのほとんどの型チェック 行うコンパイラ、および翻訳された 完全ではない個々の構成体 知識。それから私は最初に書いた " C with Classes"のCfrontのバージョン。
他のヒント
興味深いことに、VB.NET& C#コンパイラ自体は、アンマネージC ++で記述されています(C ++チームのTシャツ:" My compiler compile yours")。 C#チームは、VS2010用の完全に管理されたC#でホストされたC#コンパイラを用意したいと考えています。
これはトピックから外れていますが、厳密に言うと、自分自身を構築するツールの例です。
reprap -オープンソースの3Dプロトタイピングマシン。最近では「その最初の完全な作業複製コピー」に「誕生」を与えました。
この種のものが大好きです。
一般的に言って、Cコンパイラは通常Cで書かれています... * nixカーネルは* nixなどでコンパイルされます。
また、Pythonインタープリターを提供する pypy プロジェクトもあります。 Pythonで記述されています。
gcc(Gnu Cコンパイラー http://gcc.gnu.org/ )がなかった場合広く利用できるため、ソースからコンパイルし、stage1コンパイラーをコンパイルしてから、stage1でstage2をコンパイルし、最終的なコンパイラーを作成する必要がありました。今日は同じに違いないと思います。
別の例を次に示します。MonoのC#コンパイラはセルフホスティング-つまり、書かれていますC#で、それ自体をコンパイルするために使用されます。
ドッグフードは、特に開発中に自社製品を社内で使用する企業のより一般的な慣行を指します。
多くの人が LispはLispで実装できます。
Squeak は、それ自体で記述されたSmalltalk-80の実装です。
その仮想マシンも完全にSmalltalkで記述されているため、デバッグ、分析、変更が簡単です。
SunのJavaコンパイラは長い間Javaで書かれています。ただし、最近の作業も、JavaでJITコンパイラを作成しています。これは、Javaバイトコードをネイティブプロセッサ命令に変換するJVMコンポーネントです。
RealBasicを使用した開発に使用しています。 IDEはそれ自体で記述されているため、私は信じるようになりました。
ghcは、ほとんどがHaskellで書かれた です。
tcc は、x86およびARM用の別のセルフホスティングCコンパイラです。その名声の主張は、非常に小さい(プリプロセッサ、コンパイラ、アセンブラ、およびリンカで100k程度)。
可能な限り、一般的な開発プロセスの一部であるほとんどすべてのツールが、独自の開発に関与すると想定します。これには以下が含まれます:
- 特定のプログラミング言語、特にコンパイルされた言語
- IDE
- テキストエディター
- バージョン管理システム
- バグトラッカー
- システムの構築
これらのツールのいずれかを構築するチームに所属していて、チームに当てはまらない特定のニッチ向けに開発していない場合、構築に使用しない理由はわかりません自体。開発者を製品のユーザーにすることは、可能な改善を見つけるための最良の方法の1つです。
AmigaOSには、サードパーティのBasicインタープリター(名前を覚えていない)があり、後でコンパイラーを購入できます。コンパイラーはソースとして提供されたため、コンパイラーを実行してそれ自体をコンパイルするにはインタープリターを使用する必要がありました...
Kent Beckを引用するには:
...自分で脳手術を行うのに少し似ているように見えるかもしれません。
Visual StudioとTeam Foundation Serverは自分でビルドします。これは、 dogfooding と呼ばれます。Microsoftに由来しない場合は、確実にいいね
Oracle Application Express は、Webアプリケーション開発ツールです。それ自体が組み込まれています。
Eclipse IDE は通常、Eclipse IDEを使用して構築および開発されます。
Maven2 はMaven2を使用して構築されます。 それは、プロジェクトをビルド(つまり、コンパイル)するためのツールであるため、それ自体を使用してビルド(つまり、書かれた)されていませんが、独自のコードを使用してコンパイルしています。 。
要するに、Javascript" compiler"と記述されています。 javascriptを使用します。
IDEベースのコードジェネレーターを構築していますが、それを使用して自分自身を構築しています。実際、Stroustrupが行ったように、私は最初に有効なジェネレーターモデルを構築し、プリプロセッサを使用してコンパイルする最終的なC ++コードを構築しています。 IDEの正常に機能するバージョンを取得したら、それを使用して、それ自体のバージョンをさらにビルドします。
「再帰プログラミング」の意味に新しい次元を与えるようなものです!
AFAIKは OpenJDK をインストールされたJavaで最初にビルドし、その後、それ自体でビルドします。
Jetbrainsチームは、独自のIDE IntelliJ IDEA を使用してこのIDEを開発しています。
>これはほとんどのIDEベンダーに当てはまると思います。
私が知る限り、ソースからEMACSを構築する場合、ELISPコードはすべてブートストラップされます。注目に値します。
求めているものではなく、Revolutionの開発環境全体 http://www.runrev.com はRevolution自体を使用して構築されており、ソース(ライセンスを強制する小さな部分を除く)はソース形式で完全に公開されています。したがって、開発環境の実装方法が気に入らない場合は、変更できます。バグを見つけて修正してください。追加の開発ツールを簡単に構築して統合することもできます。
エイダとフォース
Smalltalk-80の回答に上昇を与えました。私が考えることができる最高の、最もエレガントな例。また、この質問は、よく使用されていた少し関連する問題を思い出させます。それは、それ自体を出力するプログラムを書くことです。同じレベルのブートストラップではなく、娯楽のための楽しい小さなプログラミングパズルです。おそらくすべての言語で可能というわけではありませんか?
古いWatcom C / C ++コンパイラは、それ自体を使用して構築されました。
Kragen Sitakerの Ur-Scheme は小さな自明のコンパイラ。そのページは、その静脈内のいくつかのより良いソースにリンクしています。