【図だけで十分かも?】スクリプト言語とコンパイル型言語って何?

この記事の目的

スクリプト言語コンパイル型言語って何?どんな違いがあるのか?って話が度々上がり、その割にはきちんと理解してくれたのかどうかモヤモヤする。そんなこんなをこの際きっちりきっかり終わりにしようという記事です。

簡単な説明

疑問を持ってこのページを訪れて下さった方は、ここだけ読めば良いと思います。極力余計なことを含まず、それでいてできるだけ正確に言い表す様に心がけました。

スクリプト言語

上図では例としてPythonを上げています。開発するのはスクリプト(テキスト)のファイルです。①で示すとおり、Pythonのコマンド自体がOS上では動作していてスクリプトは読まれているだけです。

Pythonコマンドがどんな動きをすれば良いかの指示が、スクリプト(テキスト)に記載されているという構造です。

もしPythonに興味があれば、当サイトのコンテンツも参考にしてみて下さい。

コンパイラ型言語

上図では例としてCコンパイラ(C言語)を上げています。開発するのはソース(テキスト)のファイルです。②で示すとおり、Cコンパイラがソース(テキスト)を読み込み、③の通りアプリAを生成します。実際に動作するのはアプリAです。

つまりはみなさんのお手元のExcelは、マイクロソフト社のどこかのパソコンでコンパイルされたアプリAということになります。

詳しめな説明

なんだそういうことかよって思った方はもう少し先に進んでみましょう。

そもそも

そもそもなのですが、スクリプト言語とコンパイル型言語は、本来は対で語られるべき言葉ではありません。コンパイル型言語の説明として「インタープリタ型言語ではないコンピュータ言語」という説明を用いる時、ほとんどのスクリプト言語がインタープリタ型に分類され、そして実際に使う時の作業の内容を反映してスクリプト言語とコンパイル型言語が対で語られることが多いというのが実情です。

その他のスクリプト言語の例

スクリプト言語にはPythonの他、RubyやPHP、ブラウザで動作するJavaScript等もスクリプト言語です。

その他のコンパイラ型言語の例

コンパイル型言語にはC言語の他、C++、Javaなどがこれに分類されます。

コンパイル

コンパイル型言語のアプリAを生成する作業をコンパイルといいます。小さなサンプルプログラムなら一瞬ですが、大規模な本格的なアプリともなると、このコンパイルに何時間という時間がかかったりもします。実際には小分けにコンパイルして、後で合体させるという手法をとることで、この時間を短縮することが可能ですが、そもそも時間がかかる作業だとご理解下さい。

実行速度

コンパイラ型言語の場合、作成済みのアプリAを動作させるのに比べて、その場その場でスクリプト(テキスト)を読み込んで実行するため、コンパイラ型言語に比べると低速です。

これはコンパイル済みのモジュールを実行するかインタープリタによる逐次解釈とその実行という構造から来る原理原則を述べているだけで、実際に比較テストを行うと特定の部分の処理はどちらもほとんど変わらない等といったことは十分起こりえます。この部分はスクリプト言語の開発者の努力に感謝ですね。

大規模か小規模か

よく語られる文脈です。きっと多くの場合は、スクリプト言語が小規模向きで、コンパイラ型が大規模向きということが語られがちです。ですが実際には、FaceBookはPHP(正確にはHack)で、YouTubeがPythonで出来ていると言われていますが、大規模というのは何を指しているのかの議論が必要そうです。

実行が比較的容易

ここでは主語を「スクリプト言語」にしておきます。一番わかりやすい例は、JavaScriptが上げられます。書いたコードはブラウザがあれば実行可能です。なので簡単に試すことが可能です。

多くの場合スクリプトを書いては実行、書いては実行という流れを指して比較的実行が容易とされています。

ただ、歯切れの悪い表現からもお分かりいただけるとおり、実際にはWindowsのGUIアプリを開発していても、統合環境内で書いては実行、書いては実行が実現されているので、「ホントにそうなの?」って改めて聞かれると、絶対的な話ではないと答えてしまいそうです。

一番の違いは?

一番の違いは、スクリプト言語は開発したスクリプト(ソースコード)を実行する人に手渡す必要があるという点かと思います。もしもあらゆる観点で両者に差がなくなったと仮定して、マイクロソフトがExcelのソースコードを貴方に渡すことがあるでしょうか?

つまりソースコードを渡してしまうことで生じる問題、損失がある場合には、採用することが出来ません。

Always Basics
ベテランコピペプログラマー。

コメントする

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