ちゅうかん‐げんご【中間言語】
中間言語 [intermediate language]
中間言語
別名:IL
【英】Intermediate Language
中間言語とは、高水準言語と機械語の中間に介在するプログラミング言語のことである。
ソースプログラム(原始プログラム)は、より人間の言葉に近い高水準言語で記述されており、コンピュータがそのまま実行することはできない。そのため、コンパイラによっていったん中間言語に置き換えられてから、機械語に翻訳され、実行可能なプログラムとなる。
ソースプログラムを様々な高水準言語で記述できるようになった今日、各種のソースプログラムを中間言語に置換して中間コードとし、リンケージエディタ(連係編集プログラム)により全体をまとめる作業は機械語への翻訳作業を効率よく行うのに不可欠となっている。
参照リンク
An intermediate Language for system engineering - (IEEE computer society –digital library-)
中間言語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/11/27 04:55 UTC 版)
![]() | この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2010年12月) |
ピヴォット言語
ピヴォット言語(pivot language)は、中間言語のうちでも、特にピヴォット翻訳と呼ばれる機械翻訳における手法においてあらわれる言語である(英語版の記事名は pivot language となっており、特にこれについて説明している)。
一般に機械翻訳では、構文解析の結果すなわち構文木の変換によって翻訳したり(構文トランスファー方式)、あるいはより深く意味解析までおこなって翻訳をする(意味トランスファー方式)。いずれにしてもその変換は、翻訳元と翻訳先の言語に特化したものになる。それに対してピヴォット翻訳では、どの言語にも特化せず、どの言語にも対応できる「ピヴォット言語」への翻訳と、そこからの目的言語への翻訳、というようにして機械翻訳が可能であるものとして考えられるものである。
この手法のメリットは、組合せ爆発を防げることである。中間言語を用いると、翻訳が必要となる言語の組み合わせの数は二乗スケール
中間言語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 07:33 UTC 版)
「中間言語」という語は、中間表現が言語(形式言語)の形態をしている場合にそう呼ばれるものである。ここでは主に、プログラミング言語に関係する場合について述べる。 コンパイラでは、ソースコードから直接ターゲットのコードを生成するのではなく、中間表現を経由するコンパイラがある。インタプリタでは、ソースコードを直接解釈実行するのではなく、中間表現を生成してそれを解釈実行するインタプリタがある。コンパイラにしてもインタプリタにしても、あるいはそういったコンピュータ・プログラミング言語の処理系に限らず、入力があって出力がある任意のコンピュータ・プログラムにおいて、そういった何らかの中間表現は1段階とは限らず、複数種類があって複数段階のこともある。 歴史的には、言語処理系では1970年代頃までは単一言語、単一ターゲットが普通であった。しかし発想自体は以前からあり、1958年のメルヴィン・コンウェイの文献Proposal for an UNCOLで提案されているUNCOL(UNiversal Computer Oriented Language)がある。UNCOLは概念の提案のためのものであり、完備された仕様として示されたものではない。また、初期の日本のコンピュータにおいて森口繁一の提案による、素朴なものであるが命令名の共通化などをはかったSIP(Symbolic Input Program)というものがあった。 1980年代には一般的に見られるようになり、GNU Compiler Collectionでは、中間表現の内部形式は Register Transfer Language(RTL)などの非依存なものであり、Machine Descriptions(MD)と呼んでいるターゲットの記述によってコードを生成することにより、複数の言語やターゲットに対応している。ただし、中間表現を外部のファイルに書き出したり、外部のファイルから読み込んだり、ということが簡単にできるようにはなっておらず、これは意図的なものである。 その後2000年頃から日本において、GPLでなく利用できるそのようなインフラストラクチャが必要だという考えから整備された「COINSコンパイラ・インフラストラクチャ」(COINS: a COmpiler INfraStructure)がある。COINSには高水準中間表現(HIR: High level intermediate representation)と低水準中間表現(LIR: Low level intermediate representation)があるなど、対応を広げるためと現代的な最適化のための充実した中間表現を持っている。またその少し後にあらわれたLLVMも同様に、ライセンスがGPLでなく、中間言語を活用しており、フロントエンドが異なるプログラミング言語のソースコードを1つの中間言語に変換し、バックエンドが1つの中間言語を異なるターゲットのコードへ変換する。LLVMはclang・rustc・Emscriptenなどの「コンパイラ基盤」として使われている。 初期のBASIC処理系の実装で用いられた中間言語は、バイトコードのようなものではなく、字句解析のみを行い、BASICの各ステートメント(ないしコマンド)を単にコードに直接変換するだけといったものもあった。実行時の字句解析が不要になるが、ソースコードに戻して表示、編集することもできる。GOTOの飛び先をキャッシュするなどの工夫がされたものもあった。高度な中間言語を利用する実装もあり、N88-日本語BASIC(86)(MS-DOS版)のコンパイラは、実行ファイルを出力するが、その内部は中間言語コードでありまたその実行には外部に、中間言語のインタプリタを含むランタイムライブラリが必要だった。幾つかのバーチャルマシンやインタプリタは中間言語を直接実行する。
※この「中間言語」の解説は、「中間表現」の解説の一部です。
「中間言語」を含む「中間表現」の記事については、「中間表現」の概要を参照ください。
固有名詞の分類
- 中間言語のページへのリンク