プログラミング言語の基本的な違い: 実行方式でざっくり理解する
前置き
※ この記事は、言語仕様の細かい差ではなく、まず「どう実行されるか」の違いをつかむための入門向けまとめです。
- ソフトウェア初学者向けに全体像をつかむことを目的にしています。
- 理解しやすさを優先し、例外的な実装差や細かな最適化の話は省略しています。
- 実務ではAOT/JITなどの差があるため、詳細は各公式ドキュメントを参照してください。
この記事でわかること
- プログラム言語を「実行方式」で分けて考えた際のざっくりした立ち位置で3つに分類できます。(メジャーな言語中心です。他にもたくさんあります)
- C言語 / C++ / Rust など
- C#(.net) / Java など
- JavaScript /PHP / Python など
この記事の要点
- 言語の違いは、文法だけでなく「実行のされ方」にも出ます。
- ネイティブ実行系、VM+中間言語系、スクリプト系に分けると理解しやすくなります。
- 最初は厳密さよりも、どの層で実行されるかをつかむことが重要です。
まず全体像
ここでは、言語を次の3種類として整理します。
-
ネイティブ実行系
- 例: C、C++、Rust など
- コンパイルして、対象OS/CPU向けの実行ファイルとして動かします。
-
VM+中間言語系
- 例: C#、Java など
- まず中間形式へ変換し、VMやランタイム上で動かします。
-
スクリプト系
- 例: JavaScript、PHP、Python、Perl、Ruby など
- 基本はランタイムがコードを読み取りながら実行します。
実行の流れ(図)
1. ネイティブ実行系(C/C++/Rust など)
ネイティブ実行系は、ソースコードをコンパイルして実行ファイルを作り、それを直接動かすイメージです。
- 特徴
- 実行速度を出しやすいです。
- ハードウェアに近い制御をしやすいです。
- ビルド設定やメモリ管理の理解が必要になりやすいです。
- 向いている用途(例)
- 組み込み
- 高性能処理
- OS/デバイス寄りの処理
2. VM + 中間言語系(C#/Java など)
この系統は、いったん中間言語へ変換して、VMやランタイム上で動かす形が基本です。
- 特徴
- 実行環境が整っていれば動かしやすいです。
- 開発効率と保守性を取りやすいです。
- メモリ管理の一部をランタイムに任せやすいです。
- 向いている用途(例)
- 業務アプリ
- サーバーサイド
- 大規模チーム開発
3. スクリプト系(JavaScript/PHP/Python など)
スクリプト系は、基本的にランタイムがコードを読みながら実行する流れで学び始めやすいです。
- 特徴
- 試行錯誤しやすいです。
- 1ファイルから動かしやすいです。
- ライブラリやフレームワークの選択が幅広いです。
- 向いている用途(例)
- Webフロントエンド(JavaScript)
- Webバックエンド(PHP/Python/JavaScript)
- 自動化スクリプト、データ処理
勘違いしやすいポイント
- 「スクリプト系は遅い、ネイティブは常に速い」と単純化しすぎてしまいます。
- 「VM系は中間に1層あるから不利」とだけ捉えてしまいます。
- 「文法の違いだけが本質」と思ってしまいます。
実際は、実行環境や用途、設計で体感はかなり変わります。
最初は「どこで実行される言語か」を区別できれば十分です。
学習の最初の進め方
- まず1つの言語で「書いて動かす」を繰り返します。
- その後、別カテゴリの言語を1つ触って実行方式の違いを比べます。
- 比較の軸は、文法より「実行までの流れ」「デバッグしやすさ」「開発体験」で見ます。
まとめ
- 言語の基本的な違いは、実行方式で見ると整理しやすいです。
- ネイティブ実行系、VM+中間言語系、スクリプト系の3分類は、学習初期の地図として有効です。
- 次は「実際の開発でどう使い分けるか」を見ると、選び方がさらに明確になります。
この理解のあとに進めていけること
- 同じ簡単な処理を、3分類から1言語ずつで書いて、実行までの体験差を比較してみます。
備考
- HTML、XML、Markdown は、基本的に「処理を書くプログラミング言語」というより、構造や文書を表現するための記述形式です。
- これらは単体で計算や分岐を実行するというより、ブラウザ、パーサ、変換ツールなどに読み取られて使われます。
- そのため、今回の3分類(ネイティブ実行系、VM+中間言語系、スクリプト系)とは、役割の軸が少し異なります。