どーもー、現在某IT系の会社でjavaエンジニアとして働ている者です。(当ブログの管理人です)
現在、エンジニアやプログラマーとして働いている方はもちろん、プログラミングを勉強中の方であれば、「コンパイラ言語」や「インタプリタ言語」について聞いたことある人は多いでしょう。
※世の中に数多くあるプログラミング言語は、大きく以下の二つに分けることができます。
- コンパイラ言語
- インタプリタ言語(スクリプト言語とも呼ばれる)
というわけで、今回の記事では、この2つの特徴(メリット・デメリット)や違いについて。
また、それぞれの代表的な言語の一覧についても、順に解説していきます。
以下、目次です。
- コンパイラ言語とは ~JITコンパイルについても解説します
- インタプリタ言語とは
- それぞれの特徴と違いについて ~メリット・デメリットまとめ
- コンパイラ言語とインタプリタ言語の、おすすめなプログラミング言語一覧
コンパイラ言語とは ~JITコンパイルについても解説します
コンパイラ言語とは、冒頭で記述している通り、プログラミング言語の種類の一つとなります。
世の中には、JavaやC言語、PHPやRUBYなど、数多くのプログラミング言語がありますが、どの言語でも必ず、マシン(PC)が理解できる「機械語」に翻訳されてから、実行されることになります。
この時、「機械語」に翻訳されることを「コンパイル」と呼び、
コンパイラ言語では、プログラムの実行前に、事前にソースコード(JavaやC言語などで記述されたプログラム)を一括で機械語に翻訳しておいてから、実行する仕組みをもちます。
具体的な流れとしては、
- ソースコードが記述されたファイル(プログラミング言語で記述されたファイル)
- 上記のファイルをコンパイル → コンパイル済み(機械語)のファイルが生成される
- コンパイル済みのファイルを実行することで、プログラムの処理がおこなわれる
※2回目以降の実行・・・コンパイル済みのファイルを新たに作成する必要なない(すでに作成されているので)
ちなみに、コンパイラ言語自体も、大きく2種類に分けることができます。
上述のように、一括で「機械語」にコンパイルして、実行するものと、
もう一つは、「機械語」ではなく、「中間言語」と呼ばれるコードに事前に変換してから、
実行時は、「中間言語」のコードを1行ずつ「機械語」に変換しながら実行していく仕組みの、「JITコンパイラ」というものがあります。
※中間言語とは・・・指定のプログラミング言語の専用の実行マシンが理解できる言語のことです。
JITコンパイラ言語の代表的なものに、Javaや、.NET Framework(C#や、VB)がありますが、
例えば、Javaの場合、Javaで記述されたソースコードは、まずコンパイルによって「Javaバイトコード(中間言語)」に変換されます。
次に、Java専用の実行マシン(インタプリタ)である「JVM」によって、この「Javaバイトコード(中間言語)」を1行ずつ「機械語」に変換しながら処理を実行していく。。という流れとなります。
JITコンパイラ言語は、一括で「機械語」にコンパイルして、実行する形式のコンパイラ言語と比較すると、実行速度の面で遅くなるデメリットはありますが、
「中間言語」への変換ステップを追加することで、専用の実行マシンさえあれば、OSに依存しない。といったメリットがあります。
要は、Windows上でもMac上でもLinux上でも、同じようにコンパイルして実行することが可能。ということです。
ちなみに、中間言語(バイトコード)という、機械語に近いレベルのコードまであらかじめ変換しておくことで、インタプリタ言語よりかは高速に実行されます。
(インタプリタ言語については、後述にて詳細に解説しています)
COBOLという言語は、60年も前の古いプログラミング言語にも関わらず、現在でも金融など一部の業界では、未だに需要がある言語として有名です。
インタプリタ言語(スクリプト言語)とは?
続いて、インタプリンタ言語についてです。
こちらは、上述のコンパイル作業(機械語に事前に変換する作業)はなく、ソースコードをそのまま実行することになります。
ただし、当然「機械語」でないと、マシン(PC)は、実行することができませんから、実行する際に、1行ずつ「機械語」に変換しながら実行していくのが、インタプリンタ言語になります。
ちなみに、インタプリンタ言語は、スクリプト言語とも呼ばれます。
1行ずつ「機械語」に変換しながらの実行になるので、当然「コンパイラ言語」と比較したら、実行速度が遅くなってしまうデメリットはあります。
以上、コンパイラ言語とインタプリタ言語、それぞれの仕組みや概念について解説してきました。
次は、それぞれの特徴や違いについて。
コンパイラ言語とインタプリタ言語の特徴と違いについて ~メリット・デメリットまとめ
ここでは、それぞれの言語の特徴や違いについて、以下3つの観点でまとめてみたので、順に解説していきます。
-
「プログラムの実行速度」
これは、上述でも解説してきましたが、事前に「機械語」に変換するか・しないかで、実行速度に大きく差が生まれてしまいます。
当然、実行時に1行ずつソースコードを機械語に変換して実行するインタプリタ言語の方が、実行速度が遅くなってしまいます。
実際、ネットサービスの大手会社が、ユーザー数やアクセス数が大規模になったタイミングで、処理速度の向上を目的として、インタプリタ言語からコンパイラ言語に変更するケースは、よくある事です。
例えば、多くのアクセスやユーザーを抱えるツイッター社が、2012年頃に、システムをRubyからJavaへ移行したエピソードは、業界では有名な話です。
-
「プログラムを実行するまでの手間」
こちらも、前章で解説してきた内容になりますが、
コンパイラ言語では、ソースコードを、事前に機械語に変換(コンパイル)しなければ、実行自体ができません。
逆に、インタプリタ言語では、ソースコードを、そのまま実行することが可能です。
なので、手間の面でいえば、インタプリタ言語の方が手軽に実行できる。といったメリットがあります。
なので、「気軽に動作確認したい!」とか、「動作確認しながら、修正していきたい」といった観点では、インタプリタ型言語が向いています。
逆に、コンパイラ言語では、ソースを修正すれば、再度コンパイル作業が必要ですし、そもそも、開発を進めるには、コンパイラをインストールしたりと、開発環境の構築にも手間が掛かってしまいます。
こういった観点から、インタプリタ型言語の方が、初心者が学ぶ言語として推奨されてる事が多いですね。
※ただし、コンパイラ言語でも、ほとんどの開発環境(ツール)では、ソースを修正したら、自動的にコンパイルをしてくれるので、
開発環境を利用する場合は、コンパイル作業の手間を感じる事は、ほぼ無いと言っていいでしょう。
自動的にコンパイルしてくれ、さらに文法エラーなども自動的に出力してくれるので、非常に便利になっています。
-
「向いている開発規模」
上述の内容からも分かる通り、実行処理速度やリソース(メモリ)消費の面で優れているコンパイラ言語は、大規模な開発に向いています。
大規模なユーザー数やアクセス数を管理・運用していかなければならないようなシステムですね。
逆に、規模が小さく、自分1人で開発していくようなシステムでは、動作確認や開発作業の手軽さから、インタプリタ言語の方が向いているでしょう。
以上、3つの観点での、それぞれの言語の特徴や違いのまとめでした。
コンパイラ言語とインタプリタ言語の、おすすめなプログラミング言語一覧
最後に、それぞれの言語の代表的なプログラミング言語をまとめていこうと思います。
まずは、コンパイラ言語のおすすめ:3選になります。
-
「C言語」
プログラミング言語の中で、非常に歴史が長く、おそらく最も知名度が高いのが、この「C言語」です。
大学や専門学校など、プログラミングを学ぶ場で、採用されている事も多いですね。(私も授業で最初に学んだのが、C言語でした)
C++や、C#、Javaなど、多くの言語が、このC言語から影響を受けて作られています。
古い言語ながら、現在でも非常に需要が高く、ソフトウェア開発からコンピューター機器、自動車などのハードウェア製品など、様々なところに採用されております。
他の言語と比較して、とにかく処理速度が速いことが特徴で、メモリの割り当てや解放など、直接的にメモリ管理ができるところも、他の言語には無い特徴となります。
-
「VB、C#(.NET Framework)」
こちらは、どちらもマイクロソフトが開発したプログラミング言語で、代表的なコンパイラ言語の2つになります。
上述のC言語やJavaから影響を受けているため、Javaと構文が似ています。
構文だけじゃなく、オブジェクト指向や静的型付けなどの特徴がJavaと同じなので、Java経験者であれば、非常に扱いやすい言語となります。
どちらも、マイクロソフトが提供する「.NET Framework」というフレームワークの上で動作させることが可能で、様々な現場で採用されています。
C# については、現在はVR業界でも活躍しているようですね。
-
「Java」
こちらも非常に有名なプログラミング言語ですね。C言語と同じく、聞いたことがある方は多いでしょう。
現在、javaを提供しているオラクル社によると、2016年の段階で、900万人以上の開発者がいるとレポートされており、2019年には、全世界の3億のコンピュータデバイスでJava実行環境が動作しているとしています。
当然、求人数も非常に多く、以下、ITエンジニアに特化した求人サイトのレバテックのレポートでは、「プログラミング言語別求人案件数(2019年度)」で、断トツの1位となっています。
私自身も、現在仕事で利用しているのが、この「Java」になります。
※Javaについては、以下の記事でも詳細に情報をまとめているので、良かったらぜひ。
以上、おすすめのコンパイラ言語:3選でした。
続いて、
インタプリタ言語のおすすめ:4選をまとめていきます。
-
「PHP」
WebサイトやWebアプリの開発で多く利用されており、ブログCMSとして、世界中で利用されている「Wordpress」にも採用されています。
(当サイトも、Wordpress で作成しています。)
ラスマス・ラードフ氏という方によって、1995年に開発された言語であり、世界中多くのWebサイトやWebアプリで採用されている人気言語になります。
-
「Ruby」
こちらも、PHPと同様にWebサイトやWebアプリの開発で多く利用されている言語になります。
日本だけでも、Gunosy、食べログ、価格.com など、Webサービスの有名企業が多く採用しています。
ちなみに、この「Ruby」を作成したのは、日本人技術者の「まつもと ゆきひろ」という方で、1995年に開発されたそうです。
その後、「Ruby on Rails」という、Rubyのフレームワークが開発されてから、世界中で一気に需要を伸ばしてきました。
また、インタプリタ言語として代表的な「Ruby」ですが、「ver:2.6.0」にて、JITコンパイラが導入されたことによって、JITコンパイラ言語として処理速度を格段に向上させることも可能とのことです。(このように、昨今では、インタプリタ言語もコンパイラ言語も、その垣根がだんだん縮まりつつあるのが、現状のようです)
-
「Python」
ここ数年、特に勢いがあり、注目を浴びるようになったのが、この「Python」です。
歴史は、1991年開発と、PHPやRUBYよりも少し古い言語になりますが、
スクレイピングによるデータ収集や分析、ビッグデータの解析、機械学習によるAI開発など、ここ数年で注目を浴びるようになった技術と共に、
これらの技術や需要に向いているプログラミング言語として伸びてきたのが「Python」になります。
-
「JavaScript」
こちらも聞いたことがある方は多いでしょう。大体のWebアプリやサイトには、必ず利用されている言語となります。
上述で挙げてきたものは、すべてサーバーサイドの言語になりますが、JavaScript は、クライアントサイドの言語になります。
(サーバーサイドというのは、Webサイトを公開するサーバー上で動作するプログラムのことで、逆に、クライアントサイドというのは、Webサイトを閲覧する側(ブラウザ)で動作するプログラムのことです。)
主に、Webサイトの表示内容に、動きやアニメーションを付けるときに利用されるのが、JavaScript になります。
誕生は1995年で、ネットスケープ・コミュニケーションズ社によって開発されたプログラミング言語になります。
ちなみに、”Java” という文字が含まれていますが、上述の「Java」とは全く関係はありません。
以上、おすすめのインタプリタ言語:4選でした。
というわけで、ここまでのコンパイラ言語と、インタプリタ言語の特徴や違いについてまとめてきました。
現在、プログラミングを学んでいる方や、今後学ぼうと思っている方の参考になっていれば幸いです。
※プログラミング言語は、今回紹介した2つの種類とは別に、以下2つの種類に分けられることもよくあります。
興味のある方はぜひ参考にしてください。