実装
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/08 01:14 UTC 版)
プログラミング言語の実装は、プログラミング言語処理系と呼ばれる。コンパイラは、ソースコードなどの入力を中間表現などの、より解釈実行しやすい表現に変換する処理系である。また、インタプリタは、入力されたプログラムを解釈実行する処理系である(ハードウェアのプロセッサは、機械語を解釈実行するインタプリタである、と見ることができる)。 コンパイラとインタプリタの関係は、理論的には二村射影により定式化されている。 なお、「大きく分けて2つの方法がある。コンパイラとインタプリタである。一般にある言語をコンパイラとインタプリタの両方で実装することが可能である。」などといったように(従来書かれた通俗的解説書などには大変多いが)理解していると、Javaなど近年の多くの言語処理系のスタイルが全くわからない、ということになる。 (機械語にまで変換するもののみを指してコンパイラと呼びたがる向きが一部にあり、その立場にもある程度は理もあるのだが、そうするとJavaの一般的な実装を指す用語が無くなる) 「コンパイラの出力したものをインタプリタで実行する方式は、コンパイラとインタプリタの区別が曖昧な場合もある。」などという変な説明をする者もいるが、前述したように、そもそも間違った2分法で考えているから、そのような変な考え方になるのである。 一般に、機械語に変換したもの(実行ファイル)を直接ハードウェアで実行する方が、インタプリタで実行するよりもずっと高速である。インタプリタでの実行を改善する技法として、実行時コンパイラなどの動的コンパイル手法がある。
※この「処理系」の解説は、「プログラミング言語」の解説の一部です。
「処理系」を含む「プログラミング言語」の記事については、「プログラミング言語」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/29 03:02 UTC 版)
Perlという名称の記述においては、若干の注意が必要である。プログラミング言語としてのPerlを示すときは「Perl」というように、頭文字を大文字にして固有名詞であることをはっきりさせる。この「Perl」という表記では処理系のことは含まれない。Perl 5の現在開発されている唯一の処理系は「perl」という、すべて小文字で記述される名前の処理系である。一般に「perlだけがPerlを解釈することができる」という表現がなされる。「PERL」のようにすべてを大文字にするのは誤りである。 このようにPerl 5現在において、Perlとは言語の名前であると同時に唯一の処理系の名前でもある。この処理系はC言語で書かれている。スクリプトは実行前に仮想機械向けにコンパイルされ、コンパイルされたバイトコードが実行される(ランタイムコンパイル)。そのため、厳密にはインタプリタとは異なる。 Pythonのように一旦生成したバイトコードを保存して再利用することは少ないが、これは現在のPerlのランタイムコンパイルが高速で、バイトコードから実行するメリットがあまりないことが理由の一つである。コンパイル済みコードの再利用としてはむしろmod_perlのような形式が好まれている。 PAR (Perl Archive Toolkit) というPerlスクリプトを実行環境ごとアーカイブし、単一のファイルにまとめるためのツールキットも存在する。JARのPerl版と考えてよい。実行可能ファイルを作ることもできるため、アプリケーションの配布に適する。しかしその場合はPerl実行環境をまるごと含むため、ファイルサイズが大きくなる傾向にある。 Perlの姉妹言語としてRaku (旧 Perl 6) が存在する。RakuはParrotというバーチャルマシンの上で動作する。現在、ParrotCodeへのコンパイルを行うRakudo Starという処理系やHaskellで書かれたPugsという処理系などの複数の実装が公開されている。なおRakuはPerlと互換性を持たない。
※この「処理系」の解説は、「Perl」の解説の一部です。
「処理系」を含む「Perl」の記事については、「Perl」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/04 21:35 UTC 版)
コンピュータの場合には、データはプログラム以外のものをさし、その形態は、文書、映像、音声など様々である。直接スイッチなどを使ってメモリ上に書き込む場合も有るが、大抵はプログラムによって出力され、他のプログラムなどで読み込み使われる。コンパイラなどの処理ではプログラムをインタプリタやコンパイラのデータとして扱う場合もある。またデータの中にプログラムを含むことも可能。x86などではプログラムとデータは同一のメモリー空間に配置され、設計者の意図によって区別される。 データは、レジストリやファイルやデータベース、などに収めることができる。
※この「処理系」の解説は、「データ」の解説の一部です。
「処理系」を含む「データ」の記事については、「データ」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/23 04:24 UTC 版)
C--コードをマシンコードにコンパイルする処理系は複数存在する。2018年現在、大半の処理系がソースコードの公開を含めメンテナンスされていない。 Quick C-- Quick C--は、The Quick C-- Teamが開発するコンパイラである。C--バージョン2のC--コードをIntel x86のLinuxマシンコードへコンパイルする。他プラットフォームのマシンコードへのコンパイルは試験版機能として実装されている。従来はC--言語仕様の開発と平行してQuick C--が開発されていたが、2018年現在はgithubにソースコードが保管されているのみで開発は継続していない。 cmmc cmmcは、Fermin ReigがML言語で実装したC--コンパイラである。Alpha・Sparc・X86のマシンコードを出力する。 Trampoline C-- Compiler Trampoline C-- Compilerは、1999年5月にSergei Egorovが開発したC--からC言語へのトランスパイラである。 Oregons Graduate Institutes C-- compiler Oregons Graduate Institutes C-- compiler(OGI C-- Compiler)は、1997年にML言語で実装された最初期のプロトタイプのC--コンパイラである。Quick C--の開発が始まってからはメンテナンスは継続していない。
※この「処理系」の解説は、「C--」の解説の一部です。
「処理系」を含む「C--」の記事については、「C--」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/15 19:56 UTC 版)
「制約論理プログラミング」の記事における「処理系」の解説
以下に制約論理プログラミング言語の例を挙げる: B-Prolog (Prologベース、プロプライエタリ) CHIP V5 (Prologベース、C++/C言語のライブラリも含む、プロプライエタリ) Ciao Prolog (Prologベース、フリーソフトウェア: GPL/LGPL) ECLiPSe (Prologベース、オープンソース) GNU Prolog(Prologベース、フリーソフトウェア) Mozart(Oz言語の処理系、フリーソフトウェア) SICStus Prolog (Prologベース、プロプライエタリ) YAP Prolog(Prologベース、オープンソース) CAL (非線型代数方程式等を対象。ICOTで開発。オープンソース) CHAL (階層制約論理型言語。ICOTで開発。オープンソース) GDCC (並列制約論理型言語。ICOTで開発。オープンソース) Cu Prolog (ICOTで開発。オープンソース)
※この「処理系」の解説は、「制約論理プログラミング」の解説の一部です。
「処理系」を含む「制約論理プログラミング」の記事については、「制約論理プログラミング」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/10/16 13:57 UTC 版)
「Oz (プログラミング言語)」の記事における「処理系」の解説
Oz の高品質な実装として Mozartプログラミングシステム がある。これはオープンソースで Mozart Consortium からリリースされている。Mozart は、Unix系オペレーティングシステム、FreeBSD、Linux、Microsoft Windows、macOS などに移植されている。
※この「処理系」の解説は、「Oz (プログラミング言語)」の解説の一部です。
「処理系」を含む「Oz (プログラミング言語)」の記事については、「Oz (プログラミング言語)」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/29 16:04 UTC 版)
インタープリタでも発表当時に存在した他の処理系と比較してかなり高速な上、コンパイラを使えばさらに高速実行が期待できた。 インタープリタは、BASICと同等の操作で使用できる。標準のメモリマップではインタープリタが使用する変数・スタック領域が2304バイトしかなく、一定以上のプログラムを作成する際にはメモリ割り当て(ソース格納開始位置)を変更する必要がある。スタックサイズは512バイトで、変更できない(スタックサイズ変更を前提にしたソースプログラムは、インタプリタでテストできない)。 ソースプログラムのステートメントや関数からは、コンパイル時にほぼ1対1に対応する機械語が生成され、前後のステートメントにわたっての最適化はなされない。ランタイム呼出しやサブルーチン呼出しでは、HLレジスタやスタックを操作する機械語が多くで生成される。他の処理系と比較して高速であったために、コンパイラを複雑化させる最適化が試みられなかったとも考えられるが、この点において、WICSコンパイラは高級言語処理系というより、高機能なマクロアセンブラであったといえよう。なお、局所的にはJPとJRの最適化は行われたが、これはキャリーラボが既にBASE-80に実装している。 コンパイラが生成した目的プログラムは、ディスプレイのリフレッシュレートとの同期を行わない。このため、BASICの感覚で画面出力ステートメントを記述すると、実行時に画面上にノイズが現れることがある。 ランタイムは、インタープリタ、コンパイラ、目的プログラムのいずれもが共通に使用する。2560バイト~4608バイトと小型であり、各種の標準ルーチンと、機械語モニタを含んでいるが、MZ-80B/2000用等では、他に5376バイトのTSモニタを必要とする。 コンパイラが生成した目的プログラムは、ランタイムのみを使用する(インタープリタ本体は使用しない)。このため、インタープリタに上書きして目的プログラムを生成することにより、ランタイムと目的プログラムを併せた連続占有メモリを小さくできる。
※この「処理系」の解説は、「WICS」の解説の一部です。
「処理系」を含む「WICS」の記事については、「WICS」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/10 00:54 UTC 版)
「Go (プログラミング言語)」の記事における「処理系」の解説
Go言語の処理系は2種類ある。 gcはGo言語で実装されたセルフホスティングのGo言語コンパイラである。バージョン1.4以前はC言語で実装されていたが、バージョン1.5でC言語からGo言語への変換ツールでコンパイラの実装言語を切り替えて、以降はGo言語で開発している。構文解析にyacc・bisonを使用している。 Gccgoは、再帰下降パーサを持つC++フロントエンド、バックエンドに標準GCCを利用したサードパーティー開発のGo言語コンパイラである。
※この「処理系」の解説は、「Go (プログラミング言語)」の解説の一部です。
「処理系」を含む「Go (プログラミング言語)」の記事については、「Go (プログラミング言語)」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/01 10:00 UTC 版)
多くの処理系は Prolog の基本機能以外に、制約プログラミングや並行プログラミングのための拡張機能や Constraint Handling Rules などの各種言語をライブラリとして含んでいる。 処理系オープンソース有償・無償の別準拠規格備考Amzi!Prolog N/A 有償 ISO規格 AZ-Prolog N/A 個人/学術は無償 ISO/DEC-10 Prolog 日本語対応 Prolog-KABA互換(グラフィックスを除く) B-Prolog N/A 学術は無償 N/A Ciao Prolog ○ N/A ISO規格 GNU Prolog ○ N/A ISO規格 K-Prolog N/A 有償 ISO規格 日本語対応 micro-Prolog N/A N/A N/A 学術研究用 CP/M80 上で動作 MINERVA N/A 有償 ISO規格 業務用、Java ベース Open Prolog N/A 無償 ISO規格 Mac OS 用 Prolog Cafe ○ N/A N/A Prolog プログラムを Java プログラムに変換 Prolog.NET ○ N/A N/A .NET で Prolog を使用できる P# N/A N/A N/A PrologプログラムをC# プログラムに変換 Qu-Prolog N/A N/A N/A マルチスレッド処理系 Rebol Prolog N/A N/A N/A SICStus Prolog N/A 有償 ISO規格 多くのオペレーティングシステムに対応。Java や .NET でのウェブアプリケーション開発可能。 Prolog for Squeak N/A N/A N/A Squeak に統合された Prolog 環境 Strawberry Prolog ○ N/A N/A SWI-Prolog ○ N/A ISO規格 多くのオペレーティングシステム、Unicodeに対応 TuProlog N/A N/A N/A Visual Prolog N/A 個人は無償 N/A Windows専用 XSB ○ N/A N/A YAP Prolog ○ N/A ISO規格 Prolog コンパイラ。 Scryer Prolog ○ N/A ISO規格 Rust によるモダンな Prolog 実装。2016~
※この「処理系」の解説は、「Prolog」の解説の一部です。
「処理系」を含む「Prolog」の記事については、「Prolog」の概要を参照ください。
処理系
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/11 00:11 UTC 版)
「PHP (プログラミング言語)」の記事における「処理系」の解説
プログラミング言語としてのPHPを実行するための The PHP Group による公式な処理系の実装も、プログラミング言語としてのPHPと区別されることなく PHP と呼ばれる。2014年頃までプログラミング言語としてのPHPには規格などが存在しなかったため、公式の処理系の実装およびマニュアルの記述がその代わりとなっていた。2018年1月現在では、作業中となっているが、プログラミング言語としての仕様は処理系の実装と分かれて文書化されている。 この実装はCで書かれており、PHP LicenseおよびZend Engine Licenseの下で公開されている自由なソフトウェアである。PHP4以降において、プログラミング言語としてのPHPを解釈・実行するエンジンとしてZend Engineが使用されており、PHP5よりZend Engine 2、PHP7ではZend Engine 3へと順次バージョンアップされている。Zend EngineはPHP 3の主要な開発者であるアンディ・ガトマンズおよびゼーブ・スラスキー(後にZend Technologies Ltd.を設立)により設計・開発されたスクリプト言語エンジンであり、現在はThe PHP GroupによりPHPと共に開発されている。Zend Engineは1つのプロセスが1つのインタプリタのコンテキストを持つように設計されていて、単独ではマルチスレッドを用いた処理をサポートしていない。PHPはそのソースコードのほとんどがPHP Licenseの下でリリースされるが、Zend EngineのコードについてはZend Engine Licenseが適用される。 実際のPHPの構成はZend Engineに加え、PHPの組み込み関数の実装、Webサーバや標準入出力とスクリプティングエンジンの間を仲介するSAPI (Server API) レイヤ、マルチスレッドで動くWebサーバのモジュールとして利用される場合にグローバル変数のセマンティクスを提供するTSRM (Thread Safe Resource Manager)、プラットフォーム間での入出力機構やAPIの差異を吸収するStreamsレイヤを含む。一部の組み込み関数はプラットフォームごとに挙動が違うため、スクリプトによっては移植作業が必要になる場合がある。
※この「処理系」の解説は、「PHP (プログラミング言語)」の解説の一部です。
「処理系」を含む「PHP (プログラミング言語)」の記事については、「PHP (プログラミング言語)」の概要を参照ください。
- 処理系のページへのリンク