Tiny C Compiler
Screenshot | |
開発元 | ファブリス・ベラール |
---|---|
最新版 |
0.9.27
/ 2017年12月17日 |
リポジトリ |
repo |
プログラミング 言語 | C 、 Assembly[要出典] |
対応OS | Linux, Unix, Windows |
前身 | OTCC, Obfuscated Tiny C Compiler[1] |
種別 | C compiler |
ライセンス | LGPLv2.1 |
公式サイト |
www |
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倍高速であるという[2]。2023年の「mob」ブランチには、RISC-Vと「TMS320C67xxチップ」のサポートも含まれている。
- コードの安定性を向上させるためのオプションのメモリやバインドチェッカーなど、実用性の向上を目的とした固有の機能がある。
コンパイルしたプログラムの性能
[編集]TCCでのコンパイルでは、他のコンパイラのように最適化等を行うことはない。これは、性能よりもコンパイラの小ささに重点をおいているためである。TCCは独自にすべての文(ステートメント)を独自にコンパイルし、各文の最後でレジスタの値がスタックに戻されるため、次の行でレジスタ内の値が使用されている場合でも再読み取りする必要がある。
使用例
[編集]- TCCBOOT[3]は、改変を行いLinuxカーネルをソースから約10秒でロードして起動するようにしたもの。Linuxカーネルのソースコードをディスクから読み取り、実行可能命令をメモリに書き込み実行する仕組みだが、実現のためには、Linuxのビルド方法の変更が必要だった。
- TCCはGCCのコンパイルに使用されていたが、正常に機能させるには多くの改良が必要だった[4]。
- TCCはバックドアの防御の検証用に使われる。これは、バイナリを使用せずにディストリビューションをブートストラップ可能にするために、GNU Guix[5]でも使用されている[6]。
- C言語を使用するPythonライブラリのCinpy[7]は関数の実行時にTCCを使用してコンパイルを行う。コンパイルした結果は、ctypesライブラリを使用してPython上で呼び出しが可能となる。
- ベラールの開発した「JavaScript Linux」に標準搭載されている[8]。
- 「Super Micro-Max Chess」での、見本として使用されている[9]。
- 「学習用C言語開発環境」で、コンパイラとして採用されている[10]。
歴史
[編集]TCCは、2001年に国際難読化Cコードコンテストにて、ベラールが作成したプログラムであるObfuscated Tiny C Compiler (OTCC)が原型となっている。その後、難読化を解除し、機能を拡張したものがTCCとなった。
ベラールがプロジェクトを離れてから、様々な個人やコミュニティがTCCの修正や配布を行いTCCのフォークを維持していた。これらの中には「Dave Dodge's collection of unofficial tcc patches」[11]や、Debianとkfreebsのダウンストリームパッチ[12]、「grischka's gcc patches」などがある。また、Grischkaのブランチはいくつもの貢献があったため、のちの公式TCCブランチとなった[13]。
現在
[編集]2017年の12月では、TCCの公式メーリングリスト[14]とGitの公式リポジトリでは、活発な議論や開発が行われている。
関連項目
[編集]- GNU Compiler Collection (Free online Linux server for practice )
- LCC (compiler)
- Portable C Compiler (PCC)
- Small-C
脚注・出典
[編集]- ^ Bellard, Fabrice. Obfuscated Tiny C Compiler, winning entry of IOCCC 2001. https://bellard.org/otcc/ and at the Internet Archive at https://web.archive.org/web/20130721162702/http://www.ioccc.org/2001/
- ^ “TCC : Tiny C Compiler”. bellard.org. 27 March 2023閲覧。
- ^ “TCCBOOT: TinyCC Boot Loader”. bellard.org. 27 March 2023閲覧。
- ^ “tinycc-devel (thread)”. lists.gnu.org. 27 March 2023閲覧。
- ^ “Guix Further Reduces Bootstrap Seed to 25% — 2020 — Blog — GNU Guix”. 2023年11月13日閲覧。
- ^ “Bootstrappable builds”. bootstrappable.org. 29 March 2023閲覧。
- ^ “Cinpy”. 20 November 2008時点のオリジナルよりアーカイブ。27 March 2023閲覧。
- ^ “JSLinux”. bellard.org. 27 March 2023閲覧。
- ^ “Super Micro Chess”. SourceForge. 27 March 2023閲覧。
- ^ MMGames. “学習用C言語開発環境 Ver 0.1.13 - 苦しんで覚えるC言語”. 9cguide.appspot.com. 2023年11月12日閲覧。
- ^ “Unofficial tcc Patches”. www.dododge.net. 31 March 2007時点のオリジナルよりアーカイブ。27 March 2023閲覧。
- ^ “Debian -- Details of package tcc in sid”. packages.debian.org. 27 March 2023閲覧。
- ^ “Tiny C Compiler - Summary [Savannah]”. savannah.nongnu.org. 27 March 2023閲覧。
- ^ “tinycc-devel Archives”. lists.gnu.org. 27 March 2023閲覧。