言語の概要


 

プログラミング言語とは、コンピュータに対する一連の動作の指示を記述するための人工言語のことです。

コンピュータは、機械語と呼ばれる中央処理装置が直接解釈できる命令を実行することによって動作するものですが、人間にとって機械語を扱うことは非常に難しいため、機械語の代わりにプログラミング言語を用いることによって、より人間にとって扱いやすい表現でコンピュータに指示を与えることができるようになります。

プログラミング言語で記述されたこの一連の指示はプログラムと呼ばれ、それを記述することはプログラミングと呼ばれます。

言語の分類

プログラミング言語は様々な視点から分類することができます。

実行形態による分類

プログラムがどのように実行されるかという観点(実行形態)から、プログラミング言語を以下のように分類することができます。

  • インタプリタ言語
  • コンパイル言語

インタプリタ言語

インタプリタ言語はプログラムの実行時にプログラムのソースコードを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年FORTRANIBM社高級言語としては最初のものである、現在も科学技術計算など大規模な計算を必要とする分野で使用されている
1958年ALGOL58-構造化プログラミングの考え方を取り入れた最初の言語である、あまり普及しなかったが、後に登場するPascalやC言語など多くの言語に影響を与えた
1960年CobolJ.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年VBMicrosoft社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年GoGoogle社並列コンピューティングに配慮したコンパイラ言語。依存性の注入を言語仕様にとりこみ、例外処理やクラスの継承、アサーション、オーバーロードといった機能を排除している
2011DartGoogle社Webブラウザ組込みのスクリプト言語であるJavaScriptの代替となることを目的に作られた。 2014年ECMA-408と言う標準規格に登録
2014SwiftApple社Apple社のiOSおよびOS Xのためのプログラミング言語。従来から用いられていたObjective-CやObjective-C++、C言語と共存することが意図されている