高水準言語と低水準言語
1. 序章
人間の言語に近い言語で書かれたコードをコンピューターがどのように理解できるでしょうか。 たとえば、これがコンピュータの動作方法であると常に聞いているので、0と1を使用してコードを記述できますか?
これらの答えは両方とも、プログラミング言語の抽象化のレベルに関連しています。
このチュートリアルでは、高水準言語と低水準言語の違いについて説明します。最後に、これら2つのタイプの主な利点と違いを特定し、それらの理由を理解することができます。同様に関連しています。
2. 抽象化のレベル
プログラミング言語は抽象化のレベルに応じて配置できますが、これが一般的なルールであることを知っておく必要があります。
参照に応じて、抽象化の中間レベルまたはハイブリッドレベルと呼ばれる3番目のカテゴリもあります。 しかし、重要な部分は、それらすべてが、言語構造と構文が人間の言語にどれだけ近いか、そしてコンピューターが理解できるビットのシーケンスからどれだけ離れているかを考慮することです。
2.1. 低レベル
プログラミング言語は、その抽象化のレベルによって、コードを見るだけで何が書かれているのかを理解するのが難しくなる場合、低水準言語として分類されます。 このレベルでプログラミングするには、最終的なコードは移植できないため、コードが実行される場所を知っておく必要があります。 それに加えて、プログラミングの予備知識と経験を持っていることをお勧めします。
低レベルのコードを作成する主な利点は、コンピューターによって実行されている操作を正確に把握できることです。
厳密なパフォーマンス要件、最適化の懸念、または限られたリソースがある場合は、このタイプのプログラミング言語の選択を検討する必要があります。低水準言語を使用するアプリケーションの例として、オペレーティングシステム、実行用に開発された組み込みシステムがあります。マイクロコントローラ、およびポータブル電子デバイスで。
低水準言語には、機械語とアセンブリの2つのカテゴリがあります。
マシンコードは、最初に述べた0と1のシーケンスです。 数字の1つの連結を見て、その背後にあるプログラミングロジックを理解することは直感的ではありません。
このため、Assembly言語があります。 まだ人間の言語からは程遠いですが、一連の指示の使い方を学ぶために少し努力すれば理解できます。 アセンブリで記述されたソースコードは、それをマシンコードに変換するためにアセンブラを必要とします。
2.2. 上級
一方、高級言語もあります。 したがって、このレベルにあるプログラミング言語を使用すると、コードは人間の言語にはるかに近くなります。
主な利点は、作業を容易にするために開発された構造と構文を使用して、複雑なプログラムを高速に記述できることです。
コードをマシンコードに変換するには、プログラミング言語に応じて、コンパイラまたはインタプリタが必要になります。 この戦略の利点は、同じオペレーティングシステムを搭載したさまざまなコンピューターで実行できるポータブルコードを最後に持つことです。
3. 例
低水準言語と高水準言語を使用したコーディングの違いを説明するために、数値の平均を計算して結果を画面に出力する簡単なコードを示します。
この簡単なプログラムはCを使って書くことができます。 CにはPythonのような最高レベルの抽象化の1つはありませんが、低水準言語ではありません。
#include <stdio.h>
int main()
{
int num1, num2;
float avg;
num1 = 2;
num2 = 8;
avg= (float)(num1+num2)/2;
printf("Average of %d and %d is: %.2f",num1,num2,avg);
return 0;
}
2番目のコードは、特定のハードウェア用に設計された低レベルのアセンブリ言語であるARM64GCC5.4を使用して作成されました。
.LC0:
.string "Average of %d and %d is: %.2f"
main:
stp x29, x30, [sp, -32]!
add x29, sp, 0
mov w0, 2
str w0, [x29, 28]
mov w0, 8
str w0, [x29, 24]
ldr w1, [x29, 28]
ldr w0, [x29, 24]
add w0, w1, w0
scvtf s1, w0
fmov s0, 2.0e+0
fdiv s0, s1, s0
str s0, [x29, 20]
ldr s0, [x29, 20]
fcvt d0, s0
adrp x0, .LC0
add x0, x0, :lo12:.LC0
ldr w2, [x29, 24]
ldr w1, [x29, 28]
bl printf
mov w0, 0
ldp x29, x30, [sp], 32
ret
アセンブリコードにはCコードよりも多くの行があることが簡単にわかります。 しかし、これよりも重要なのは、コードの各行が何をしているのかを理解するために、各レジスタの値を追跡しながら、各命令を詳細に分析する必要があるということです。
ループ、条件ステートメントを実装し、ワークフローを計画するために、使用している抽象化のレベルに応じてコードが完全に異なります。
4. アプリケーション
最も難しいレベルの抽象化または最も重要なレベルを定義するのは困難です。 ただし、アプリケーションと汎用性が高いため、高級言語の方が人気があると言えます。
高水準言語を使用して、人工知能アルゴリズムを使用してWebサイト、モバイルアプリ、データベース、またはソフトウェアを開発できます。 フレームワークとその抽象化レベルの助けを借りずに、アセンブリまたはマシンコードでこれを行う必要がある場合、確かにはるかに多くの時間を費やし、望ましい結果に到達しない可能性があります。
しかし、低水準言語はソフトウェア業界で広く使用されており、たとえば、Microsoftによって定義されたという規則がいくつかあります。
計算能力はもはや制限ではないと思うかもしれませんが、生産ラインなど、数GBのメモリを搭載した使いやすいオペレーティングシステムを実行するPCがない環境もあります。
代わりに、明確に定義されたタスクと制限されたストレージおよび処理機能を備えたマイクロコントローラーを使用します。 この場合、不要な冗長性や余分な計算を検出するために、各操作を注意深く分析する必要があります。
5. 結論
この記事の要点として、プログラミング言語を選択する前に、まず、キャリアの中でどの道をたどるつもりかを決める必要があります。 両方のレベルの抽象化を学ぶことができますが、低レベルのプログラミング言語の場合、アプリケーションの数はより制限されていることに注意する必要があります。