「方言 (プログラミング言語)」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m lk
編集の要約なし
1行目: 1行目:
{{出典の明記| date = 2021年1月}}
[[プログラミング言語]]における'''方言'''(ほうげん)は、[[自然言語]]の[[方言]]と同様に基本的な文法や機能を共通しながら細かい振る舞いに差違の見られる類縁言語の事をいう。ただし、外部[[ライブラリ]]により機能の拡張を行なう場合は、他の方言でも同様に拡張が可能なので方言とは言われない。多くの場合ライブラリは複数の方言に対応し、差違を吸収できるように作られている。また、[[Pascal]]、[[Modula]]、[[Modula-2]]、あるいは[[C言語]]と[[C++]]のように進化の過程で言語的な能力を変化させたものはたとえ類縁関係にあっても方言とは言われない。


[[プログラミング言語]]における'''方言'''(ほうげん)は、[[自然言語]]の[[方言]]と同様に基本的な文法や機能を共通しながら細かい振る舞いに差違の見られる類縁言語の事をいう。ただし、外部[[ライブラリ]]により機能の拡張を行なう場合は、他の方言でも同様に拡張が可能なので方言とは言われない。多くの場合ライブラリは複数の方言に対応し、差違を吸収できるように作られている。また、[[Pascal]]、[[Modula]]、[[Modula-2]]、あるいは[[C言語]]と[[C++]]のように進化の過程で言語的な能力を変化させたものはたとえ類縁関係にあっても方言とは言われない。
プログラミング言語においては、[[ソースコード]]の互換性が方言の性質を決定する。逆に同じソースコードを同じプラットフォームにおいて同じ意味で解釈しても、吐き出される[[オブジェクトファイル|実行コード]]は[[処理系]]ごとに異なっている事が普通である。なぜならコードは[[コンパイラ最適化]]などの段階を経るため、利用者にとって「同じである」と判断される動作さえ行えば、実際の内部構造は問わないからである。言語仕様によっては、これら最適化などの段階についても仕様のうちに内包して制御する。

プログラミング言語においては、[[ソースコード]]の互換性が方言の性質を決定する。逆に同じソースコードを同じプラットフォームにおいて同じ意味で解釈しても、出される[[オブジェクトファイル|実行コード]]は[[処理系]]ごとに異なっている事が普通である。なぜならコードは[[コンパイラ最適化]]などの段階を経るため、利用者にとって「同じである」と判断される動作さえ行えば、実際の内部構造は問わないからである。言語仕様によっては、これら最適化などの段階についても仕様のうちに内包して制御する。


最も頻繁に見られる方言の例は、統一仕様をもった言語に対して複数の[[コンパイラ]]、[[インタプリタ]]が独自の拡張仕様を盛り込むケースである。[[BASIC]]はこの種の典型で、一応は規格が存在するのだが、言語間での互換性はほとんどないに等しい状態となった。近年{{いつ|date=2018年10月20日 (土) 10:49 (UTC)}}では[[JavaScript]]などもブラウザ間の互換性が問題となっている。
最も頻繁に見られる方言の例は、統一仕様をもった言語に対して複数の[[コンパイラ]]、[[インタプリタ]]が独自の拡張仕様を盛り込むケースである。[[BASIC]]はこの種の典型で、一応は規格が存在するのだが、言語間での互換性はほとんどないに等しい状態となった。近年{{いつ|date=2018年10月20日 (土) 10:49 (UTC)}}では[[JavaScript]]などもブラウザ間の互換性が問題となっている。

2021年1月20日 (水) 21:53時点における版

プログラミング言語における方言(ほうげん)は、自然言語方言と同様に、基本的な文法や機能を共通しながら細かい振る舞いに差違の見られる類縁言語の事をいう。ただし、外部ライブラリにより機能の拡張を行なう場合は、他の方言でも同様に拡張が可能なので方言とは言われない。多くの場合ライブラリは複数の方言に対応し、差違を吸収できるように作られている。また、PascalModulaModula-2、あるいはC言語C++のように進化の過程で言語的な能力を変化させたものはたとえ類縁関係にあっても方言とは言われない。

プログラミング言語においては、ソースコードの互換性が方言の性質を決定する。逆に同じソースコードを同じプラットフォームにおいて同じ意味で解釈しても、出力される実行コード処理系ごとに異なっている事が普通である。なぜならコードはコンパイラ最適化などの段階を経るため、利用者にとって「同じである」と判断される動作さえ行えば、実際の内部構造は問わないからである。言語仕様によっては、これら最適化などの段階についても仕様のうちに内包して制御する。

最も頻繁に見られる方言の例は、統一仕様をもった言語に対して複数のコンパイラインタプリタが独自の拡張仕様を盛り込むケースである。BASICはこの種の典型で、一応は規格が存在するのだが、言語間での互換性はほとんどないに等しい状態となった。近年[いつ?]ではJavaScriptなどもブラウザ間の互換性が問題となっている。

逆に、特に定まった規格がなく、処理系=仕様という形態から方言が生じたケースも多い。LISPS式表現とcar, cdr, eval, condといった基本的な語彙があればほとんど自由に機能拡張ができるため、Common Lispが策定されるまでは無数の方言が乱立する状態にあった。現在普通に使われる処理系はCommon Lisp系、Scheme系、GNU EmacsのEmacs Lisp程度で以前よりは安定した状態にあるが、それでも実装毎の差違がかなり見られる。[要出典]

CもLISPに近い経緯をたどった言語で、かつては処理系毎にかなりの実装差が見られた。しかしANSI C規格が出現した事で非互換性の問題はほぼ解消し、方言と呼べるような違いは初期のK&RスタイルとANSIスタイル、GCC拡張機能の差違程度となっている。