プログラミング言語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/07/10 01:13 UTC 版)
設計と実装
コンピュータ・プログラミング言語の設計は「言語仕様」として示され、実装は「言語処理系」と呼ばれる。以下はそれらについての概観である。
仕様
前述のようにプログラミング言語は構文と意味から成るから、仕様についても、構文仕様と意味仕様がある。
構文仕様
構文仕様は一般にバッカス・ナウア記法などによって形式的に示される。
意味仕様
意味論の仕様は、自然言語などで記述されることが多いが、形式的に与えられている言語もある。
形式意味論(プログラム意味論の記事も参照)で意味論を記述した例として Standard ML[24] や Scheme[25] がある。
その他
他に、以下のようなスタイルで仕様が与えられている言語もある。
- その言語の処理系のリファレンス実装やモデル実装として示されているもの
- その言語のコンパイラ(FORTRAN)
- その言語のインタプリタ(Ruby(cruby、ただしRubyの標準化以前の場合))
- 対象言語自身で書かれることもある(例えば、LISP や Prolog や ANSI REXX[26])en:Meta-circular evaluator も参照のこと。
処理系
プログラミング言語の実装は、プログラミング言語処理系と呼ばれる。コンパイラは、ソースコードなどの入力を中間表現などの、より解釈実行しやすい表現に変換する処理系である。また、インタプリタは、入力されたプログラムを解釈実行する処理系である(ハードウェアのプロセッサは、機械語を解釈実行するインタプリタである、と見ることができる)。
コンパイラとインタプリタの関係は、理論的には二村射影により定式化されている。
なお、「大きく分けて2つの方法がある。コンパイラとインタプリタである。一般にある言語をコンパイラとインタプリタの両方で実装することが可能である。」などといったように(従来書かれた通俗的解説書などには大変多いが)理解していると、Javaなど近年の多くの言語処理系のスタイルが全くわからない、ということになる。
(機械語にまで変換するもののみを指してコンパイラと呼びたがる向きが一部にあり、その立場にもある程度は理もあるのだが、そうするとJavaの一般的な実装を指す用語が無くなる)
「コンパイラの出力したものをインタプリタで実行する方式は、コンパイラとインタプリタの区別が曖昧な場合もある。」などという変な説明をする者もいるが、前述したように、そもそも間違った2分法で考えているから、そのような変な考え方になるのである。
一般に、機械語に変換したもの(実行ファイル)を直接ハードウェアで実行する方が、インタプリタで実行するよりもずっと高速である。インタプリタでの実行を改善する技法として、実行時コンパイラなどの動的コンパイル手法がある。
注釈
- ^ IBMは PL/I をリリースしたとき、やや野心的にマニュアルを The universal programming language PL/I (IBM Library; 1966) と名づけている。このタイトルはIBMが目標としていた無制限のサブセット化機能を反映している「PL/I は特定の応用に必要な部分を抜き出し、サブセットを分離可能なように設計されている」 (“Encyclopaedia of Mathematics » P » PL/I”. SpringerLink. 2006年6月29日閲覧。). AdaとUNCOLも同様の初期目標を持っていた。
- ^ CPUの命令コードというのは、本当のCPUレベルではたとえば「00101011」のようにただの2進数の羅列であり、人間には意味不明である。
- ^ 数文字のアルファベットや数字を組み合わせて、CPUに対する命令やCPUが操作すべきレジスタなどを表記したもの。
- ^ なおチューリング完全な言語ならば、同じアルゴリズム群を表現可能である。
- ^ Benjamin C. Pierce は次のように書いている。
- ". . . the lambda calculus has seen widespread use in the specification of programming language features, in language design and implementation, and in the study of type systems."(訳:ラムダ計算はプログラミング言語の仕様記述、言語設計と実装、型システムの研究に広く使われている)
- ^ 自然言語では Colorless green ideas sleep furiously. という例文がある。
- ^ その言語の設計次第である。構文的に正しければ必ず整合した意味を持つような設計というものもありうる。
- ^ たとえば変数の宣言などでは、その名前の直前ないし直後といったことが多い。ただしC言語では「void (*signal(int sig, void (*func)(int)))(int);」などといったように、いったいどこにあるのが名前なのか型なのか、全くわからないことになることがある。
- ^ 1960年代、JISでは「プログラム言語」の訳語が用いられた(JIS C 6201-1967「電子計算機プログラム言語FORTRAN」)。このためプログラム言語としている例もJISをはじめとして広く見られるが、英フレーズ programming language に当てる語として必ずしも適切とは言えない。[要出典]
出典
- ^ ISO 5127—Information and documentation—Vocabulary, clause 01.05.10 で、プログラミング言語は「プログラムを記述するための人工言語」と定義されている。
- ^ Lexico, definition of programming language. A system of precisely defined symbols and rules devised for writing computer programs.
- ^ MacLennan, Bruce J. (1987年). Principles of Programming Languages. Oxford University Press. p. 1. ISBN 0-19-511306-3
- ^ Frederick P. Brooks, Jr.: The Mythical Man-Month, Addison-Wesley, 1982, pp. 93-94
- ^ The Encyclopedia of Computer Languages Archived 2011年2月20日, at the Wayback Machine. (Murdoch University、オーストラリア)
- ^ 英: interpreted language
- ^ 英: compiled language
- ^ 英: pure compiled language
- ^ [1]
- ^ [2]
- ^ [3]
- ^ 英: structured programming language
- ^ a b O'Reilly Media. “History of programming languages”. 2006年10月5日閲覧。
- ^ Frank da Cruz. IBM Punch Cards Columbia University Computing History.
- ^ Richard L. Wexelblat: History of Programming Languages, Academic Press, 1981, chapter XIV.
- ^ François Labelle. “Programming Language Usage Graph”. Sourceforge. 2006年6月21日閲覧。. Sorceforge でのプロジェクト群で使われている言語の統計をとった結果である。C言語はよく使われているが、2006年には Java に抜かれている。ただし、C++を含めると一番多く使われていることになる。
- ^ Hayes, Brian (2006年). “The Semicolon Wars”. American Scientist 94 (4): pp. 299-303.
- ^ Dijkstra, Edsger W. (March 1968). “Go To Statement Considered Harmful”. Communications of the ACM 11 (3): 147–148 2006年6月29日閲覧。.
- ^ Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (December 1994). "KLIC: A Portable Implementation of KL1" Proc. of FGCS '94, ICOT Tokyo, December 1994. 第五世代コンピュータ・プロジェクト・アーカイブ
- ^ Jim Bender (2004年3月15日). “Mini-Bibliography on Modules for Functional Programming Languages”. ReadScheme.org. 2006年9月27日閲覧。
- ^ a b c d e Andrew Cooke. “An Introduction to Programming Languages”. 2006年6月30日閲覧。
- ^ 英: statically typed language
- ^ 英: dynamically typed language
- ^ Milner, R.; M. Tofte, R. Harper and D. MacQueen. (1997年). The Definition of Standard ML (Revised). MIT Press. ISBN 0-262-63181-4
- ^ Kelsey, Richard; William Clinger and Jonathan Rees (1998年2月). “Section 7.2 Formal semantics”. Revised5 Report on the Algorithmic Language Scheme. 2006年6月9日閲覧。
- ^ ANSI — Programming Language Rexx, X3-274.1996
- ^ Survey of Job advertisements mentioning a given language
- ^ Counting programming languages by book sales Archived 2008年5月17日, at the Wayback Machine.
- ^ Bieman, J.M.; Murdock, V., Finding code on the World Wide Web: a preliminary investigation, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation, 2001
- ^ Dijkstra, Edsger W. On the foolishness of "natural language programming." EWD667.
- ^ Perlis, Alan, Epigrams on Programming. SIGPLAN Notices Vol. 17, No. 9, September 1982, pp. 7-13
固有名詞の分類
学問 |
森林科学 軍事社会学 プログラミング言語 音響心理学 割り込み |
コンピュータ言語 |
QVT 変換言語 プログラミング言語 Music Macro Language バッカス・ナウア記法 |
- プログラミング言語のページへのリンク