プログラミング
出典: フリー教科書『ウィキブックス(Wikibooks)』
目次 |
[編集] プログラムそのものを知る
[編集] プログラムとは
プログラムとは、コンピュータにある作業をさせるためにその一連の手順を記した物です。 コンピュータが元々理解できる命令は極めて単純な計算のみです。 プログラムはその単純な計算をどんな順序でどの値でどのように計算するかを書き並べることで、様々な処理を実現する物です。この時コンピュータにその手順を指示する為の言語がマシン語(機械語とも呼ばれます)と呼ばれるプログラム言語ですが、それはバイナリデータ(0と1の集合)であり人間がミスをせずに記述するのは困難です。そのため、より人間に読みやすい様々な種類のプログラム言語が作り出され、その言語で書いた後でマシン語に翻訳するというスタイルが一般的です。
[編集] 特定の言語に依存しない事柄
[編集] 低レベルの言語
低レベルの言語とされるアセンブラは、マシン語とほぼ1対1で対応する命令を文字列で書き並べマシン語に変換することで、マシン語よりは人間に読みやすいプログラミングを可能にしました。 ちなみに、マシン語とアセンブラはアーキテクチャ(CPUの種類)毎に異なっており、マシン語もしくはアセンブラで書かれたプログラムは基本的にはアーキテクチャ間の互換性がありませんが、CISC系CPUの大多数はIntel8008もしくはMotorola6800を拡張して発展しているため、実際にはある程度の互換性はあります。ただし、同じ名前の命令でもIntel系とMotorola系では意味が違う場合がありますので注意が必要です。RISC/VLIW系CPUにおいてもアセンブラが提供される場合がありますが、RISC/VLIW系CPUは基本的にコンパイラリッチであり、プログラム作成者がパイプラインの構造まで熟知してプログラムを作成するのは困難なため、特定部分のチューニング等にのみ使用されます。
[編集] 高レベルの言語
これに対し高レベルの言語とされるコンパイラ或いはインタプリタを用いる言語はコンパイラ或いはインタプリタがサポートする全ての環境で同じ言語を用いることができます。 インタプリタ式言語とコンパイラ式言語のもっとも大きな違いは翻訳がなされるタイミングです。 インタプリタ式言語が実行する際に翻訳(インタプリテーション)と実行を同時進行で行うのに対し、コンパイラ式言語は事前に翻訳(コンパイル)してマシン語のプログラムを作っておき実行時はそのマシン語のプログラムを使います。インタプリタ式言語は手軽に試せる、異常な動作をした際にインタプリタが止めてくれる等の利点がある反面実行時の処理速度には期待できません。コンパイラ式言語は実行時の処理速度に期待できる反面、問題のあるプログラムがシステムをクラッシュさせてしまう危険を伴います(もっとも、近年のシステムでは多くの場合オペレーティングシステムが異常を察知して全体のクラッシュを阻止してくれますが)。また、コンパイラやインタプリタが使用できない環境やコンパイラが書くマシン語よりトリッキーなプログラムを書く必要がある場合等は現在でもアセンブラが使用されます。
[編集] Javaの位置づけについて
Javaがコンパイラを使用する言語としてC言語などと同じ纏まりに含められていることに疑問を抱いた人もいるかもしれません。この言語はそれをサポートする全ての環境の間でコンパイル済みの状態で極めて高い互換性を持つために、コンパイル時にマシン語ではなく、マシン語ともとのプログラムの中間に位置する環境非依存のバイトコードと呼ばれるものが出力されます。そして実行時に各環境に合わせてバイトコードがマシン語に翻訳されます。しかしこれは、Javaというアーキテクチャのマシン語にコンパイルされたプログラムを、各環境で用意されたJavaというアーキテクチャのエミュレータで実行しているととらえることも可能なため、ここではコンパイラ式の言語のひとつとして扱っています。
[編集] 言語別解説
[編集] インタプリタおよびコンパイラの両方の実装が存在する言語
[編集] コンパイラを使用する言語
[編集] インタプリタを使用する言語
- Perl -- 実行ごとに動的にコンパイルを行うので正確にはインタプリタ実装ではない。
- Ruby
- Python
- JavaScript
- ShellScript(sh,ash,bash)
- ShellScript(csh,tcsh)
- PHP: Hypertext Preprocessor(PHP)
[編集] アーキテクチャ毎のアセンブラ
- CISCアーキテクチャー用アセンブラ
- 旧モトローラー系
- インテル系
- RISCアーキテクチャー用アセンブラ
- MIPS系
- ARM系
- SH系
- PIC系
- VLIW及びその他のアーキテクチャ

