高水準言語と低水準言語とは?メリットをわかりやすく解説。

プログラミング言語の特徴として高水準や低水準といわれることがあります。

  • プログラミング言語においての「水準」ってどういう意味?
  • 高水準言語や低水準言語のメリットは?

この記事ではこのような疑問について、解説していきたいと思います。

プログラミングスクールの無料体験を受けまくった人の記事

プログラミング言語においての水準

プログラミング言語の特徴を表すために使われる言葉「水準」。実は一瞬で理解できるような簡単な言葉です。

水準とは「低くなればなるほどコンピュータの言葉に近くなり、高くなればなるほど人間の言葉に近くなる」と思ってください。

低水準:機械語に近い

中間

高水準:人間語に近い

低水準言語は機械語に近くて高水準言語は人間語に近い?

低水準言語というのは、まさに機械語に近い言語という意味です。英語ではlow-level programming languageと書きます。「低レベル」のプログラミング言語という意味ですが、このレベルというのは、より「低い次元の」という意味で、よりコンピュータの細かい動作まで記述する必要があるということです。

一方、高水準言語はhigh-level programming languageと書きます。こちらは「高レベルの」すなわち、「高い次元での」プログラミングが可能という意味になります。コンピュータの細かい動作はコンパイラなどが行ってくれています。例えばメモリの管理とか。

水準は次元の違い?

説明に使った次元という言葉がわかりにくいかもしれません。次元というのは数学などで用いる、「2次元」「3次元」などとは少し意味合いが異なります。物事を考える立場を指します。どこまで視点を落とすか。レベルを低い立場に落とすかということです。簡単に具体例を出してみましょう。

ポテトチップスの次元別な考え方

低次元的な考え方:馬鈴薯(日本:遺伝子組換えでない)、植物油、食塩、青のり、あおさ、香辛料、酵母エキスパウダー/調味料(アミノ酸等)湖池屋ポテトチップス

高次元的な考え方

超低次元を実現するなら原子や分子の話からでしょうか?

パソコンの次元別の考え方

低次元的な考え方:CPU corei7 4790k GPU GTX1080 RAM 16GB …

高次元的な考え方機械

イメージはつかめたでしょうか?つかめた人は天才です。つかめなかった人は正常です。このままお進みください。

低水準言語(low-level programming language

コンピュータ用のプログラミング言語のうち、機械語ないし機械語に近いアセンブリ言語などの言語の総称です。低級言語とも呼ばれたりします。アセンブリ言語とは、機械語すなわち電流を流さない「0」と電流を流す「1」の羅列を少し人間よりにわかりやすくした言語ですね。

低水準言語の特徴やメリット

機械語やアセンブリ言語などの低水準言語はこのような特徴やメリットがあります。

  • コンピュータにとってわかりやすい

機械語なのでコンピュータがそのまま実行できます。「0」電流を流さない「1」電流を流す。という風な感じですね。逆に人間にとっては何が何だかわかりません。

  • 特定プラットフォーム(ハードウェア、ないしプロセッサ)に特有の処理が書ける
  • メモリ操作、IO制御等CPUレベルの操作ができる

これは具体的なプログラムが書けることにより実現できることです。具体的というのはコンピュータの内部動作までを記述する必要があるということですね。そこまで記述する必要があるからこそできることですね。

参照:wikipedia

アセンブリ言語と機械語を実際に見てみる

アセンブリ言語とは、機械語に一対一で対応した人間語のようなものです。こちらのサイト様を参考にさせていただきました。

アセンブリ言語で書いたプログラムです。

		XOR	r0, r0,	r0
		ADDI	r8,	r0,	0
		ADDI	r10,	r0,	512
		ADDI	r14,	r0,	1
		ADDI	r8,	r0,	0
		ADDI	r24,	r0,	400

	FOR0S:
		BLE	r24,	r8,	FOR0E
		ADD	r15,	r8,	r10
		SW	r14,	0(r15)
		ADDI	r8,	r8,	4
		J	FOR0S

	FOR0E:
		SW	r0,	0(r10)
		SW	r0,	4(r10)
		ADDI	r9,	r0,	2
		ADDI	r25,	r0,	51

	FOR1S:
		BLE	r25,	r9,	FOR1E
		SLL	r14,	r9,	2
		ADD	r15,	r10,	r14
		LW	r11,	0(r15)
		BNE	r0,	r11,	IF0E
		ADDI	r9,	r9,	1
		J	FOR1S

	IF0E:
		SLL	r14,	r9,	3
		ADD	r8,	r0,	r14
		ADDI	r24,	r0,	400
	
	FOR2S:
		BLE	r24,	r8,	FOR2E
		ADD	r15,	r8,	r10
		SW	r0,	0(r15)
		SLL	r14,	r9,	2
		ADD	r8,	r8,	r14
		J	FOR2S

	FOR2E:
		ADDI	r9,	r9,	1
		J	FOR1S

	FOR1E:
		ADDI	r8,	r0,	8
		ADDI	r24,	r0,	400

	FOR3S:
		BLE	r24,	r8,	FOR3E
		ADD	r15,	r8,	r10
		LW	r11,	0(r15)
		BEQ	r0,	r11,	IF1E
		SRA	r14,	r8,	2
		ADD	r15,	r8,	r10
		SW	r14,	0(r15)

	IF1E:
		ADDI	r8,	r8,	4
		J	FOR3S

	FOR3E:
		HALT

そしてこれを機械語に翻訳すると、

00000000000000000000000000001010
00000100000010000000000000000000
00000100000010100000001000000000
00000100000011100000000000000001
00000100000010000000000000000000
00000100000110000000000110010000
10001111000010000000000000010000
00000001000010100111100000000000
01100001111011100000000000000000
00000101000010000000000000000100
10100000000000000000000000011000
01100001010000000000000000000000
01100001010000000000000000000100
00000100000010010000000000000010
00000100000110010000000000110011
10001111001010010000000001000100
00000001001000000111000010010000
00000001010011100111100000000000
01000001111010110000000000000000
10000100000010110000000000001000
00000101001010010000000000000001
10100000000000000000000000111100
00000001001000000111000011010000
00000000000011100100000000000000
00000100000110000000000110010000
10001111000010000000000000010100
00000001000010100111100000000000
01100001111000000000000000000000
00000001001000000111000010010000
00000001000011100100000000000000
10100000000000000000000001100100
00000101001010010000000000000001
10100000000000000000000000111100
00000100000010000000000000001000
00000100000110000000000110010000
10001111000010000000000000100000
00000001000010100111100000000000
01000001111010110000000000000000
10000000000010110000000000001100
00000001000000000111000010010010
00000001000010100111100000000000
01100001111011100000000000000000
00000101000010000000000000000100
10100000000000000000000010001100
11111100000000000000000000000000

見てもらえばわかりにくさがわかりやすいでしょう。これが低水準の世界です。

高水準言語(high-level programming language

低水準とは逆に、記述の抽象度が高いプログラミング言語を言います。高級言語とも呼ばれたりします。現在使われているプログラミング言語のほとんどがこちらに分類されます。C言語もほかの言語よりは低水準よりですが、それでも高水準と呼ばれたりします。

高水準言語の特徴やメリット

  • 人間にとってわかりやすい

より人間の言葉に近いプログラミング方法なので、直観的にわかりやすいです。大体の人がこちらの言語を使っているため、この素晴らしさが薄れているように感じますが、アセンブリ言語などを見てもらうとコードの見やすさが断然違います。

  • プロセッサに依存した処理を書かなくてよい
  • メモリ制御、IO制御等、低水準の操作を意識しなくてよい

細かいところまで記述しないでよいということになります。

参照:wikipedia

おなじみのC言語

#include <stdio.h>

int main()
{
	printf("Hello, world\n");
	return 0;
}

人気の高いJava

public class Hello_world {
	public static void main(String[] args) {
		System.out.println("Hello, world");
	}
}

AIに強いPython

print ("Hello, world")

学習難易度はどっちが難しい?圧倒的に低水準言語。

難易度的には圧倒的に低水準のほうが難しいです。メモリ制御などの知識が必要になってきますので、それなりの勉強が必要になります。上でソースコードをお見せしましたが、機械語やアセンブリ言語マジでわからんです。私には勉強する気が起きません。

一方、高水準と呼ばれる言語は、たぶん馴染み深いんじゃないでしょうか。PythonだのJavaだのそこらへんに転がっています。#include ○○とか#define ○○とか。もう英単語で大体意味掴めちゃいますよね。あとは、コンパイラが勝手に機械語に直してくれるわけですから、まあ楽ですよ。

最後に

プログラミング言語においての「水準」という言葉は、あっさりと理解できるようなものではなかったでしょうか。初めてプログラミングを始める方は絶対に高水準の言語をオススメします。どうしても、低水準かっこいい!機械語マスターしたい!というなら止めません。ロボットになってしまわないように気を付けてくださいね。

あ、ロボットといえばこちらの「AI」今熱いんですよね!よかったら見ていってください。

AIエンジニアになるには?年収はいくら?気になる点だけを解説

最後まで読んでいただきありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です