Tiny C Compiler(タイニーシーコンパイラー、「TCC」とも)はファブリス・ベラールによって作成されたx86、x86-64、ARMアーキテクチャ用のC言語のコンパイラである。名前の通りとても小さく、ディスク容量が小さいコンピューターでも動作するように設計されている。Windowsのサポートについてはバージョン0.9.23から追加されている。ライセンスはLGPLライセンスが付与されている。

特徴 TCCには現行のコンパイラとは異なる特徴として以下のような特徴がある。

ファイルサイズが小さく(x86用のものは約100KB)、メモリー・フットプリントも小さいため、1.44MBのレスキューディスクのフロッピーディスクからでも使用することができる。 TCCはネイティブのx86、x86-64、ARMアーキテクチャのためのコードを素早く生成することを目的としている。ベラールによると、コンパイル、アセンブル、そしてリンクはGCCよりも約9倍高速であるという。2023年の「mob」ブランチには、RISC-Vと「TMS320C67xxチップ」のサポートも含まれている。 コードの安定性を向上させるためのオプションであるメモリリークや境界チェッカーなど、実用性の向上を目的とした固有の機能がある。

コンパイルしたプログラムの性能 TCCでのコンパイルでは、他のコンパイラのように最適化等を行うことはない。これは、性能よりもコンパイラの小ささに重点をおいているためである。TCCはすべての文(ステートメント)を独立にコンパイルし、各文の最後ではレジスタの値がスタックに戻されるため、次の行でレジスタ内の値を使用する場合でも、スタックから再び読み出す必要がある。

使用例

TCCBOOTは、Linuxカーネルをソースから約10秒でロードして起動するようにしたハックである。Linuxカーネルのソースコードをディスクから読み取り、実行可能命令をメモリに書き込み実行する、特異ではあるがブートローダの一種である。実現のためには、Linuxのビルド方法の変更が必要だった。 TCCはGCCのコンパイルに使用されていたが、正常に機能させるには多くの改良が必要だった。 TCCはバックドアの防御の検証用に使われる。これは、バイナリを使用せずにディストリビューションをブートストラップ可能にするために、GNU Guixでも使用されている。 C言語を使用するPythonライブラリのCinpyは関数の実行時にTCCを使用してコンパイルを行う。コンパイルした結果は、ctypesライブラリを使用してPython上で呼び出しが可能となる。 ベラールの開発した「JavaScript Linux」に標準搭載されている。 「Super Micro-Max Chess」での、見本として使用されている。 「学習用C言語開発環境」で、コンパイラとして採用されている。

歴史 TCCは、2001年に国際難読化Cコードコンテストにて、ベラールが作成したプログラムであるObfuscated Tiny C Compiler (OTCC)が原型となっている。その後、難読化を解除し、機能を拡張したものがTCCとなった。

ベラールがプロジェクトを離れてから、様々な個人やコミュニティがTCCの修正や配布を行いTCCのフォークを維持していた。これらの中には「Dave Dodge's collection of unofficial tcc patches」や、Debianとkfreebsのダウンストリームパッチ、「grischka's gcc patches」などがある。また、Grischkaのブランチはいくつもの貢献があったため、のちの公式TCCブランチとなった。

現在 2017年の12月では、TCCの公式メーリングリストとGitの公式リポジトリでは、活発な議論や開発が行われている。

関連項目

GNU Compiler Collection (Free online Linux server for practice ) LCC (compiler) Portable C Compiler (PCC) Small-C

脚注・出典

外部リンク

公式メーリングリスト ソースコードリポジトリ PTSource IDE-Integrated Development Environment includes TCC.