わたしの名はフレイ 作家・デザイナー見習い
神々とともに生きる詩人 一等星シリウスの導きを信じて

GNUツールチェイン

フロントエンドとバックエンド

GCCは、「フロントエンド - 最適化部(中間コード) - バックエンド」という設計をしている。

こうすることによって、フロントエンドとバックエンドの部分を開発するだけで、さまざまなプログラミング言語とさまざまなCPUプロセッサ向けの機械語に対応できる。

フロントエンドを作るだけで新しいプログラミング言語(自作のプログラミング言語の場合も含む)にも対応でき、バックエンドを作るだけで新しいCPUプロセッサに対応できる。

そのため、新しいプログラミング言語を作りたい場合は、GCCのフロントエンドだけを開発すれば良い。

フロントエンドは構文解析のbisonや字句解析のflexというツールが使われている。

macOS/Windows

GCCmacOSでも動かすことができ、Xcodeを導入すると自動的にgccがインストールされる。

また、Windows版としてMinGWがあり、Visual Studioの代替C/C++コンパイラとして利用できる。

ロスコンパイラ

ロスコンパイルとは、組み込みシステムなどで、x86のパソコンから別のCPUアーキテクチャ向けのバイナリ実行ファイルを出力すること。

LLVM/Clang

LLVM/Clangは新しいC/C++など向けのコンパイラgccを置きかえるのではないかと期待されている。Linuxでも使えるし、Macや*BSDなどでも最近使われるようになってきている。

Binutils (as, ldなど)

さまざまなオブジェクトフォーマットを含むオブジェクトファイルを扱うためのプログラミングツール。

主なコマンドとして、as(アセンブラ)やld(リンカ)がある。gcc/make/gdbで使う補助のためにも必要。

gettext

GNUで翻訳のために使われているライブラリ。

持論:コンパイラはフリーでなければならない

僕の持論として、「コンパイラだけはフリーでなければならない」というのがあります。

それは、「プログラミングは、万人に手段が平等に与えられるものでなければ、万人がコンピュータを使ってプログラミングすることができない」からです。

Windowsフリーソフトには、Visual C++で作られたソフトウェアが多いですが、この場合、ソースコードコンパイルしたり、自分で作ったり開発に参加するためには、Visual C++を買わなければなりません。

たとえ、ソフト自体がフリーであっても、それを作るための手段はフリーではないのです。

GNUというプロジェクトが、コンパイラなどの開発ツールから始まり、GNU OSが実用化される以前から、「フリーなコンパイラ」として有名だったのは、その理由があると思います。みんな、開発ツールがフリーでほしかったのです。だから、GNUGNU OSが完成する前から、UNIXで使える開発ツールとして有名になったのでしょう。そして、さまざまな人間に改良され、Linuxカーネルの開発者がLinuxの上でのコンパイラや標準のツールなどとして使うに至ったのでしょう。

コンパイラがフリー(無料)であることは、教育においても良い効果を発揮します。誰もが、コストを支払わずにプログラミングの勉強や入門ができます。また、自由という側面で言えば、ソースコードが公開されているため、ただWindows APIを使うだけではなく、自分でコマンドやライブラリのソースコードを見ることができます。これはプログラミングの学習環境として、とても優れています。Pythonなどもオープンソースですが、コンパイルした実行ファイルを簡単に再配布できる、という点で言えば、コンパイル言語の優位性も依然としてあるでしょう。ですが、Linuxをインストールせず、Windowsのままで実行ファイルが作れる、Windows APIやVisual C++のライブラリを完備した互換コンパイラとライブラリがあれば良いのですが、そこまですると、逆にMicrosoftの開発意欲を損ねてしまうでしょう。

本当は、コンパイラが有料であることは良い側面もあります。コンパイラは、プログラミング界でもっとも作るのが難しいソフトウェアのひとつです。オープンソースでは作れない領域でも、Microsoftなら作れるでしょう。ですが、PHPRubyを見るように、言語処理系の流行はオープンソースの機運に乗っているように思います。Rustなどが最たる例でしょう。

後日注記:MicrosoftWindowsに標準でVisual Studioを含めるようにすれば良いと思います。短期的な利益は少なくなるかもしれませんが、Windowsアプリケーションを開発する人が増えて、Windowsエコ・システムは拡大し、Windowsアプリケーションは豊かになるでしょう。

Make

GNU makeは、プログラムのソースコードコンパイルする時、更新されたファイルだけをコンパイルするなど、色んなことが出来ます。

Autoconfで移植性を高める

Autoconfは移植性を高めるためのツールで、プログラムをビルドするために使うconfigureというシェルスクリプトを自動作成する。

Automakeで楽にMakefileを作る

Autoconfには補助ツールとしてAutomakeとlibtoolがある。Automakeを使うと、簡単な記述でMakefileを自動作成してくれる。

Automakeはさまざまな変数の使い方などを理解するのが難しいが、慣れるとMakefileを書く必要がない。XOrg Serverのソースツリーなどを見ていると、各ディレクトリにそのディレクトリの中にあるソースファイルの一覧のような内容を記したMakefile.amがある。それらについての詳細は、以下のページを参照のこと。たくさんの必要なファイルとたくさんの必要な入力・実行作業があって最初は戸惑うかもしれない。昔は、これでも楽だった。