こんにちわ。
プログラミング言語の用語で、はてな?って思うことがあります。
それは、「高水準言語」ってやつ。
そして、C言語って高水準言語なの? って思うこと。
今回は、プログラミング言語について「高水準言語」とその対となる「低水準言語」の違いを調べることにしました。
高水準言語と低水準言語の違い
一般的な分類で言うと機械語やアセンブラ言語などは、よりハードウェアに近い言語であり、低水準言語と呼ばれています。
そして、それ以外の言語は機械語と一対一で対応せず、より人間に近い言語なので、高水準言語と呼んでいる。。。とかなりざっくりとした分類のようです。
もうちょっと、詳しく書くと、低水準言語は低級言語とも言われます。
決して、劣った言語ということを意味しているわけではありません。
ソフトウェアの階層構造を考えた場合に、ハードウェア寄りに位置するから低水準と言っているにすぎません。
一方、高水準言語は、より抽象度が高いプログラミング言語という意味です。
いくつかのアセンブラや機械語の命令をまとめて一つの機能や意味を持たせたものが高水準言語の構文となります。
高水準言語の特徴は低水準言語と比べると、人間にとってわかりやすく、CPUに依存した処理を書かなくてよくて、メモリ制御、IO制御等、低水準の操作を意識しなくてよいといったメリットがありますね。
機械語でプログラムを書こうとすると
もし、機械語でプログラムを書こうとする場合を考えてみましょう。
機械語は、それぞれCPUの種類別にユニークな言語で、機械語は0と1のバイナリまたは16進数で表現されます。
CPUはこれをそのまま理解することができます。
このように機械語は,CPUが直接理解できるレベルまでデコードされた言語であるため,人間が直接機械語でプログラミングすることは人が頭の中でやりたい処理を、機械語に翻訳してから、プログラミングをしないといけないのであまりにも効率が悪く、普通はしません。
そこで、考えられたのがアセンブリ言語です。
その機械語を多少でも人間に理解しやすい言語に置き換えたものがアセンブリ言語です。
アセンブリ言語の命令はニーモニックと呼ばれ、人間の言葉に近い形式で記述されます。
ただ、それは“MOV”や“LD”、”ST”などと、機械語と比較して,多少は人間に理解しやすい言語というだけです。
しかし、アセンブリ言語と機械語は,基本的には1対1で対応しますので、CPUの一挙手一投足をすべて記述することができます。
しかし、CPUの種類によりそれぞれ異なった表記をしなければあなりませんし、そのCPUの仕様を十分に理解し,CPU固有の命令を憶える必要があるために、移植性やプログラミングの作業効率は実際にはあまりよくないです。
それに対して、高級言語は人間の言語により近い形式でプログラミングしたいという要求から生まれました。
高級言語を使ったプログラムでは,条件判定や繰り返し,分岐など,プログラムの基本構造が,人間の思考形態に沿った形式で記述できるようになっています。
また,キーワードや構文も英語に近い形式で記述できます。
高級言語はハードウェアを知らなくても、文法に従って誰でもプログラムを書けるように、ハードウェアに依存しない抽象的な作りになっています。
高水準言語は多くのコンピュータで利用できますが、そのかわり個々のコンピュータの細部まで使いこなせるわけではありません。
特に、ハードウェアの細部を直接制御するような仕事は、一般に高水準言語ではできません。
高水準言語が得意とする仕事は、抽象的に定義されたデータを処理することで、人間にとっての使いやすさを工夫して作られています。
そして、高水準言語は、いままで様々な言語がその目的に応じて開発されています。
さて話を最初に戻しますが、C言語って高級言語って言っていいんでしょうか?
CPUに依存した処理を書かなくてよいという部分では、高級言語なのですが、メモリ制御、IO制御等、低水準の操作は多少できますし、インラインでアセンブラを記述することができるものもあるわけです。
どうでしょうか?
C言語は高水準言語と低水準言語の両方の要素を持った言語のように思うのですが。。。
最後までおつきあい、ありがとうございました。
コメント