風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

何が違うの?

C言語の種類 http://okwave.jp/qa/q6383514.html --- 素晴らしい回答はそのうちどなたかがしてくれるとして、自分用の練習。 --- 現在、主流のコンピュータは、1と0の並びによって命令やデータを解釈し、処理を行います。 人間がコンピュータに「こう動いて欲しい」という「命令」をするには、この1と0の並びを 作ってあげなければいけないのですが、人の手で作るにはあまりにも途方もない作業 になってしまいます。 ちなみに、この「コンピュータが理解できる1と0の並び」を「機械語」と呼んだりします。 で、この途方もない作業を嫌った人が、ある程度人間に読めるものを、機械語に翻訳する 物を作れば、訳の分からない機械語を書かなくて済む、ということで「アセンブラ」 が作られました。 アセンブラでプログラムが書かれ始めると、だんだん大規模なプログラムが つくられるようになっていき、今度は複雑な条件分岐や、ループ、 データ構造などが必要になってきました。これらをアセンブラで書こうとすると、 途方もない作業になってしまいます。 そこで、途方もない作業を嫌った人が、さらに(コンピュータから見て)抽象化した概念を 簡単に記述できるようにC言語と、そのコンパイラを作りました。 それによってさらに大規模なプログラムが作られるようになっていきました。 そうなると、今度は実世界の構造をプログラムで表現したいとか、プログラミング言語から 機械語にわざわざ変換する手間がめんどうだとか、色々要望が出てきました。 これらをC言語でやろうとすると途方のない作業になってしまいます。 そこで、オブジェクト指向という概念を表現できる言語やインタープリタという コンパイルの必要のない言語が作られました。 現在は、色々な要望に応じて、新しい言語が作られたり、言語仕様がバージョンアップしたり しています。 いまこのへん。 突き詰めていうと、最終的にはコンピュータが理解できる「命令」の並びである「機械語」を 人間が楽に作れるようにしたものがプログラミング言語です。 コンピュータができることはどの言語でも(やろうと思えば)記述可能ですが、それを 指示するために、簡単に1行で書けるのか、それとも何百行も書かなければ実現できない のかは、やろうとすることと、使う言語によって微妙に差があります。 例外はありますが、大体は抽象度の高い言語ほど、大規模、多人数の開発に向いているように 作られていて、パフォーマンスは抽象度の低い言語と比べて不利です。 C言語機械語アセンブラから見て「高級言語」と言われることがあります。 昨今の状況をみると、それより抽象度の高い機能が利用できる言語がたくさんあるので、 Cはアセンブラに毛が生えた物、程度にしか見ていない人も増えていますね。 その他、多くの人が同じことを書くであろう処理は、ライブラリという形で、提供されます。 言語そのものの仕様ではないですが、このライブラリの提供形態や豊富さも言語によって異なります。 --- うーん、説明って難しいね。これじゃ分からんだろうな…。 誤解を招きそうな部分もあるけど、上手く言えない。インタープリタあたりとか。 ちゃんと知りたいなら「コンピュータはなぜ動くのか」と「プログラムはなぜ動くのか」 あたりを読めばいいと思う。 コンピュータがどうやって動いているのかを知って、コヤツを動かすためにはどうすればいいの? ってあたりが、プログラミング言語を知るためのいい質問かもしれませんね。 --- どうでもいいけど、この質問に関するtweetが、(苦笑)な感じばっかりだったのにがっかり。 いや、まあ何つぶやこうが勝手だけど、お前らもそういう時代あっただろうよ?