プログラミング言語
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/07/10 01:13 UTC 版)
言語利用状況の計測
どのプログラミング言語が最もよく使われているかを判断することは難しい。また、利用という意味も文脈によって異なる。プログラマの工数、コードの行数、CPU時間[要出典]などが尺度として考えられる。ある言語は特定分野のアプリケーションだけでよく使われているということもある。例えばCOBOLは企業のデータセンター(メインフレームであることが多い)では今でも使われているし、FORTRANは科学技術計算でよく使われ、C言語は組み込みシステムやオペレーティングシステムで使われている。
以下のように言語利用状況の尺度は様々であり、どれを選択しても一種のバイアスがかかっていると考えた方がよい。
- プログラマなどの求人広告で言語が言及されている回数[27]
- 言語に関する書籍(入門書など)の販売部数[28]
- 言語ごとの既存のコード行数の推計。公開調査で見逃しやすい言語は少なく推定される傾向がある。[29]
- 検索エンジンが見つけた各言語への参照の回数
実際の指標の例
プログラミング言語と自然言語
プログラミング言語は人間同士の会話と比較して、正確性と完全性の要求性が非常に高いという特徴がある。自然言語で人間同士が対話する場合、スペルミスや文法的なエラーがあっても相手は状況から適当に補正し、正確な内容を把握する。しかしコンピュータは指示が曖昧では動作せず、プログラマがコードに込めた意図を理解させることはできない。
プログラミングにおけるプログラミング言語の必要性を排除する方法として自然言語によるプログラムが構想されたり提案されることもあるが、その方向性は実用化には達しておらず、議論が続いている。エドガー・ダイクストラは形式言語の使用によって意味のない命令を防ぐという立場で、自然言語によるプログラミングを批判していた[30]。アラン・パリスも同様の立場であった[31]。
このあたりの歴史的に錯綜した議論は、結局のところ「コンピュータを活用するにはプログラミングが必要であり、プログラミングはプログラミング言語で行われる」というある種の教条(ドグマ)が、次の2つの事象に分解されることで無意味な議論になった。すなわち「コンピュータをほどほどに活用する程度のことならば、各種アプリケーションソフトウェアや自然言語認識や自然言語処理技術の活用など(スマートスピーカーなど)により、利用者が自分でプログラミングすることは必ずしも必要ではなくなった」ということと「コンピュータのより徹底した活用、具体的にはそういった自然言語認識や自然言語処理のシステムそのものを作るには、プログラミングが必要ということは全く相変わらずであり、プログラミング言語の重要性は増えこそすれ、減りはしない」ということである。
- 自然言語との違い
プログラミング言語は、もともと人間がコンピュータに命令を伝えその実行方法を指示するために作られたものであり、コンピュータが曖昧さなく解析できるように設計されている。多くの場合構文上の間違いは許されず、人間はプログラミング言語の文法に厳密にしたがった文を入力しなければならない。
これに対して、一般に自然言語の文法規則はプログラミング言語にくらべてはるかに複雑であり、例外も多い。ただしこれは規則が一般にいいかげんであったり、曖昧であるということではない。一般に自然言語の規則は奥が深く、驚くほどの非合理性に裏打ちされていることもあれば、驚くほどの合理性に裏打ちされていることもある。驚くほどの非合理性でも合理性でもないものに裏打ちされていることもあれば、驚くほどの裏打ちの無さがあることもある。
また、自然言語の意味は、その文脈(コンテキスト)によって定まる部分も多い。これに対して、プログラミング言語は、コンピュータによって扱いやすいように、文脈によって意味が変わることができるだけないように設計されているが、その文脈によって定まる部分がある場合も無くはない。たいていの言語にいくつかはある。
自然言語は、誤用や流行などにより長い時間をかけ、たくさんの人間の利用により、意図せざる形で変化していく。しかし、プログラミング言語の規則は、言語設計者の意図と作業によってのみ、変更される。実際には言語設計者が「たくさんの人間」である場合もあり(仕様が簡単な言語であれば多くの実装者がいることも多く、そういう場合は個々の実装ごとのその仕様があるとも言える)、長い時間をかけ、自然言語と全く同様にたくさんの人間の利用により変化してきたプログラミング言語もある(Lispなど)。また、プログラミング言語にも同様に流行があり、もともとの言語仕様では規定が無かったような一種の「誤用」に、後から仕様が定められる、といったことも必ずしも珍しくはない。
人間がふだん使っている日本語などの自然言語を使ってコンピュータに指示することができるのが理想ではある、と空想する者もいる。しかし、自然言語はあまりにも複雑で曖昧で変則的なので、それを機械語にコンパイルできるようなプログラムを作成することはとても難しい(コンパイルできるできないの問題ではなく、そもそもその意味が「複雑で曖昧で変則的」であること自体が問題なのだが、それを理解できない者が冒頭のように空想するのである)。そのような研究も進められているが、未だに汎用で実用になるプログラムは作成されたことがない。
そこで、自然言語よりも制限が強く、単純で厳密で規則的な人工言語を作って代用する。これがプログラミング言語である。プログラミング言語は自然言語よりもいくらか人間には扱いづらいが、機械語よりは遥かに親しみやすく、人間の指示の手間を軽減している。ちなみにコンピュータ向けの形式性と人間向けの柔軟性を兼ね備えるロジバンなど、本来の開発目的が違えど潜在的に一つのプログラミング言語として機能しうるものもある。
大部分のプログラミング言語は、基本的には概ね文脈自由文法に沿っているが、プログラミング言語における文法的な制限は必ずしも全て文脈自由文法で表現できるとは限らず、文脈自由文法より制限されていることもあれば文脈自由文法より拡張されていることもあり、多くの場合は文脈自由文法には完全には沿っていない。
なおプログラミングへの応用も想定して設計されたロジバンのように、人間の言語とプログラミング言語の中間に位置するものがある。
日本語における名称
古い規格ではあるが日本産業規格の JIS X 3000 シリーズの規格名称では、全て「プログラム言語」になっている(例: JIS X 3001 プログラム言語 Fortran、JIS X 3014 プログラム言語 C++)ため、それに合わせてプログラム言語と表記されることもあるが、英語では programming language であるため、それに合わせればプログラミング言語となり、近年ではプログラミング言語と表記されることが多い。[注釈 9]
なお言語名が「C」や「D」のように1文字の名称の場合、そのままの表記では文章中に埋没してしまい判別しづらいなどの不都合がある場合もあるので、たとえ登録されている正式名称があくまで「C」などと一文字であっても、通常の文章中で表記する場合は、技術書なども含めて、しばしば「C言語」などと文字の後ろに「言語」を添えて表記される。
注釈
- ^ 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 バッカス・ナウア記法 |
- プログラミング言語のページへのリンク