
CONTENT
こんにちは、大阪のエンジニアHです。
私はずっとプログラミング言語として、主にJavaやVisualBasicを扱ってきました。
最近、お仕事の都合でPerlという言語を扱いまして、久々にプログラム実行時に準備がいらない(と言うのは言い過ぎですが)言語に触れ、実行と確認が楽だな~と感じました。
折角なのでこれをネタにしちゃおうかと思います。
■コンパイル
プログラムを作成、または改修して実行する前に、JavaやVisualBasicではまず「コンパイル」を行います。
人間が読み書きしやすい様に書かれているプログラムを、PCやサーバと言った「機械(マシン)」が読み取り、実行できる様に変換する処理のことを言います。
プログラムを実行する前にあらかじめコンパイルを行うことから「コンパイル型言語」とも呼ばれます。
代表的なコンパイル型言語としては、既に挙げたJavaやVisualBasicの他に、C言語、C++、C#、Go、Swift、Kotlinなどがあります。
そして、最近私が触れたPerlという言語については、コンパイル型言語とは異なり、プログラム実行時に1行ずつプログラムを読み込み解析を行いつつ実行していきます。
事前にコンパイルという一括変換を行わず、逐次解釈していくタイプの言語は「インタプリタ言語」と呼ばれたりしています。
■インタプリタ言語
代表的なインタプリタ言語としては、Perlの他にも、Python、Ruby、JavaScript、PHPなどがあります。(むしろPerlは既に珍しい言語かもしれない)
基本的にはプログラム言語と呼ばれるものは「コンパイル型言語」か「インタプリタ言語」のどちらかに分類されます。
冒頭で私が準備がいらないと言ったのは、コンパイルを行わなくて良い為で、修正したソースをすぐに実行、確認出来て楽だなと感じました、というお話です。
ついでに、ざっくりとコンパイル型言語とインタプリタ言語のそれぞれのメリット、デメリットについても触れておこうと思います。
■コンパイル型言語のメリット、デメリット
コンパイル型言語のメリットですが、事前にコンパイルを行いますが、コンパイルした際にプログラムのエラーチェックが行われますので、プログラムの実行前に不備を修正することが出来ます。
次に、コンパイルによって機械に向けた変換、つまり実行のための最適化が行われているということになりますので、プログラム処理の実行が早い、という利点があります。
また、コンパイルで変換され人間にとっては読み解けなくなるため、セキュリティ効果もあります。
デメリットとしては、コンパイルには時間が掛かる、ということです。
また私が冒頭で触れた話に戻りますが、プログラム実行の準備、というのがコンパイルのことを指しており、割と時間が掛かってしまいます。
これはプログラムの規模にもよりますが、企業のシステムと言うと割と大きなものになりやすいので、時間も相応に掛かります。
次に、コンパイルではプログラム的なエラーはチェックされますが、実行時に発生した処理的なエラーについてのデバッグを行う際にも、
コンパイルを必ず通さなければならない為、デバッグに手間と時間が掛かってしまいます。
また、基本的にはコンパイルした環境に依存してしまうので、様々な環境で扱うためには、それぞれの環境に合わせてコンパイルする必要があります。
■インタプリタ言語のメリット、デメリット
インタプリタ言語のメリットですが、プログラムを解釈しながら実行するため、すぐに実行して結果をフィードバックすることが出来ます。
次に、ソースコードを用意することで実行することが出来るため、環境に依存せず、様々な環境ですぐに実行することが出来ます。
デメリットとしては、コードを1行ずつ解釈しながら実行するため、プログラム処理の実行速度としては、コンパイル型言語と比べると遅い、という点があります。
次に、プログラムに不備がある場合でも実行しなければエラーが出てこない為、開発中のデバッグが難しい場合があります。
但し、この点はすぐに修正して再実行することが出来るため、人によってはデメリットよりもメリットと捉えることも出来ます。
ざっくりと以上がコンパイル型言語とインタプリタ言語についてになります。
初めてプログラミング言語を扱う場合で、プログラミング言語にこだわらない場合はインタプリタ言語が気軽に触れて良いのかなと個人的には思ったりします。
以上、プログラムの言語のタイプについて少し触れてみました。