見出し画像

Facebookから「少しプログラミングの話題」

午後から少し具合がよくなり、夕食だけとりに梅田まで行ってました。道中で、少し、いつも通り気は進まないと思いつつ、書いとこうかな、と思うことが出来たので書きます。また、少しプログラミングの話題を扱います。

計算機、というものについて考えた時、そのルーツがいつかというのには諸説あるかと思います。一説には、19世紀には歯車式の機械式計算機が実現しており、この時世界初めてのプログラミングが行われた、という説もあったかと思います。

話を、処理装置と主記憶からなる、いわゆる「ノイマン型」の電子的な計算機に限れば、米国で戦時中か戦後かはっきり覚えてませんが、砲弾の弾道計算を目的として開発された「ENIAC」がルーツと言っていいかと思います。これは、真空管で構成された巨大な機器でした。

計算機についてよく見てみると、それは、現代でもプロセッサというのはトランジスタを集積したものであり、もっと簡単に言えば「スイッチ」の集合です。このスイッチのON/OFFを組み合わせることで様々な処理や表現を行います。このため、計算機上で扱えるのは1と0からなる2進数のみで、こうした物をニーモニックと呼びますが、これは、現代でも原理は同じです。

初期のプログラミングでは、こうしたニーモニックを直接扱っていたようです。具体的には、「パンチカード」と呼ばれるもので読み込ませたり、あるいは、初期のパソコンのように前面パネルの実際のスイッチのON/OFFで制御する、といった具合です。極めて限られた専門家のみが行うことが出来るもので、ただ、例えばポール・アレンやビル・ゲイツ、スティーブ・ジョブズといった名だたる面々もこうしたことに夢中になることでその後の事業に繋げたようです。

いわゆるタイムシェアリングシステムなどが一般的になってきてからだったと思いますが、1950年代ころ、この頃からいわゆる「プログラミング言語」というものが徐々に現れてきたかと思います。初期の言語として代表的なのは、例えば科学技術計算などで用いられるFORTRANや、意外と古い歴史を持つLisp、あるいは10進数を扱える事務計算言語、COBOLといったものもここに分類されるかも知れません。

アメリカで、1970年代ころ、「アルテア」というコンピューターが人気を博しました。このアルテアは正にスイッチで操作するものでしたが、これ用に高水準プログラミング言語「BASIC」を供給したのが、のちのMicrosoft創始者のビル・ゲイツ、ポール・アレンらです。このBASICは、コピーという形で広まり、それがゲイツやアレンらを結果として後押しはしたものの、のちのMicrosoftの事業の展開の仕方に様々な影響は与えたようです。

同じく1970年ころ、多数のノーベル賞科学者を擁したベル研究所で、C言語が開発されました。これは、Unixというオペレーティングシステムを記述するためのもので、比較的機械語に近いシステム寄りの言語です。C言語は、Unix、TCP/IPなどとともに、世界的に広まることとなりました。

しばらくの間は、ダイクストラという計算機科学者により提唱された「構造化プログラミング」という手法が主流で、そのためのプログラミング言語は一般に「手続き型言語」と呼ばれました。その一方で、より洗練された記述を実現するために、アラン・ケイらにより「オブジェクト指向」が提唱され、実際にオブジェクト指向に沿ったプログラミング言語、SmallTalkが開発されました。このSmallTalkは、後の様々なプログラミング言語に多大な影響を与え、今日のプログラミング言語でSmallTalkの影響のないものはごく少数とさえ言えるかと思います。

少し話を変えて、先日書いた通り、プログラミング言語には大別して「インタプリタ言語(スクリプト言語)」と「コンパイル言語」があります。コンパイル言語は更に、機械語を直接出力するものと、中間に専用の処理系を挟む形で「中間言語」を出力するものに分けることができます。スクリプト言語の代表的なものとしては、Perl、PHP、Ruby、Pythonといったものがあるかと思います(Perlは、厳密にインタプリタとは言えない部分もあるそうですが)。コンパイル言語は、機械語を吐き出すものとしては、昔からあるものでも、C、C++、FORTRAN、Pascal、などと言ったものもあり、中間言語型にはJava、C#などがあります。

実行速度や、使用するメモリーなどの計算機リソースなどの点では、コンパイラ言語が有利です。例えば、C言語などは古い言語ですが、組み込み機器のファームウェアなどを記述するために今でも用いられることが多い言語かと思います。Linuxのように、今でもC言語で記述されているオペレーティング・システムもあります。Javaも、元々は、組み込み機器用のソフトウェアについて、移植性を高める目的で開発されたものだったかと思います。

今日でも、新しい用途や目的で、様々な言語が開発されています。私も最新の事情には疎いのでここでは上げませんが、よければ各位でお調べになってください。その一方で、古い言語も時代とともに処理系などが進化することで、今日でも多くの場面で引き続き利用されていると言えます。COBOLやFORTRAN、Lispなども用途によっては現役と言えます。

とりとめのない文章ですが、長くなったのでここまでとします。今日では、ソフトウェアの利用形態がインターネット経由であることが多く、配布する必要がないためソースコードのまま実行できるスクリプト言語も広く用いられています。その方が記述の生産性で優れるなどのメリットがあるためです。プログラミング言語は、対象とする問題によって、適するものがそれぞれある、ということが出来るかと思います。以上といたします。

この記事が気に入ったらサポートをしてみませんか?