言語の概要
プログラミング言語とは、コンピュータに対する一連の動作の指示を記述するための人工言語のことです。
コンピュータは、機械語と呼ばれる中央処理装置が直接解釈できる命令を実行することによって動作するものですが、人間にとって機械語を扱うことは非常に難しいため、機械語の代わりにプログラミング言語を用いることによって、より人間にとって扱いやすい表現でコンピュータに指示を与えることができるようになります。
プログラミング言語で記述されたこの一連の指示はプログラムと呼ばれ、それを記述することはプログラミングと呼ばれます。
言語の分類
プログラミング言語は様々な視点から分類することができます。
実行形態による分類
プログラムがどのように実行されるかという観点(実行形態)から、プログラミング言語を以下のように分類することができます。
- インタプリタ言語
- コンパイル言語
インタプリタ言語
インタプリタ言語はプログラムの実行時にプログラムのソースコードを1行ずつ逐一翻訳しながら進めていきます。例としては、以下の言語があげられます。
- Basic
- Javascript
- Perl
- Phyton
- Ruby
コンパイル言語
インタプリタ言語とは逆に、実行する前にすべてのソースコードを機械語に翻訳してしまい実行ファイルと呼ばれる形式に変換します。例としては、以下の言語があげられます。
- Cobol
- Fortran
- C++
- Pascal
- Java
- C#
- VB.net
判断基準について
JavaやC#、VB.netなどの.net系言語はプログラムが機械語にコンパイルされないが、JAVA仮想マシンの上に動作するバイト・コードや、.net frameworkランタイムの上に実行するILなどの中間コードを予め変換しておく必要があり、実行環境にはソースコードが配布されないため、コンパイル言語に分類することとします。
一方、Javascriptなどのスクリプト言語は、パフォーマンス最適化を求めるため、殆どのインタプリタが内部的にも中間コードに変換しておいてから実行することになりますが、ソースコードが稼動環境に配布しないといけないことと、中間コードがjava バイトコードのように仕様を標準化されておらず、各インタプリタの内部実装に依存することから、コンパイル言語に分類されません。
パラダイムによる分類
プログラムをどのように構成するかという観点(パラダイム)から、プログラミング言語を以下のように分類することができます。
- 手続き型言語
- オブジェクト指向言語
- 手続き+オブジェクト指向の言語
- 関数型言語
手続き型言語
手続き型プログラミングは、プログラムをデータ構造とルーチンの集合に分割し、「手続き呼び出し」の概念に基づきプログラミングを行います。「手続き」は実行すべき一連の計算ステップを持つもの、プロシージャ、ルーチン、サブルーチン、メソッド、関数(数学の関数とは異なるが、関数型言語における関数とほぼ同義)など様々な呼称があります。手続きはプログラム実行中の任意の時点で呼び出すことができ、他の手続きからの呼び出しも、自分自身からの呼び出し(再帰呼び出し)も含まれます。
例としては、下以の言語があげられます。
- basic
- C
- pascal
オブジェクト指向言語
オブジェクト指向プログラミングは、プログラムをオブジェクト(クラス)に分割し、オブジェクト間の「メソッド呼び出し」の概念に基づきプログラミングを行います。例としては、以下の言語があげられます。
- Java
- C#
- Javascript…
手続き+オブジェクト指向の言語
手続きプログラミングとオブジェクト指向プログラミングと両方をサポートしている言語です。例としては、以下の言語があげられます。
- c++
- Delphi(Object Pascal)
- VB
関数型言語
関数型言語とはすべての計算や処理などを関数の定義の組み合わせとして記述していくタイプのプログラミング言語です。主に科学計算や人工知能の領域に利用されており、業務アプリケーション開発に使われることはほとんどありません。
例としては、以下の言語があげられます。
- LISP
- F#
構文による分類
プログラムの構文という観点から、プログラミング言語を以下のように分類することができます。
- COBOL構文式
- ALGOL構文式
COBOL構文式
下記のように英語の文章のように記述できるのが特徴です。
代入文 | move value to variable. |
算術式 | add value1 to value2 giving variable subtract value2 from value1 giving variable multiply value1 by value2 giving variable divide value1 by value2 giving variable |
サブルーチンの呼び出し | call subroutine using para1 param2 returning result |
ALGOL構文式
BNF記号を利用します。
代入文 | variable=value. |
算術式 | variable = value1 + value2 variable = value1 - value2 variable = value1 * value2 variable = value1/ value2 |
サブルーチンの呼び出し | result = subroutine(para1,para2); |
※COBOL等の言語の一部は新しいバージョンから+,-,*,/,=を含む構文もサポートされるようになりました。
用途による分類
用途という観点から、プログラミング言語を以下のように分類することもできますが、判断の基準は難しいところがあります。
- 汎用化言語
- ドメイン特化型言語
- Add-on言語
汎用化言語
より汎用的に使われることを目的として設計された言語のことです。例としては、以下のの言語があげられます。
- C
- C++
- Java
ドメイン特化型言語
特定の分野で使われることに目的を特化した言語のことです。例としては、以下のの言語があげられます。
- Fortran
科学技術計算用 - Cobol
事務処理用 - Php
WEBサイト作成
Add-on言語
特定のソフトウェアやプラットフォームの機能をカスタマイズや拡張するためのAdd-onを開発するための言語のことです。例としては、以下の言語があげられます。
- PL-SQL
Oracle DBMS - Transact-SQL
Sybase/SQLServer DBMS - ABAP
SAP ERP
言語の歴史
以下の表にて言語の主な歴史を示します。
キーワード | 年度 | 言語 | 開発者 | 特徴&言語歴史への影響 |
---|---|---|---|---|
機械語・アセンブラ言語- | - | - | - | - |
高級言語 | 1957年 | FORTRAN | IBM社 | 高級言語としては最初のものである、現在も科学技術計算など大規模な計算を必要とする分野で使用されている |
1958年 | ALGOL58 | - | 構造化プログラミングの考え方を取り入れた最初の言語である、あまり普及しなかったが、後に登場するPascalやC言語など多くの言語に影響を与えた | |
1960年 | Cobol | J.Sammet | 初期の高級言語の1つであり、事務処理言語として広く普及した。現在でも企業の事務処理系システムで利用されている | |
1960年 | LISP | MIT | ボーランド記法を使用した独特の文法を持つ言語であり、「純粋ではない」が最古の関数型言語でもある。現在でも人工知能やEmacsのマクロなどに使用されている | |
1964年 | Basic | ダートマス大学 | その後、1970年代にマイクロソフトがMS BASICを発表し、8bitマシン時代 (1970年代後半-1980年代前半)の中心的な言語となった | |
構造化言語 | 1966年 | BCPL | ケンブリッジ大学 | 現在のコンパイラ技術の基礎を確立し、後にB言語に影響を与え、C言語へと発展した |
1967年 | Simula | ノルウェー計算センタ | オブジェクトの概念をもつ言語としては最古の言語である | |
1969年 | Pascal | - | 中期の代表的な構造化言語の1つ。その後、教育用言語として1980年代頃から広く普及した。1995年に登場するDelphiもPascalの血を引く言語である | |
1972年 | C | デニス・リッチー | プログラム開発の中心的な言語である | |
1979年 | Ada | アメリカ国防総省 | ジェネリックプログラミング(総称、汎化)、例外処理など先進的な考え方が初めに取り入れられた | |
オブジェクト指向言語 | 1980年 | Smalltalk | - | オブジェクト指向を導入した黎明期の言語の1つであり、「オブジェクト指向」という言葉を最初に定義した言語でもある。後のオブジェクト指向型言語に多大な影響を与えた |
1983年 | C++ | - | C言語にオブジェクト指向を導入した、C言語と同様に開発の中心的な言語になった | |
1987年 | Perl | ラリー・ウォール | 主にCGIなどの用途で広く普及している | |
1991年 | VB | Microsoft社 | Windows専用のGUIアプリケーション開発言語 | |
1995年 | Delphi | ボーランド社 | Pascalの血をひくWindows専用のGUIアプリケーション開発言語 | |
インタプリタ言語・仮想マシン | 1995年 | Java | サン・マイクロシステムズ社 | 本格的なオブジェクト指向言語の1つ。構文はC言語とかなり類似しているが、内容はまったく新世代の言語である、JavaVMという仮想マシン環境で動作 |
1995年 | Ruby | まつもとゆきひろ | Perlのように使えるスクリプト言語を、純粋なオブジェクト指向言語として設計 | |
1995年 | PHP | ラスマス・ラードフ | Webサーバ側スクリプト言語として現在までも広く使われている | |
1997年 | JavaScript | - | 標準仕様としてECMAScriptが標準化された | |
2002年 | C# | Microsoft社 | CLRという仮想マシン環境で動くオブジェクト指向言語。Javaの影響を強く受けており、C++とJavaの中間的な特徴をもつ | |
2009年 | Go | Google社 | 並列コンピューティングに配慮したコンパイラ言語。依存性の注入を言語仕様にとりこみ、例外処理やクラスの継承、アサーション、オーバーロードといった機能を排除している | |
2011 | Dart | Google社 | Webブラウザ組込みのスクリプト言語であるJavaScriptの代替となることを目的に作られた。 2014年ECMA-408と言う標準規格に登録 | |
2014 | Swift | Apple社 | Apple社のiOSおよびOS Xのためのプログラミング言語。従来から用いられていたObjective-CやObjective-C++、C言語と共存することが意図されている |