スタートページ> (主張・講演Web教材歴史ソフトウェアの歴史

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


参考URL


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

コンピュータ以前のプログラム

コンピュータ以前でも自動機械には、動作を機械に指示するプログラムが必要であった。コンピュータ以前のプログラムとしてよく引用されるものを掲げる。

  • 1801年 ジャカード織機
    長い紙に開けた穴の配列によって布のデザインパターンを変えることができる。これがプログラムを用いた機械の最初とされることが多い。
  • 1830年頃 バベッジの解析機関
    処理手順をパンチカードで指定することにより、多様な計算ができる設計であった。これのプログラムを作成したエイダ・ラブレス(Ada Lovelace、詩人バイロンの娘)がプログラマの最初だとされる。
  • 1906年 ホレリスのパンチカードシステム
    ホレリスは、カードパンチ機、カード分類機、帳票作成機などパンチカードシステムを開発した。単純な配線盤(プラグボード)により多様な処理ができた。

プログラミング言語発展の世代

コンピュータが発明されて以来、プログラミングが重要な技術になった。ごく初期のコンピュータは配線を組み替えるものもあったが、すぐにプログラムをパンチカードにより入力する形式になった。
 プログラミング言語の発展は4つの世代に区分される。この発展にはプログラミング理論の発展があるが、ここでは省略する。いずれにせよ、コンピュータの立場で記述することから、人間の発想に近い表現へと発展している。

汎用コンピュータ用の第3世代言語

汎用コンピュータで広く用いられていた第3世代ブログラミング言語は、科学技術計算用のFORTRAN、事務処理用のCOBOL、それを統合したPL/Iである。これらは、すべてISOやJISの規格になっている。これ以外に有名な科学技術計算用のALGOLがある。実務的にはあまり普及しなかったが、プログラム技術面で高く評価され、その後のプログラミング言語に大きな影響を与えた。

FORTRAN

FORTRAN(FORmula TRANslator)。最初の第3世代言語。最も広く普及した科学技術計算用言語。

  • 1957年 FORTRAN
    IBMのジョン・バッカスにより、IBM 704用に開発。
  • 1958年 FORTRAN II
    関数やサブルーチンが使える。倍精度型・複素数型が追加。
  • 1962年 FORTRAN IV
    機種依存性からの脱却。これがその後のFORTRANのベースになる。
  • その後、数度の改訂があり、最新版は Fortran 2008

FORTRAN は、プログラマのニーズに応じて逐次発展してきたため、特に初期のバージョンでは、習得のしやすさは良かったが、論理的体系的な「美しさ」に欠けていた。例えば、次のような規則があった。

  • 文区切りの記号はなく、1行1ステートメント。
  • 変数の文字数は6文字以内であり、I~Nで始まる変数は整数型、それ以外は浮動小数点型であるというような規則があった。

FORTRAN は、多くの関数が組み込み関数としてコンパイラに内蔵されただけでなく、それ以外に膨大な関数やサブルーチンが公開された。数値解析や統計分野では、通常の場合はプログラムを作成する必要がないような状況であった。FORTRANは、エンジニアにとって、プログラミング言語というより知識のライブラリのような存在だったのである(FORTRANの例)。
 しかし、ミニコンOSとしてUNIXが普及してくると、C言語を用いる技術者が増加し、FORTRAN独占状態が崩れてきた。さらに、パソコンでは当初は性能が不十分なためにFORTRANをサポートしなかったこともあり、FORTRANは次第に利用されなくなってきた。

COBOL

COBOL(COmmon Business Oriented Language)。事務処理用言語。自然言語(英文)に似た構文。汎用コンピュータでの販売システムや会計システムなどデータファイルを多様するシステムは、ほとんどがCOBOLが用いられていた。

  • 1955年 FLOW-MATIC
    COBOLの前身となる言語。グレース・ホッパーにより UNIVAC I を対象に開発。
  • 1959年 COBOL-60
    米国防総省が事務処理用共通言語の必要性を提案し、CODASYL(Conference on Data Systems Languages)が開発。米国政府の全面採用に伴い急速に普及。
  • 1961年 COBOL-61
    「4つの部」など、現在のCOBOLの体裁が確定
  • 1963年 拡張COBOL-63、1965年 COBOL-65
    報告書機能、ソート・検索機能、直接アクセス機能など、COBOLの主要拡張機能が出揃う。
  • その後、データベース機能や画面制御機能など改訂が行われてきた。

事務処理用言語は科学技術計算用言語と比較して、次の事項が重要である。COBOLは、これに合致した機能や記述体系になっている。

  • ファイルの取り扱い
    売上ファイルや得意先マスタなどデータファイルの取り扱いが多い。売上ファイルなどはすべてのデータを順に処理することが多いし、得意先マスタなどは売上ファイルの得意先コードに対応したデータをダイレクトに探すことが多い。そのようにファイルアクセスの方法が多様であるし、逆に、そのアクセス方法をパターン化しやすい。そのため、適切なファイル編成方式が必要になるし、プログラミング言語では、それを適切に取り扱う機能が求められる。
     ファイル編成の発展とCOBOLの機能追加は相互連携している。データベース機能も早期に組み込まれていたし、SQLとの連携もしやすくなっている。
  • 階層型変数と変数の値
    ファイルは同じ構造のデータ(レコード)の集合であり、売上ファイルのレコードには、年月日、得意先コード、商品コード、数量、金額などの項目、得意先マスタには、得意先コード、得意先名称、住所などの項目がある。個々の項目を変数とするだけでなく、レコード全体を一つの変数として取り扱うことも必要である。
    また、項目には、コードのような数字列、金額などの数値、名称などの文字列などがある。コードでは0で始まるものもある。数値では、1兆円を超す数値でも1円まで正確に計算できなければならない。このように、変数には多様な「型」が必要になる。
  • 報告書機能
    事務処理では出力帳票が多いことが特徴である。小計・中計・大計などの処理、改行や改頁などの処理を簡単に指定する記述が必要である。また、体裁のために、数値の¥記号や位取り記号、フォントの指定などができる機能が求められる。
  • 記述性の重視
    事務処理プログラムは、利用者が自分のために作成するのではなく、利用者と作成者が別人であり、しかも多数のプログラマが参加する。そのプログラムは長期的に利用され、その間に修正が多く行われる。そのため、かなり以前に他人が作成したプログラムを解読して、間違いなく修正できることが重要になる。すなわち、「人間が読みやすい」言語、記述方法でなければならない。  COBOLでは、特に記述性を重視した。手続き型言語の限界はあるが、適切に記述されたCOBOLのソースプログラムは、そのまま処理記述書とすることができる仕様になっている。反面、「COBOLで記述すると冗長になり、生産性が低下する」という指摘もある(COBOLの例)。

ALGOL

ALGOL(ALGOrithmic Language)。科学技術計算用言語。実務的な処理言語というより、プログラミング言語研究用の言語として評価される。

  • 1958年 ALGOLの提案
    ALGOLは、ヨーロッパの研究者が、世界共通のプログラミング言語として開発した。1958年にチューリッヒで行われた国際会議で提案された。
  • 1960年 ALGOL 60
    ALGOLが一般に普及した最初の版。文法がBNF記法で記述されている。
  • 1968年 ALGOL 68
    整然性・網羅性を追求したため、仕様が大規模になり、当時のコンピュータでは実装が困難であった。しかも文法が複雑難解になり、実務的には普及しなかった。

このように、実務的にはALGOL 60で停滞してしまったのであるが、ALGOLはプログラミング言語の技術に大きな成果をあげた。PL/IやCなどの言語は、主にALGOLの影響を受けている。

  • 具体的なハードウェア特性にとらわれず、抽象的なアルゴリズムをプログラムとして記述する。当初から相互互換性、移植性を重視した。
  • 文法構造をBNF記法で表示するなど、文法自体でも抽象化を重視した。
  • 再帰呼び出し機能、入れ子構造など、現在のプログラミング言語の基本的な機能を初めて取り入れた。
  • 文の区切り記号「;」を採用し、行の長さや桁位置などに左右される固定プログラム型から、それに無関係に記述する現在の自由プログラム型を採用した(ALGOLの例)。

PL/I

PL/I(Programming Language One)科学技術計算用と事務処理用を統合したプログラミング言語。

  • 1963年 NPL
    IBMとそのユーザ団体(SHARE)により、NPL(新プログラミング言語)の仕様検討
    科学技術計算用のFORTRANと事務処理用COBOLの機能を統合し、ALGOLでの論理性や形式を踏まえた新言語が求められると提案。
  • 1965年 PL/I
    IBMシステム/360が360度全分野をカバーするハードウェアであり、それにふさわしい画期的なプログラミング言語であるとの想いでPL/Iにしたという。

PL/Iは、FORTRAN、COBOL、ALGOLのいいとこどりをしており、当時として最も優れた言語だといえる。予約語がないし、デフォルト解釈もあるし明示的宣言も可能なので、初歩的な知識でもプログラミングできるし、理解が進むにつれて高度な機能を使いこなすことができる。それで、IBM以外のコンピュータもPL/Iをサポートするようになった。ところが、機能があまりにも複雑で大規模になり、大型コンピュータ以外では使えない欠点があった。
 日本では、IBM大規模ユーザでは広く普及した。これを標準言語にした企業も多い。ところが、本家の米国では、既にFORTRANやCOBOLの資産が多く、日本ほどにはシェアを獲得できなかった。オープン系ではPL/Iをサポートする環境がないので、現在ではPL/Iはほとんど使われていない。
 むしろPL/Iを簡素化する動きがあり、現在広く用いられているC言語もその一つだといわれている。

ミニコン・パソコン用の第3世代言語

1960年代後半から1970年代にかけて、大学や研究所ではミニコンが普及した。汎用コンピュータ用のプログラミング言語は、次第に巨大化・複雑化して、ミニコンで処理するのが困難になってきた。また、IBM独占への反発もあった。それでミニコンのためのプログラミング言語が多数開発された。その代表的なものに、BASICとCがある。
 その後、パソコンの普及に伴い、これらの言語はパソコンに移植され、さらに、GUI環境への適用が行われて、現在広く用いられている。
 これらは、自分のためにプログラムを作ることが多かったし、科学技術分野の利用者が大多数であったため、本質的には科学技術計算用の言語である。ところが、これら言語の普及に伴い、事務処理用の機能が追加されるようになり、現在では用途に限定せずに用いられている。

BASICは、コンパイラもあるが、一般的にはインタプリタである。そのため、プログラム作成の途中で確認しながら進めたり、部分的に変更するのは容易であるが、実行効率が悪く、繰返して用いる場合や大量データの加工など、基幹系の事務処理システムに用いるのは不適切である。基幹系事務処理では、データ入力など効率を問題にしない処理に限られる。

BASIC

BASIC(Beginner's All-purpose Symbolic Instruction Code)。教育用に開発された習得しやすいプログラミング言語。当初はTSS環境で稼働したが、その後パソコンに移植して急速に普及。多様な版があるが、マイクロソフトはGUI環境に適用したVisialBASIC(VA)に発展させ、パソコン環境での主要言語になっている。

  • 1964年 BASICの誕生
    米国ダートマス大学のジョン・ケメニーとトーマス・カーツにより教育用言語として開発。
    その後、PDP(ミニコン)のTSS環境での利用が普及。
  • 1975年 パソコンへの移植
    BASICのパソコンへの移植が行われた。そのうち有名なのは、ワング(Li-Chen Wang)が1975年に発表したTiny BASIC である。その後、ソースコードが公開されたこともあり、多くのパソコンで利用された。
    また、ビル・ゲイツとポール・アレンは、パソコンメーカーMITSのためにBASICをパソコン環境に移植。この成功がマイクロソフトの創業になったという。
    当時のBASICは、簡単ではあるが制約の多いものだった。
    • 変数名は、数値型では英字1字と数字1字(A1など)で整数型、実数型の区別はない。文字列は英字1字と$(A$)に限定。
    • 代入文の=も、比較演算子の=も、どちらも=を用いる(プログラミング言語として異例)
    • IF文はあるが、IF~THEN~ELSEはない。
  • 1980年代 パソコンでの普及
    1980年代当初からパソコンがオフィスに浸透してきた。パソコンを活用してオフィスワークの生産性を向上させるとのOA(Office Automation)の概念が普及した。BASICの機能は向上し、ビジネスとして実務に使えるレベルに達した。当初はパソコンを使うことはBASICを作成して処理することと同様な状況であり、BASIC習得ブームが起こった。
  • 1990年代 Visial BASIC
    BASICは多様な発展をしたが、マイクロソフトはGUI環境でBASICを生成するVisial BASICを開発した。バージョンを重ねるうちに、構造化プログラミングやオブジェクト指向の概念も取り込み機能が拡大した。特に、2002年からの .NET版になると、Windowsでのアプリケーション開発の主要言語になった。

C言語

C言語は、1973年にAT&Tベル研究所のケン・トンプソン(Ken Thompson) とデニス・リッチー (Dennis MacAlistair Ritchie) により開発された。1869年にミニコン用のOSであるUNIXが開発されていたが、それを高水準言語で記述しなおそうとして、A言語、B言語が試みられ、C言語で実用化した。

C言語は、OS開発用言語として出発したので、アセンブラレベルでの機能をもつ。そのため、OSや組み込みソフトウェアの分野にも利用できる。UNIXがそうであったように移植性がよいので、ミニコン、パソコン、汎用コンピュータまで多様なコンピュータで利用できる。
 反面、ALGOLやPL/Iなどを参考にしているが、それらの特徴である完全性や記述性に関しては、むしろ逆行している。事務処理で必要な文字型データの型がない。その意味では「優れた」言語とはいいにくい。

1980年代後半からTurbo Cなど、手軽なコンパイラとして普及した。その後、C言語から派生した、C++やJavaなどが出現し、C言語はそれらの基本的言語として位置付けられるようになった。

第4世代言語

「第4世代言語」とは「第3世代言語を超えた言語」という意味の用語で、明確な定義はない。そのため、以下に掲げる言語を第4世代だとはしない視点もある。また、ここでは4つのグループに区分したが、個々の言語が複数のグループに属することもある。

非手続き型言語:SQL

非手続き型言語の代表例としてSQLがあげられることが多い。SQLは、それ以外にデータベース、特にRDB (Relational Database) の操作言語でもある。

  • 1976年 SEQUEL
    IBMがRDBシステム System R の問い合わせ言語としてSEQUELを発表。これがSQLの母体となる。
  • その後、1980年前半までに、ORACLEやOS/2など、RDB管理システムが続出した。
  • 1986年 SQL86
    SEQUELは、その後SQLと改称。ASCIがSQLを規格化。ISOやJISになる。これにより、RDB言語はSQLに統一されるようになった。
  • 1999年 SQL3
    SQLは逐次改善されてきた。このSQL3で、現在のSQLの基本的機能が出揃った。オブジェクト指向データベース的な機能も取り込まれた。

非手続き型言語の特徴は、「何をするのか」を指示するだけで、「どのように処理するのか」はコンピュータに任せていることである。また、データベースでは、第3世代言語のファイル定義に属する情報はDBMS(データベース管理システム)が管理しているのでプログラムでは記述しない(SQLの例)。
 このような理由により、プログラムの記述量が非常に少なくなる。これはプログラマの生産性向上に役立つ。

RDBの特徴は動的結合(実行時に2つのテーブルを結合)ができることである。これは任意の切り口で検索加工するのに便利な機能である。しかし、1980年代中頃までは、実行効率が悪かった。
 SQLには2つの利用法がある。一つは、エンドユーザがTSS環境で情報検索に用いるためののコマンド言語であり、もう一つは、COBOL、PL/I、CなどのソースプログラムにSQL文を記述できる埋込みSQLである。

なお、パソコンでのデータベース利用ソフトでは Access がポピュラーであるが、画面操作によりSQLを生成するツールであり、実際にはSQLが処理しているのである。

オブジェクト指向言語

オブジェクト指向言語とは

オブジェクト指向プログラミングとは、処理を小さな機能に分解し、それに必要なデータや処理手順をオブジェクトとして部品化することにより、それらの部品を組み合わせてプログラムを構築する方法である。開発が容易になるだけでなく、変更のときにはその部品だけを変更すればよくなる。このような方法に適した言語がオブジェクト指向言語(OOPL; Object-Oriented Programming Language) であり、現在よく利用されている言語にC++やJavaがある。

このような部品化・再利用が有用であることは、初期から認識されていた。サブルーチンや関数あるいはテンプレート(ひな型)プログラムもこれにあたる。しかし、オブジェクト指向言語では、単に部品を用意するだけでなく、再利用するのに便利な継承(インヘリタンス)や多相性 (ポリモーフィズム) の機能をもたせること、部品の管理をする機能を重視している。
 また、オブジェクト指向言語の特徴として、「入力があったら、在庫がなくなったら~をする」というように、何かが引き金になって処理を行うイベント駆動型であることがあげられる。

オブジェクト指向言語への発展

オブジェクト指向言語の考え方は、1960年代に存在していた。その有用性が認識され言語が実装されるようになったのは1970年代である。しかし、当時は一部の研究者や特定の用途に限定されていた。

  • ●Simula系
  • 1962年 Simula
    ノルウェーのクリステン・ニガード(Kristen Nygaard)とオルヨハン・ダール(Ole-Johan Dahl)が開発したオブジェクトとクラスを導入した最初の言語。ALGOLをベースにしている。当初はシミュレーション用言語として開発され、その後汎用化された。
  • 1979年 C++
    C言語をSimula言語を参考にしてオブジェクト指向に拡張した言語。ベル研究所のビャーネ・ストロヴストルップ( (Bjarne Stroustrup)による。
  • ●Smalltalk系
  • 1972年 Smalltalk
    オブジェクト間をメッセージで呼びだすことにより処理を行うという概念を導入した最初の言語。ゼロックスのアラン・ケイ(Alan Kay)らがパソコン AltoのOSとして開発。この言語の説明に「オブジェクト指向」という言葉を用いた。
  • 1983年 Objective-C
    C言語にSmalltalkを取り入れてオブジェクト指向に拡張した言語。
  • ●Pascal系
  • 1971年 Pascal
    1966年にベームとヤコピーニは、すべての処理は「順次・反復・分岐」の3つの基本的な論理構造によって記述できるとする構造化定理を示した。1968年にエドガー・ダイクストラ (Edsger Wybe Dijkstra) は、構造化定理に基づき、構造化プログラミング (structured programming) を提唱した。「GOTO文は有害だと考えられる」が有名。プログラムを部品化する考え方の基礎になる。
    チューリッヒ工科大学のニクラウス・ヴィルト(Niklaus Wirth)は、その考え方に基づき、言語Pascalを開発した。
  • 1978年 Module-2
    Pascalにモジュール(部品)の概念を導入。
  • 1988年 Module-3
    Module-2をオブジェクト指向に拡張。

Java

一般のプログラマにちって、最もポピュラーなオブジェクト指向言語はJavaである。逆に、Javaの出現により、オブジェクト指向が普及し、それにより多くの言語がオブジェクト指向に機能拡張したともいえる。
 Javaは次のような特徴をもつ。

  • 手軽なオブジェクト指向言語である。Webブラウザに組み込まれるほどの容量で動作する。メモリの後始末をするガベッジ・コレクションの機能を自動化していること、クライアントにあるデータのアクセスを禁止していることなど、プログラマへの負担を軽減している。文法的にも型宣言などが不要で、初心者にも使いやすい。
  • 移植性に優れている。Java仮想マシンの環境を作りやすい。第3世代のアセンブラに対応する中間言語をバイトコードというが、機種から独立しており、機械語にするのが容易である。
  • 開発環境が整備されている。JavaBeansなどの部品が豊富であり、画面上の操作でプログラムが生成できるなど、開発をするのに便利である。
  • ソースコードが公開されているので、無料で利用できるものが多く、多くのベンダがJavaを利用したソフトウェアやツールを提供している。
  • 1991年 Oak
    サン・マイクロシステムズ(現オラクル)は、ジェームス・ゴスリング(James Gosling)を中心とした技術者たちがOakというオブジェクト指向言語を開発した。家電製品用のプログラミング言語を検討していたが、C++や Object-Cは、大容量になること、複雑すぎること、移植性が不十分なことなどから、新しいオブジェクト指向言語を開発したのである。
  • 1995年 HotJava
    OakをJavaと改称。それをベースにしたWebブラウザで動的表示を可能にした。また、ソースコードを公開した。
  • 1996年 Java1.0(Javaの正式版)
    これまでのOakプロジェクトは、技術者たちの非公式なプロジェクトの要素もあったが、Hotjavaの成功を機会に、サン・マイクロシステムズの正式製品として、運営組織を設置。
  • 1996年 JVM(Java仮想マシン)
    マイクロソフトは、Javaを仮想環境で動作させるJVM(Java VirtualMachine)と、Javaの速度向上のためのJIT(Just-In-Time)コンパイラを開発。これがJavaの普及を促したが、その後、両者の間でライセンスをめぐるトラブルが起こり、マイクロソフトは手を引く。
  • 1998年 Java2
    Javaには、プログラミング言語の面とJavaによるシステム開発環境(Javaの標準部品、画面操作による開発など)の面がある。開発環境は当初JDK(Java Developpment Kit)と呼ばれたが、このバージョンで、通常の開発環境をJ2SE(Java2 Platform, Standard Edition ) 、大規模な環境をJ2EE(Enterprise Edition)、組み込みソフト用のサブセットJ2ME(Micro Edition)にわけた。特にJ2EEでは、Javaの部品であるJavaBeans、それがサーバ側で動作するJava Servlet、Web アプリケーション開発のためのJavaServer Pageなどが整備されており、Web環境での代表的なオブジェクト指向言語としての地位を確立した。
  • 2006年 Java技術のオープンソース化
    従来からJavaは部分的にソースコードを公開していたが、一部の例外を除き、Java技術(言語および開発環境)をオープンソースソフトウェアとして公開した。

スクリプト言語

WebページはHTMLで記述するが、HTMLの内部にプログラムを記述することができる。そのような言語をスクリプト言語という。その代表的なものに JavaScript がある。

  • 1995年 JavaScriptの誕生
    JavaScriptは、ネットスケープのブレンダン・アイク(Brendan Eich)が開発し、Navigator 2.0で実装された。1996年にはマイクロソフトのIE3.0にも搭載。Javaとは、記述法が似ている点もあるが不関係な言語。
  • 1997年 標準化
    その後マイクロソフトは、JScript として、独自の機能を追加した。そのような多様性を統一するために、通信分野の国際標準化団体Ecmaインターナショナルにより標準化した。それを ECMAScript という。しかし、すべてのブラウザが完全にこれに準拠している状況にはなっていない。
  • 2005年 Ajax
    その後、 JavaScript は多様な機能追加が行われたが、大きな影響を与えているのがAjax(Asynchronous JavaScript + XML)である。JavaScriptの標準機能であるXMLHttpRequest(HTTP通信を行うためのJavaScript組み込みクラス)による非同期通信を利用してサーバと交信し、動的にページの一部を書き換える技術である。この機能は以前からあったのだが、2005年にジェーシー・ガレット(Jesse James Garrett)によりAjaxと名付けられた。
    Ajaxを用いることにより、先の画面で必要な情報をクライアントに送っておき、バックグラウンドで画面を動作させることができる。地図の表示位置を変えたり拡大したりするWebページなどは、この技術を用いているのである。

軽量プログラミング言語

軽量プログラミング言語の基準はあいまいであるが、一般には、HMML内に記述できるスクリプト的な言語で、JavaScriptよりも記述が簡単であること、通常はWebサーバに置かれ、HTMLからCGIで呼び出され、その結果をHTMLに生成し、Webブラウザで表示する言語である。オープンソースであることが多い。代表的なものに、Peal、PHP、Rubyなどがある。これらの言語の発展では、まず個人の独創的な発案があり、オープンソースとして公開されて多数の協力者により機能追加や改善が行われていることが特徴である。

  • 1987年 Peal
    ラリー・ウォール(Larry Wall)によって開発された。これが軽量プログラミング言語の最初だとされ、多くの言語に影響を与えている。1994年、Perl 5.0でオブジェクト指向に対応。過去のバージョンとの整合性のため、表記法に特徴がある。
  • 1995年 Ruby
    まつもと・ゆきひろが開発したオブジェクト指向スクリプト言語。徹底した純粋のオブジェクト指向言語だといわれる。さらに、2004年にデンマークのハンソン(David Heinemeier Hansson)がRubyを用いて開発したオープンソースのWebアプリケーションフレームワーク Ruby on Rails により、開発環境が整備された。
  • 1995年 PHP
    PHP(Hypertext Preprocessor)。Rasmus LerdorfがPHP/FIを開発。当初はPealスクリプトであったが、C言語で再構築。1999年、Andi Gutmans とZeev Suraskiが'Zend Engine'と呼ばれる新しいエンジンを開発。PHP4とし、Zend Technologies社が運営している。