- フロントエンドとバックエンド
- macOS/Windows版
- クロスコンパイラ
- LLVM/Clang
- Binutils (as, ldなど)
- gettext
- 持論:コンパイラはフリーでなければならない
- Make
- Autoconfで移植性を高める
- Automakeで楽にMakefileを作る
フロントエンドとバックエンド
GCCは、「フロントエンド - 最適化部(中間コード) - バックエンド」という設計をしている。
こうすることによって、フロントエンドとバックエンドの部分を開発するだけで、さまざまなプログラミング言語とさまざまなCPUプロセッサ向けの機械語に対応できる。
フロントエンドを作るだけで新しいプログラミング言語(自作のプログラミング言語の場合も含む)にも対応でき、バックエンドを作るだけで新しいCPUプロセッサに対応できる。
macOS/Windows版
GCCはmacOSでも動かすことができ、Xcodeを導入すると自動的にgccがインストールされる。
また、Windows版としてMinGWがあり、Visual Studioの代替C/C++コンパイラとして利用できる。
LLVM/Clang
LLVM/Clangは新しいC/C++など向けのコンパイラ。gccを置きかえるのではないかと期待されている。Linuxでも使えるし、Macや*BSDなどでも最近使われるようになってきている。
Binutils (as, ldなど)
さまざまなオブジェクトフォーマットを含むオブジェクトファイルを扱うためのプログラミングツール。
gettext
GNUで翻訳のために使われているライブラリ。
持論:コンパイラはフリーでなければならない
僕の持論として、「コンパイラだけはフリーでなければならない」というのがあります。
それは、「プログラミングは、万人に手段が平等に与えられるものでなければ、万人がコンピュータを使ってプログラミングすることができない」からです。
Windowsのフリーソフトには、Visual C++で作られたソフトウェアが多いですが、この場合、ソースコードをコンパイルしたり、自分で作ったり開発に参加するためには、Visual C++を買わなければなりません。
たとえ、ソフト自体がフリーであっても、それを作るための手段はフリーではないのです。
GNUというプロジェクトが、コンパイラなどの開発ツールから始まり、GNU OSが実用化される以前から、「フリーなコンパイラ」として有名だったのは、その理由があると思います。みんな、開発ツールがフリーでほしかったのです。だから、GNUはGNU OSが完成する前から、UNIXで使える開発ツールとして有名になったのでしょう。そして、さまざまな人間に改良され、Linuxカーネルの開発者がLinuxの上でのコンパイラや標準のツールなどとして使うに至ったのでしょう。
コンパイラがフリー(無料)であることは、教育においても良い効果を発揮します。誰もが、コストを支払わずにプログラミングの勉強や入門ができます。また、自由という側面で言えば、ソースコードが公開されているため、ただWindows APIを使うだけではなく、自分でコマンドやライブラリのソースコードを見ることができます。これはプログラミングの学習環境として、とても優れています。Pythonなどもオープンソースですが、コンパイルした実行ファイルを簡単に再配布できる、という点で言えば、コンパイル言語の優位性も依然としてあるでしょう。ですが、Linuxをインストールせず、Windowsのままで実行ファイルが作れる、Windows APIやVisual C++のライブラリを完備した互換コンパイラとライブラリがあれば良いのですが、そこまですると、逆にMicrosoftの開発意欲を損ねてしまうでしょう。
本当は、コンパイラが有料であることは良い側面もあります。コンパイラは、プログラミング界でもっとも作るのが難しいソフトウェアのひとつです。オープンソースでは作れない領域でも、Microsoftなら作れるでしょう。ですが、PHPやRubyを見るように、言語処理系の流行はオープンソースの機運に乗っているように思います。Rustなどが最たる例でしょう。
後日注記:MicrosoftはWindowsに標準でVisual Studioを含めるようにすれば良いと思います。短期的な利益は少なくなるかもしれませんが、Windowsアプリケーションを開発する人が増えて、Windowsエコ・システムは拡大し、Windowsアプリケーションは豊かになるでしょう。
Autoconfで移植性を高める
Autoconfは移植性を高めるためのツールで、プログラムをビルドするために使うconfigureというシェルスクリプトを自動作成する。
Automakeで楽にMakefileを作る
Autoconfには補助ツールとしてAutomakeとlibtoolがある。Automakeを使うと、簡単な記述でMakefileを自動作成してくれる。
Automakeはさまざまな変数の使い方などを理解するのが難しいが、慣れるとMakefileを書く必要がない。XOrg Serverのソースツリーなどを見ていると、各ディレクトリにそのディレクトリの中にあるソースファイルの一覧のような内容を記したMakefile.amがある。それらについての詳細は、以下のページを参照のこと。たくさんの必要なファイルとたくさんの必要な入力・実行作業があって最初は戸惑うかもしれない。昔は、これでも楽だった。