はじめに
本日は前回のオブジェクト指向に続きスクリプト言語とコンパイル言語について説明していきたいと思います。
聞いたことはあったが具体的にそれが何を指すのかはまったくわかっていなかったので、ほかのタイプの言語の違いに触れながら説明していきます
スクリプト言語とは
プログラミング言語は大きく分けてスクリプト言語とコンパイル言語の2つに分けられます。
スクリプト言語とは、実行時に逐次的※に命令を処理する言語のことを指します。
※逐次的というのは順を追ってプログラムが実行されることを指します
Ruby
やPython
、JavaScript
などが代表的なスクリプト言語です。
これらの言語はインタプリタと呼ばれるプログラムによって1行ずつ読み取られ、逐次実行されます。
スクリプト言語の特徴は以下の通りです。
- プログラムのソースコードが逐次的に解釈され、その場で実行するインタプリタ型を採用
- コンパイルを経ずにコードを書いてすぐに実行できるため、スクリプト言語は開発スピードが早い
- コードを実行しながら動作確認をしやすい環境(例:
Ruby
のIRB
やPython
のREPL
)が提供されることが多く、デバッグが簡単
Ruby
やPython
のような人気の言語がスクリプト言語といわれています。
続いてメリットとデメリットについてみていきましょう
スクリプト言語のメリット
- 逐次的に実行できるため、コードを書いたらすぐにテストでき、素早く結果を確認できる
- インタプリタが環境さえ揃っていれば、異なるプラットフォームでも同じコードが実行できるため、開発者はOSの違いを気にせずにプログラミングが可能(柔軟性が高い)
- 簡単な文法で、初心者がプログラミングを学ぶのに適している言語が多い
スクリプト言語のデメリット
- インタプリタが逐次的に命令を解釈するため、コンパイル済みのプログラムに比べて実行速度が劣る
- コンパイル言語と異なり、実行時に初めてエラーが発生することが多いため、大規模なプログラムでは予期しないエラーが途中で起きる可能性がある
- 高度な最適化やパフォーマンスが要求される大規模なシステムでは、スクリプト言語の実行速度やメモリ使用量の問題がネックになることがあるため、大規模プロジェクトには不向きな場合もある
コンパイル言語とは
一方コンパイル言語は、ソースコード全体を一度に機械語に変換してから実行する言語です。C言語
やJava
,Fortran
などがこれに該当します。
これらの言語はコンパイラと呼ばれるプログラムによってソースコードが機械語(実行ファイル)に翻訳され、その実行ファイルがコンピュータ上で実行されます。
大学のときにFortran
を使っていたことがあるのですが、コンパイルエラーによくなっていたのでとても懐かしく感じますw
なお、コンパイル言語の特徴は以下の通りです
- 実行前に一度コンパイラを通してソースコードを機械語に変換するので、実行時の速度が高速になることが多い
- コンパイル時にプログラム全体を解析するため、タイポや構文エラーなどが事前に検出されエラーの検出が早くなる
- コンパイル後は、独立した実行ファイルが生成されるため、他の環境に移植しやすい
つづいてコンパイル言語のメリットデメリットを見ていきましょう
コンパイル言語のメリット
- 実行速度が速い
これは特徴にも書いてあるので重複しますが、一覧で見れるように書いています。 - 独立した実行ファイルを作成できる
これも特徴にかいてあるメリットです。
これにより、依存ライブラリやインタプリタがインストールされていない環境でも、プログラムを実行可能です。 - リソース効率が良い
コンパイルされたプログラムは、直接ハードウェアで実行される機械語に変換されているため、メモリやCPUの使用効率が良いです。
特に、大規模なシステムやリソース制約の厳しい環境では、この効率性が重要になります。 - 事前にエラーを検出できる
コンパイラはプログラム全体を事前に解析し、構文エラーや型の不整合、未定義の変数などのエラーを実行前に検出します。
これにより、プログラムの品質を事前に確認できるため、実行時にエラーが発生しにくくなります。
特に、大規模プロジェクトでは、コードの整合性を保つために、コンパイル時のチェックが有効です。
コンパイル言語のデメリット
- コンパイル時間がかかる
プログラムを実行する前に、ソースコード全体をコンパイルする必要があるため、大規模なプログラムではコンパイルに時間がかかることがあります。これにより、コードを書いた後のフィードバックサイクルが遅くなる可能性があります。
また、開発中に頻繁にコードを変更する場合、毎回コンパイルが必要になるため、インタプリタ型の言語に比べて反復的な開発に向いていない部分もあります。 - プラットフォーム依存性
コンパイルされた実行ファイルは、特定のプラットフォームに依存することが多いです。
例えば、Windowsでコンパイルされた実行ファイルは、LinuxやmacOSではそのまま動作しません。このため、複数のプラットフォームで動作させるには、各プラットフォーム向けに再コンパイルする必要があります。
移植性の確保が必要なプロジェクトでは、この点が負担となることがあります。
結局どっちがいいの?
どちらかが優れているからこっちを使おうというよりは、ケースに応じて使い分けるのがいいのかと思います。
アプリケーションという面でスクリプト言語とコンパイル言語を比べてみましょう。
スクリプト言語はWeb開発や自動化に適しています。
Webサーバーやバックエンドの開発では、PHP
、Python
、Ruby
などのスクリプト言語がよく使われます。また、システム管理や自動化スクリプト、データ解析などのタスクにもスクリプト言語がよく利用されます。
例: Webサイトの開発(Ruby on Rails
、Django
、Node.js
)、サーバーサイドスクリプト、データ解析スクリプトなど。
一方でコンパイル言語はシステム開発やハードウェアに近い部分で使用されることが多いです。
低レベルの制御が必要なシステム(例: オペレーティングシステムやデバイスドライバ)では、C言語
やC++
のようなコンパイル言語が適しています。
また、高パフォーマンスが求められるゲーム開発やハードウェア制御もコンパイル言語が強みを発揮します。
例: 組み込みシステム、ゲーム開発、OS開発など。