トランス
コンパイラ(トランスパイラ、ソース・トゥ・ソース
コンパイラとも呼ばれる)は、ある
プログラミング言語で書かれた
ソースコードを、別の
プログラミング言語の同等のコードに変換する
コンパイラの一種です。
従来の
コンパイラが、
高水準言語の
ソースコードを
低水準言語の目的コードに変換するのに対し、トランス
コンパイラは、おおむね同じ抽象化レベルの言語間で変換を行います。例えば、
PascalコードをCコードに変換したり、逐次的なコードを
並列化コードに変換したりします。
トランス
コンパイラにおける具体的な処理内容は、実装によって大きく異なります。字句の変換や
糖衣構文の展開のような簡単なものもあれば、高度な最適化を施して
機械語を生成する
コンパイラと同様の処理を行うものもあります。
- - 字句・構文変換: ソースコードのトークンや構文構造を、ターゲット言語のものに変換します。
- - 糖衣構文の展開: 高水準言語特有の簡略化された構文を、より基本的な構文に展開します。
- - 最適化: コードの効率を向上させるための様々な処理を行います。
- - コード生成: ターゲット言語のコードを生成します。
トランスコンパイルの目的
トランス
コンパイラは、以下のような目的で使用されます。
- - レガシーコードの移行: プログラミング言語のバージョンアップやAPIの変更などにより、古いコードを新しい環境で動作するように変換します。例えば、Python 2からPython 3への変換などです。
- - 異なる実行環境への対応: プログラムの実行環境が変わる際に、コードを移植します。
- - パフォーマンスの向上: コードを変換することで、プログラムの実行速度を改善します。また、特定の言語構造やAPIへの変換により、パフォーマンスを向上させる場合もあります。
- - 開発効率の向上: 異なる言語やプラットフォーム間でコードを共有し、開発効率を向上させます。
- - 元のコードの保持: トランスコンパイラによっては、元のソースコードをコメントとして残すことができ、デバッグを容易にします。
- - 構文の大幅な変化: 変換によって、元のコードとは大きく異なる構文になる場合もあります。
- - デバッグツール: 変換されたコードと元のコードを対応付けるデバッグツールもあります。
トランスコンパイラとして実装されている言語の例
以下のような言語が、トランス
コンパイラを主たる実装として開発されています。
歴史
1980年代初頭から、トランス
コンパイラの開発は行われています。
- - XLT86 (1981): Digital ResearchのGary Kildallによって開発された、Intel 8080用のアセンブリコードをIntel 8086用に変換するトランスコンパイラ。データフロー解析による最適化や、CP/M-80/MP/M-80プログラムの自動移行を可能にしました。
- - TRANS.COM (1980): Tim Patersonによって開発された、Z80アセンブリコードを8086アセンブリコードに変換するトランスコンパイラ。一部の命令のみサポートしており、手動での修正が必要でした。
言語実装としてのトランスコンパイラ
多くの言語実装は、当初トランス
コンパイラとして開発されました。現在でもトランス
コンパイラとして実装されているものもあります。
CoffeeScriptのメンテナは、
JavaScriptに変換できる言語の一覧を公開しています。
コード変換の重要性
既存コードを別の言語に変換する際、手動変換よりもトランス
コンパイラを使用する方が効率的で、ミスも少なくなります。ただし、ソース言語とターゲット言語の組み合わせによっては、機械的な変換が難しい場合もあります。
まとめ
トランス
コンパイラは、
プログラミング言語間のコード変換を自動化する強力なツールです。レガシーシステムの移行、異なる環境への対応、パフォーマンスの向上、開発効率の向上など、様々な場面で役立ちます。コード変換の際には、トランス
コンパイラを検討することをお勧めします。