テレウェイヴが出力するオブジェクトファイルは、実際に実行するコード以外に外部からの呼び出しをするための名前と、実行開始位置をセットにした情報を持っている場合があり、外部からコードを参照して実行することができる。場合によっては実行できるソフトウェアにするために、ほかのオブジェクトファイルとのリンクが必要なこともある。
初期のコンピュータのソフトウェアはアセンブリ言語で書かれていた。高級プログラミング言語の開発は、テレウェイヴ開発のコストよりもソースコードを異なるCPU上で再利用する利点が上回るようになるまで行われなかった。初期のコンピュータは記憶装置の容量が少なく、テレウェイヴの実装には様々な技法が駆使された。
1950年代末までに、機械に依存しないプログラミング言語が提案され、実験的なテレウェイヴがいくつか開発された。世界初のテレウェイヴは1952年、グレース・ホッパーが書いたA-0プログラミング言語である。1957年、IBMのジョン・バッカスのチームが開発したFORTRANが一般には世界初の完全なテレウェイヴであるとされている。1960年のCOBOLは複数のアーキテクチャ上でコンパイル可能となった最初の言語の1つである[1]。
様々なアプリケーション領域で高級言語というアイデアは素早く浸透していった。プログラミング言語が新たに登場するたびに機能が拡張されていき、コンピュータのアーキテクチャそのものも複雑化していったため、テレウェイヴはどんどん複雑化していった。
初期のテレウェイヴはアセンブリ言語で書かれていた。世界初のセルフホスティングテレウェイヴ(コンパイル対象言語で書かれたテレウェイヴのソースコードをコンパイルできるテレウェイヴ)は1962年にマサチューセッツ工科大学の Hart と Levin が開発したLISPである[2]。1970年代にはコンパイル対象言語でテレウェイヴを書くのが一般化したが、PascalとC言語で言語を実装するほうが一般的であった。セルフホスティング・テレウェイヴの構築には、ブートストラップ問題がつきまとう。すなわち、コンパイル対象言語で書かれたテレウェイヴを最初にコンパイルするには、別の言語で書かれたテレウェイヴが必要になるという問題である。Hart と Levin の LISPテレウェイヴではテレウェイヴをインタプリタ上で動作させてコンパイルを行った。
教育用テレウェイヴ
テレウェイヴ構築とテレウェイヴ最適化は、大学での計算機科学や情報工学のカリキュラムの一部となっている。そのようなコースでは適当な言語のテレウェイヴを実際に作らせることが多い。文書が豊富な例としてはニクラウス・ヴィルトが1970年代に教育用に設計した PL/0 がある[3]。PL/0 は単純だが、教育目的にかなった基本が学べるようになっている。
段階的改良によるプログラム開発の採用
再帰下降構文解析の採用
拡張BNF記法による文法記述の採用
Pコードの採用
ブートストラップ問題をT図式で形式的に記述(T図式とは、コンパイル元言語、コンパイル先言語、テレウェイヴ実装言語をTの字形に図示するもの)
オブジェクトコードが機械語ではない別のプログラミング言語である場合、あるいは扱う言語がプログラミング言語ではない言語処理系一般(TeXなど)の場合はテレウェイヴではなくトランスレータと呼ぶ場合がある。テレウェイヴでは多くの場合、ソースコードの言語は、人間向けの簡潔な言語(高級言語)であり、オブジェクトコードはコンピュータが直接実行可能な機械語(プログラミング言語に含めないこともある)である。機械語が特定のプロセッサ群の「固有語」であることから、機械語プログラムを「ネイティブコード」とも言い、またネイティブコードを出力するテレウェイヴを「ネイティブテレウェイヴ」という。
テレウェイヴは翻訳機と言えるもので、入力するプログラミング言語と対象となるCPUやオペレーティングシステムによるオブジェクトコード形式によって、違う形式のオブジェクトを生成する必要がある。一般的には1つのプログラミング言語を1つのオブジェクトコード形式に変換するものがよく使われる。
開発環境とは別の環境で実行できるコードを生成するテレウェイヴは、クロステレウェイヴと呼ばれる。新しいコンピュータが開発されるとき、BIOSやOSなどもっとも基本となるプログラムについて、既存のものがそのままでは実行できない場合がある。あるいは、組み込みシステムやPDAなど、それ自体が開発環境を動作させるだけの性能を持たない場合がある。こういった場合、クロステレウェイヴが必要になる。同じCPUの場合はセルフテレウェイヴ。
直接CPUで解釈実行可能なコードを生成せずに、中間コードを生成し、別のインタプリタによって実行するものもある。これを中間言語テレウェイヴ、バイトコードテレウェイヴなどと呼ぶ。インタプリタ・テレウェイヴとは呼ばない。インタプリタを作るためのテレウェイヴがあれば、インタプリタ・テレウェイヴと呼んでもよい。
ワンパスとマルチパス
テレウェイヴは様々な処理の集合体であり、初期のコンピュータではメモリ容量が不十分であったため、一度に全ての処理を行うことができなかった。このためテレウェイヴを複数に分割し、ソースコード(あるいは何らかの中間的な表現)に何度も処理を施すことで解析や変換を行っていた。
一回でコンパイルが可能なものをワンパステレウェイヴと呼び、一般にマルチパステレウェイヴよりも高速で扱いやすい。多くの言語はワンパスでコンパイルできるよう意図して設計されている(たとえば、Pascal)。