プログラミング言語について述べる前に、 まず、機械語について簡単に説明する。 図 1. にコンピュータの概念図を示す。 ただし、ここには、機械語を説明するのに必要な処理装置とメモリのみを図示している。
この図は C言語で言えば、次のようなプログラムが機械語でどのように表されるかを示したものである。 機械語命令は 0210番地(16進表記)から 0213番地の4行であり、 変数 A, B, C, X は FE03番地から FE06番地に割り当てられている。
int A = 2, B = 10, C = 3, X; X = B * C + A;
「0001 0101」とか 「0011 1000」というのが機械語命令であり、 その右は それぞれの機械語命令が何をするものかを解り易いように、 英字(ニーモニックと呼ばれる)で表記したもので、アセンブリ言語と呼ばれる。
すなわち、X = B * C + A; は LOAD B, MULT C, ADD A, STORE X の4命令となる。
実際の各機械語命令のサイズはもっと長く、また、長さは、一般には、一定ではない。 機械語プログラムの実例として、 次のC言語プログラム test00.c を TCC[1] でコンパイルした結果を下に示す。 機械語命令はマシンに依存する。 この機械語プログラムは インテルが開発した32ビットマイクロプロセッサのアーキテクチャ IA-32 を対象としたものである。
#include <stdio.h> void main() { int A = 69, B = 10, C = 3, X; X = B * C + A; printf("X=%d\n", X); }
Windowsパソコンで動く 実行可能形式プログラムは大きくはヘッダ部、コード部およびデータ部で構成される。 以下は、コード部で main関数に対応する部分のみを抽出したものである。
00401000 fn_00401000: ; Xref 004010BE 00401000 55 push ebp 00401001 89E5 mov ebp,esp 00401003 81EC10000000 sub esp,10h 00401009 90 nop 0040100A B845000000 mov eax,45h 0040100F 8945FC mov [ebp-4],eax ; A <- 60(45h) 00401012 B80A000000 mov eax,0Ah 00401017 8945F8 mov [ebp-8],eax ; B <- 10(0Ah) 0040101A B803000000 mov eax,3 0040101F 8945F4 mov [ebp-0Ch],eax ; C <- 3 00401022 8B45F8 mov eax,[ebp-8] ; eax <- B 00401025 8B4DF4 mov ecx,[ebp-0Ch] ; ecx <- C 00401028 0FAFC1 imul eax,ecx ; eax <- eax * ecx (B*C) 0040102B 8B4DFC mov ecx,[ebp-4] ; ecx <- A 0040102E 01C8 add eax,ecx ; eax <- eax + ecx (A+B*C) 00401030 8945F0 mov [ebp-10h],eax ; X <- eax (X = A+B*C) 00401033 8B45F0 mov eax,[ebp-10h] ; eax <- X 00401036 50 push eax 00401037 B800204000 mov eax,offset off_00402000 ;'X=%d',00Ah,000h 0040103C 50 push eax 0040103D E896000000 call jmp_printf 00401042 83C408 add esp,8 00401045 C9 leave 00401046 C3 ret
プログラミング言語とは、コンピュータに対する一連の動作の指示を記述するための人工言語の総称である。 この一連の指示をプログラムと呼び、それを記述することをプログラミングと呼ぶ。 自然言語(日本語や英語など人間が普段使っている言語)と同様、文法(構文規則や意味規則など)で定義される。
プログラミング言語の存在意義は、人間が直接扱うには難しい機械語に代わって、より人間が扱いやすい形を提供することにある。 コンピュータが直接理解し実行することのできる言葉は、そのコンピュータの種類に固有の機械語だけである。 したがって、最終的には機械語を使ってコンピュータが行うべき作業・計算を指示しなければならない。
機械語命令と一対一に対応するアセンブリ言語もプログラミング言語の一つではあるが、 一般には、C言語やJavaなどもっと人間に解り易いプログラミング言語が多く使われる。 アセンブリ言語は低水準言語、C言語やJavaなどは高水準言語(または高級言語)と呼ばれる。
高水準言語で書かれたプログラムを機械語プログラムに変換するのがコンパイラである (アセンブリ言語や中間言語を経由することが多い)。
機械語プログラムに変換するのではなく、高水準プログラミング言語で書かれたソースコード(プログラム) を逐次解釈実行するものをインタプリタと呼ぶ。 プログラムの実行に主としてインタプリタを用いるプログラミング言語をインタプリタ言語(またはスクリプト言語)と呼ぶ。 Perl、JavaScript、VBScript などがよく知られている。
なお、通常、プログラミング言語とは言わないが、 Webページの記述言語である HTML(HyperText Markup Language) もスクリプト言語の一種である。