プログラミング言語
[Wikipedia|▼Menu]
C言語で書かれた単純なコンピュータープログラムのソースコードグレーの行は、人間のためにプログラムの説明をする自然言語で書かれたコメント。このプログラムをコンパイルして実行すると、「Hello, world!」という文字が出力される。

プログラミング言語(プログラミングげんご、英語: programming language)とは、プログラムを記述するための人工言語[1]コンピュータプログラムを書くために考案された、正確に定義された記号規則のしくみ[2]。以前は、しばしばプログラム言語と表記された。
概要

プログラミング言語は、情報を組織し処理するタスクについての理解を容易にし、アルゴリズムを正確に表現することができる。特に、チューリング完全であることが特徴である[3]

言語仕様とプログラムとその入力データの組合せで、そのプログラムを実行したときの結果(外部から観測される振る舞い)が完全に指定できなければならない。

プログラミング言語は構文規則(自然言語に関する言語学で言う統語論の規則に類似したもの)と意味規則(自然言語の意味論に類似した規則)で定義される。形式的ないし非形式的(自然言語による)な仕様が(構文規則は形式的で、意味規則はそうでない、というものが多い)実装とは独立した文書で示される言語もあれば、実装のみの言語もある。

多くの言語は、新たなニーズを満たすべく設計され、他の言語と組み合わされ、最終的に使われなくなる。あらゆる用途に使える万能言語を設計しようという試みはいくつかあったが、そういう意味で成功した言語は存在しない[注釈 1]

プログラミング言語の開発の大きな流れに共通する傾向として、より高いレベルの抽象化によってより高い問題解決能力を得ようとしてきた、ということが指摘されることがある。初期のプログラミング言語はコンピュータのハードウェアのレベルと極めて近かった。新たなプログラミング言語が開発される度に機能が追加され、プログラマはハードウェアの命令からより遠い形でアイデアを表現できるようになっていった。プログラミングをハードウェアから分離することで、プログラマの生産性は向上する[4]

毎年のように新たなプログラミング言語が作り出されている。2008年2月時点で、「コンピュータ言語辞典[5]」には8,152種のプログラミング言語が記載されていた。

過去のプログラミング言語のなかの欠点と見なされた部分を解消するために、新たなプログラミング言語が構想され、作られてきた歴史がある。また多様なプログラミング言語が生み出される背景には、さまざまな事情があり、ハードウェアが時代とともに変化してきたことや、プログラミング言語というテクノロジーやコンピュータサイエンスの発展も影響しており、下のような諸事情もある。

プログラムと言っても、個人が自分だけのために趣味で書く数行から数十行程度の短いプログラム(やスクリプト)から、数百人のプログラマが協働して企業の大規模なシステムのために書く長大なプログラムまで、様々なプログラムがある。

プログラミング言語の記述に 簡潔さを求め、可読性が高いことを求め、バグが入り込みにくい記述を好むプログラマの方が多く、世の中では一般的である(特に、業務として、ミスの少ないプロの仕事としてプログラミングを行わなければいけない職業的プログラマで多い)一方で、ごちゃごちゃして難読で、一名で書くならともかく複数名でプログラムを書くと高頻度で誤読やバグを招きがちな記述でもあまり気にしなかったり面白がる趣味的なプログラマも一部にいる。

プログラムが搭載されるシステムも多様で、マイクロコントローラ組み込みシステムから汎用デスクトップPC、GPUそしてスーパーコンピュータまで様々あり、それぞれのシステムのハードウェアの特性や制約に合ったプログラムやプログラミング言語がある。

もともとプログラミング言語はもっぱら大学のコンピュータサイエンスの研究室や大手企業の研究所などの奥深くばかりで開発されていたのだが、ここ数十年では個人が趣味的に新しいプログラミング言語を構想しそのコンパイラを自分で書くための書籍なども時折出版されるようになり、つまり世の中の普通の人が新たなプログラミング言語を独自に作成するためのノウハウも広まってハードルが次第に下がってきている。

ウィキペディアに記事が掲載されているプログラミング言語を知りたい場合はプログラミング言語一覧を参照のこと。
分類・種類

プログラミング言語の分類法は多数ある。

ひとつの分類法としては(そして計算機科学の教科書や情報処理技術者の教科書などで、まっさきに一種の定番のように挙げてある分類方法としては)、機械寄り(CPU寄り)か人間(の思考)寄りか、で分類する方法であり、低水準言語 / 高水準言語 と分類する方法である。(" 低級言語 / 高級言語 " とも)低水準言語の例としては、機械語の「命令コード」[注釈 2]と1対1に対応する「命令語」[注釈 3]を用いてプログラミングを行うアセンブリ言語がある。(機械語も低水準言語のひとつに数える場合もある。)対比される高水準言語の例としてはPerlVisual BasicLISPPHPJavaPythonなどを挙げることができる。(なお、境界はやや曖昧で、C言語はかつては「高水準言語」と見なされていたが、その後それよりもレベルの高い高水準言語が多数登場したので、今日ではメモリ管理もしないC言語は「低水準言語」に分類されることもある。)

他の分類法としては、実行方法によってプログラミング言語を分類する方法もあり、インタープリタ方式言語[6] / コンパイラ方式言語(コンパイル方式言語[7])と分類する方法である。インタープリタ方式言語の例としてはPHPやRubyを挙げることができる。コンパイラ方式言語の例としてはC言語、C++、ErlangHaskellRustGo、FORTRAN、COBOLなどを挙げることができる。なお言語によってはインタープリタ方式で実行でき、かつコンパイル方式で実行することができるものもある。そして「一応、どちらの方法でも実行できるが、基本はコンパイル方式」などという場合もあるので、やや分類が曖昧になる場合がある。コンパイル方式でしか実行できない言語をわざわざ指さなければならない場合に「純コンパイル方式言語[8]」などと分類する人もいる[9]。なおJavaはバイトコードにコンパイルをしてから実行するので、一応「コンパイル方式」に分類することも可能ではある言語だが、実行時コンパイラ(JIT)Java仮想マシンを使うので、「Javaは、コンパイル方式とインタープリタ方式の中間的な方式」としばしば指摘され、曖昧な位置づけである。

かつては人間側の用途で分類する方法もしばしば用いられたことがある。たとえば、汎用プログラミング言語 / 事務計算用プログラミング言語/ 科学技術計算用プログラミング言語 などと分類する方法である。1970年代-1980年代などは「事務計算用プログラミング言語の例はCOBOLで、科学技術計算用プログラミング言語の例はFORTRAN」などと書かれたが、近年ではそのような分類はあまりされなくなった。なお「汎用プログラミング言語」に分類されるのはJava、C#、Python[10]、Visual Basic、Rubyなどである。

手続き型言語[11]かそうでないかで、手続き型言語 / 非手続き型言語 と分類する方法もある。手続き型言語の例としてはFORTRAN、ALGOL、C言語、COBOL、BASICPascalなどを挙げることができる。

オブジェクト指向プログラミングに適したしくみを備えているか否かで、オブジェクト指向言語 / 非オブジェクト指向言語 と分類されることもある。

構造化プログラミングに適した仕様になっているか否かで判断して、適したものだけを構造化プログラミング言語[12]と分類する方法もある。

スレッドを複数個生成・管理できるか否か、で並行言語 / 非並行言語 と分類する方法もある。

なお1950年代(や1960年代)計算理論チョムスキー階層という構想や理論が発表された時代には、計算表現能力に基づいてコンピュータの言語を、抽象的に、「タイプ0 / タイプ1 / タイプ2 / タイプ3」などに分類しようとしていたこともあった。ただし近年ではそのような分類法は滅多に持ち出されない。世の中のプログラミング言語のユーザーたちや言語開発者たちの関心は、すでに別のレベルに移っているからである[注釈 4]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:97 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef