プログラミングとは。プログラム言語とは。新しい世界への扉
ソフトウェアの基礎 – その最初の一歩
プログラミングと言語
動かしたい内容を書いて、それをOSやハードウェアに実行させる。それがプログラミングです。
様々なプログラム言語があり、その書き方は異なります。似たような言語もあれば、意図的に似せている言語もあります。
そして、大きく分けて、書いたプログラムをそのまま実行するタイプと、あらかじめ実行ファイルに変換しておいてから実行するタイプに分けられます。
そのまま実行するタイプで使用されるアプリケーションはインタープリタと呼ばれます。
実行ファイルに変換するアプリケーションはコンパイラと呼ばれます。
プログラムの書かれたファイルをソースファイル、あるいはソースと呼びます。
WindowsのバッチファイルやLinuxのスクリプトファイルはインタープリタで実行されるソースファイルです。インタープリタがソースに書かれている命令を1つずつ読み込み、その内容に応じてインタープリタが代わりに実行してくれます。
その為、非常に敷居が低いというメリットの反面、スピードが遅い等のデメリットがあります。
その点、あらかじめコンパイルして実行ファイルに変えてしまうコンパイラが有利ですが、コンパイルという手順を踏まないと実行できないので、インタープリタほど手軽とは言えません。
様々なプログラミング言語は、その目的に応じて作られてきました。
javaやrubyはWEB環境に適し、C言語やアセンブラ言語は機械を素早く動かすのに適しています。
しかし、これら多くの人に愛された言語は、優れたツール群に支えられ、分野を飛び越えて様々なシーンで利用されています。javaで機械を動かすこともできれば、C言語でWEBプログラムを動かすこともできます。
しかし、得意な分野で使うと、楽に作れたり、パフォーマンスが優れていたりといった利点が生まれます。
最初のプログラム言語 – 機械語とアセンブラ
その中で最も歴史が古く動作が早いのがアセンブラという言語です。コンピュータというハードウェアの誕生とともに、ハードウェアを動かす言語として生まれ、常に寄り添ってきたソフトウェアです。しかし、非常にハードウェア寄りの言語であるため、人が書いたり読んだりするのは非常に困難です。そのアセンブラを人が読みやすく書きやすいレベルまで引き上げたのがC言語です。
機械=ハードウェアに対して直接命令を下せる言語を機械語といいます。機械語は0と1の羅列であり、とても我々が読み書きできるものではありません。(原初のコンピュータを開発した偉人たちはこれを読み書きしていたのですが。情報系の学生で触れたことがある方もいらっしゃるかもしれませんね)
それをキーワードと数字で表現したものがアセンブラ言語です。命令の種類は少なく、極限られたもので、それを組み合わせてささやかな動作を起こします。
そしてそれを更にたくさん積み重ねて1つの動作を実行させます。
それは、1つの計算であったり、せいぜい1つの文字を表示したり、といった小さな動作です。
アセンブラ言語で書かれたソースを機械語の実行ファイルに変化させるプログラムをアセンブラと呼びます。(正確にはアセンブラ言語ではなくアセンブリ言語。)
C言語
アセンブラ言語で数行~数千行で表現しなければならない複雑な内容を、C言語では1行で表現できます。
そして、複数行のC言語で書いたプログラムは、ようやく一つの仕事をなしえます。
例えば、画面にHelloWorld!と表示するなどのささ
「Hello World」 – ワンパターン?
やかながらも大きな仕事です。
プログラミングを学ぶとき、最初のプログラムはいつもこれ。
何てワンパターンな、と思いました。若かった私も。いや、分からないでもないですけどWorldとは大層な。なんて。
しかし、大きな一歩を踏み出す勇気を与える思い出のキーワードです。「World」決してオーバーな言葉ではないのです。あなたの目の前にも、あらたな世界への扉が開け放たれているのです。
コンパイルの裏ではリンクやアセンブルが実行される
さて、コンパイルと一言で言っても、実は裏ではC言語からアセンブラ言語へのコンパイルと、アセンブラ言語から機械語へのアセンブリと、2つのステップが実行されます。
更に言うと、複数のファイルをコンパイルするのが常ですので、実際には、ファイル毎にオブジェクトという中間ファイル(アセンブリ言語の変形)にコンパイルしてから、リンカというツールで1つの実行ファイルに結合します。
話が難しくなってきましたが、実は、Linuxではこれが簡単にできます。
レシピは簡単。
- UbuntuというLinuxをインストールしたPCを1つ用意。
- メモ帳の様なアプリで下記の様なソースを書いてtest.cというファイル名で保存。
- ターミナルというコマンド入力画面を開き、gcc test.c と入力する。
するとコンパイルされ、a.outという実行ファイルができる。 - ./a.out と入力すると実行され、HelloWorld!と表示される。
#include <stdio.h> int main() { printf("HelloWorld!\n"); return 0; }