プログラミング言語とは、コンピュータに対する一連の動作の指示を記述するための人工言語のことです。プログラミング言語で記述されたこの一連の指示はプログラムと呼ばれ、それを記述することはプログラミングと呼ばれます。
コンピュータは、機械語と呼ばれる中央処理装置が直接解釈できる命令を実行することによって動作するものですが、人間にとって機械語を扱うことは非常に難しいため、機械語の代わりにプログラミング言語を用いることによって、より人間にとって扱いやすい表現でコンピュータに指示を与えることができるようになります。
プログラミング言語は様々な視点から分類することができます。
実行形態による分類
プログラムがどのように実行されるかという観点(実行形態)から、プログラミング言語を以下のように分類することができます。
- インタプリタ言語
- コンパイル言語
インタプリタ言語
インタプリタ言語はプログラムの実行時にプログラムのソースコードを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
s ubtract 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