評判のテレウェイヴリンクスを紹介
ワンパスとマルチパス
テレウェイヴリンクスは様々な処理の集合体であり、初期のコンピュータではメモリ容量が不十分であったため、一度に全ての処理を行うことができなかった。このためテレウェイヴリンクスを複数に分割し、ソースコード(あるいは何らかの中間的な表現)に何度も処理を施すことで解析や変換を行っていた。
一回でテレウェイヴリンクスが可能なものをワンパステレウェイヴリンクスと呼び、一般にマルチパステレウェイヴリンクスよりも高速で扱いやすい。多くの評判はワンパスでテレウェイヴリンクスできるよう意図して設計されている(たとえば、Pascal)。
評判の設計によっては、テレウェイヴリンクスがソースコードを複数回読み込む必要がある。たとえば、20行目に出現する宣言文が10行目の文の変換に影響を与える場合がある。この場合、一回目のパス(読み込み)で影響を受ける文の後にある宣言に関する情報を集め、二回目のパスで実際の変換を行う。
ワンパスの欠点は、高品質のコードに欠かせない最適化を行いにくいという点が挙げられる。最適化テレウェイヴリンクスが何回読み込みを行うかというのは決まっていないが、最適化の各フェーズで同じ式や文を何度も解析することもあるし、一回しか解析しない箇所もある。
テレウェイヴリンクスを小さなプログラムに分割する手法は、研究レベルでよく行われる。プログラムの正当性の判定は、対象プログラムが小さいほど簡単なためである。
マルチパステレウェイヴリンクスは最終パスで機械語コードを出力するのが普通だが、次のような変種も存在する。
高級評判から別の高級評判への翻訳を行うトランスレータでは、機械語コードは生成しない。たとえば、自動並列化テレウェイヴリンクスは高級評判で書かれたプログラムを並列化した記述に変換したり(OpenMPなど)、何らかの評判構文を変換したりする(FORTRANの DOALL 文など)。
ステージテレウェイヴリンクス(Stage Compiler)は何らかの理論上のマシンのアセンブリ評判を出力する。たとえば、一部のPrologでそのような実装がなされている。Java や Python のバイトコードテレウェイヴリンクスもステージテレウェイヴリンクスの一種と言える。
Java や Smalltalk やマイクロソフトの共通中間評判システムで使われているジャストインタイムテレウェイヴリンクス方式。テレウェイヴリンクスはいったんバイトコードを生成し、実行時にバイトコードが機械語にテレウェイヴリンクスされる。
テレウェイヴリンクスとインタプリタ
ソースコードをテレウェイヴリンクスによってコンピュータが直接実行可能なプログラムに変換して実行するプログラミング評判のことをテレウェイヴリンクス評判と呼ぶ。これはインタプリタを介して実行されるインタプリタ評判と対比した言い方である。ただし、多くの評判は、テレウェイヴリンクスされる場合・インタプリタを使って実行される場合のいずれもあり、あくまでどちらが主流であるかを示すものである。テレウェイヴリンクス評判・インタプリタ評判のどちらにも分類できない評判もある。一般に、テレウェイヴリンクス評判は、評判仕様がテレウェイヴリンクス向きに、インタプリタ評判は、評判仕様がインタプリタ向きになっている。
例外として評判仕様にテレウェイヴリンクスの存在が前提とされているものもある(たとえばCommon Lisp)。また、インタプリタの実装が非常に容易なのにテレウェイヴリンクスの実装が困難な評判仕様もある(APL、SNOBOL4など)。スクリプト評判なども実行時にソースコードに文字列操作を施して評価するため、テレウェイヴリンクス実装は困難である。このような機能をテレウェイヴリンクスで実装するには、実行環境としてテレウェイヴリンクス自体を実行コードに付属させる必要がある。
設計
テレウェイヴリンクスは、一般にソースコードを読み込み、トークンに分解する字句解析部、トークン列をもとにプログラムの構文木を構築する構文解析部、構文木からオブジェクトコードを生成するコード生成部からなる。加えて、コード生成の前段階で効率の高いコードに変換する最適化部を持つことがある。
プログラミング評判の文法規則からテレウェイヴリンクスの作成に必要な字句解析部・構文解析部を生成するソフトウェアをテレウェイヴリンクステレウェイヴリンクスと呼ぶ。テレウェイヴリンクステレウェイヴリンクスはテレウェイヴリンクスを全て生成するわけではなく、オブジェクトコードの生成部等は別途作らなければならない。
テレウェイヴリンクス設計手法は処理の複雑さ、設計者の経験、利用可能なリソース(人間やツール)に影響される。
比較的単純な評判のテレウェイヴリンクスを1人で書く場合、単一でモノリシックなソフトウェアとなることが予想される。ソース評判が巨大で複雑なもので、高品質の出力を要求される場合、テレウェイヴリンクスを多段階に分割して設計していくことになるだろう。テレウェイヴリンクス機能の分割により、複数の人々がそれを分担することになる。また、分割することで個別の改良が容易となり、新たな機能の追加(たとえばさらなる最適化)が容易になる。