プログラミング言語#
導入
教科書1章
講義0.3回分
機械語#
機械語とは0と1のビット列で構成される命令列である.
機械語プログラムはコンピュータが直接理解できる唯一の言語であり,機械語,すなわちCPUへの指示(命令)が列挙される.CPUへの指示としては,データ転送(load store等)や四則演算(add sub等)が含まれる.
アセンブリ言語#
機械語プログラムは人間にとって分かりやすいものではない.この問題を軽減するためにアセンブリ言語が開発された.機械語の命令列は1対1でアセンブリ命令に置き換えることができる.
以下は,単一のレジスタ(1)を持つ極めて単純なコンピュータのアセンブリ言語プログラムと,対応する機械語プログラムの一例である.
- レジスタはCPUに内蔵された記憶装置のこと.主記憶装置(メモリ)とは別物である点に注意.主記憶装置と比べて高速で低容量である.
 
単純なアセンブリ言語プログラム
  load  B    // メモリB番地の内容をレジスタに転送
add   C    // レジスタの内容にメモリC番地の値を加算
store A    // レジスタの内容をメモリA番地に格納
上記プログラムの挙動
 レジスタ    メモリ
          1  2  3  番地
          A  B  C  記号番地//(1)!
-------------------------------
   0      3  4  5  格納されている値(初期状態,値に意味はない)
-------------------------------
   4      3  4  5  load  B
   9      3  4  5  add   C
   9      9  4  5  store A
- 記号番地とはメモリの実番地に付与された名前・ラベルのこと.
 
高級言語#
アセンブリ言語によって,0と1の列挙ではなく意味のある操作(load store等)の記述が可能になった.また記号番地(A B等)も利用できる.しかし,機械語命令とアセンブリ命令は相変わらず1対1の関係にあり,人間の思考レベルで考えると低水準である.人間がその意味を知っている,抽象度の高い概念を用いるべきである.
Quiz
次の低水準指示の意味を考えよ.
- 親指と小指と薬指を折り曲げよ
 - 人差し指と中指をまっすぐに伸ばせ
 - 手のひら側を相手に向けよ
 
Answer
この人間の思考レベルとアセンブリ言語の隔たりを埋める方法として,高級言語が開発された.最初の高級言語はFortranである.Fortran開発者はジョン・バッカスである.
John Warner Backus
 ©1
C言語やJava,Python,Rustなどは高級言語である.現在でも新たなプログラミング言語が提案され続けている.
プログラミング言語の歴史
 ©1
コンパイラ#
高級言語で記述されたプログラムは,コンピュータが直接理解し実行できる機械語へ翻訳される必要がある.この翻訳作業をコンパイル,翻訳システムをコンパイラと呼ぶ.
以降では高級言語を単にプログラミング言語と呼ぶ.
プログラミング言語とは?#
プログラミング言語の目的と必須条件を整理する.
- 目的:
 - プログラミングの労力を軽減すること
 - 必須条件:
 - ・プログラムを書く記法が定義されていること(厳格な構文を持つこと)
 - ・コンパイラが実現できること(機械語に翻訳可能であること)
 - 持つべき望ましい特性:
 - ・簡潔・明晰な表現機構を持つ
 - ・高い記述能力を持つ
 - ・プログラムに明確で曖昧さの無い意味を与えられる
 - ・プログラムの信頼性・再利用性・テスト容易性を高める機構を持つ
 - ・高品質のコードを生成するコンパイラが実現できる