プログラミング言語の歴史

プログラミング  C言語   人工知能

以前プログラミング言語について述べたが、今回はそれらの歴史について述べてみる。

1940年代から始まったのENIACEDVAC等のコンピューターの開発に伴い、それらを動作させるプログラミング言語も大きく変化している。

コンピューターの原理は巨大で複雑な計算機であり、その中で扱われている情報は数字となる。そのため初期のプログラミングは数字の羅列となる機械語であった。以下にそのサンプルを示す。

A10010
BB160210
01D0
A10410

上記はごく簡単な算術計算を実行する命令が書かれているだけだが、何が書かれてあるのか文字列を眺めるだけではわからない。これに対して以下に示すようなアセンブラ言語が作られた。

MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z,  AX

このアセンブラ言語は、それをコンパイルするアセンブラと呼ばれる別のプログラムに読み込ませて機械語に変換してコンピューターで実行された。

これを人間にわかりやすい形に作り直されたのが「高級言語」とよばれるもので、最初に考案されたのがFORTRANでコードとしては以下のようになる。

Z=X+Y

前述の機械語、アセンブラ言語と同様の内容を記載しているが、非常にコードが見やすく言語を完全に理解していなくとも何を書いているかが理解できる。

このような高級言語の登場でプログミング言語を書くための敷居が下がり、かつ半導体技術の発展によりコンピューター自体の性能が向上して、より複雑で大量のコードが生成されるようになり、プログラミングの生産性の向上に向けての改善が行われた。

その中の一つが「構造化プログラミング」となる。構造化プログラミングは、グラフ理論の最短経路問題への解決法であるダイクストラ法を考案したエドガー・ダイクストラによって提唱されたものとなる。基本的なコンセプトは「正しく動作するプログラムを作成するためには、わかりやすい構造にすることが重要である」として、具体的にはプログラムをわかりづらくしている元凶である「GOTO文」を廃止して、ロジックを(1)順次進行、(2)条件分岐、(3)繰り返しの3つの構造だけで表現することを提唱した。

オブジェクト指向で何故つくるのかより

この基本三構造は、非常に強力でありながらシンプルであるため、現在のプログラミング言語の根本に位置づけされるコンセプトとなっている。つまり、プログラミングを学ぶ時にそれぞれの言語でこの三構造を学べび、後はそれぞれのデータ構造と外部とのIF(ファイルの入出力等)を理解すれば基本的なコーディングは可能となるということが言える。

構造化プログラミング言語としては、ALGOLPascalC言語等がある。

構造化プログラミングの次の進化の方向性としては「保守性の向上」と「再利用性の向上」にある。それらの具体的な実装形態としては「オブジェクト指向型」であったり、「関数型」であったり様々な方向に向かうことになるがそれらは次の機会に述べてみたい。

コメント

  1. […] 前述のプログラミング言語の歴史で、プログラミングの生産性の向上という課題に対して、「構造化プログラミング」というパラダイムで、順次進行、条件分岐、繰り返しの「基本三構造」と「gotoレス」「サブルーチンの独立性強化」が提案されたことを述べた。その「構造化プログラミング」で残された生産性の向上の課題は、「グローバル変数問題」と「貧弱な再利用」となる。 […]

  2. […] 前回、機械に直結した言語から、自然言語に近い高級言語へ進化し、さらに生産性の向上の方向性に向かって構造化言語からオブジェクト指向言語(OOP)へ進化するまでを述べた。今回はOOPとは異なった生産性向上のアプローチである「関数型言語」について述べてみる。 […]

  3. […] 繰り返し機能は、プログラミング言語の中でも基本機能で、プログラミング言語の歴史でも述べた構造化言語の3つの機能である(1)順次進行、(2)条件分岐、(3)繰り返しの中の一つの要素となる。 […]

  4. […] Clojureの特徴の一つとして関数型言語であるというものがある。これはpyhtonやjavascript等の通常の言語が手続きを書き並べていく言語であるのに対して、関数という機能ブロックで全てのプログラムを構成するというプログラミング言語の歴史の中では最新のトレンドに部類されるものとなる。 […]

  5. […] 「世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第2版:データサイエンスとアプリケーション」より。前回はプログラミングについての概要を述べた。今回はプログラミングの基本(構造化プログラミング)となる、データの型と基本演算、分岐、繰り返しについて述べる。 […]

  6. […] Clojureの特徴の一つとして関数型言語であるというものがある。これはpythonやjavascript等の通常の言語が手続きを書き並べていく言語であるのに対して、関数という機能ブロックで全てのプログラムを構成するというプログラミング言語の歴史の中では最新のトレンドに部類されるものとなる。 […]

  7. […] プログラミング言語の歴史 機械語から関数型言語まで […]

タイトルとURLをコピーしました