近年のコンピュータは高性能なCPU、大容量のメモリ、高速通信が行えるネットワークカードなど、様々な高度な装置によって構成されています。これらの装置の性能を十分に発揮させるためには、しっかりとした管理が必要です。基本ソフトウェア(オペレーティングシステム,OS)は、コンピュータに備わるさなざまな装置を管理するソフトウェアです。

画像参照:https://pc-yougo.com/software/
プログラミング言語
プログラミング言語とは、人間がコンピューターに指示を出すための「言葉」で、Python、Java、JavaScriptなどが有名で、Webサイト、アプリ、システム開発など、身の回りのあらゆるデジタル機器の動作を制御するために使われ、人間が理解しやすい形式で書き、コンピューターが実行できる「機械語(0と1)」に変換されます。目的(Web、アプリ、AIなど)や開発する領域(フロントエンド、バックエンド)に応じて様々な言語が使い分けられ、近年はPythonやJavaScriptの人気が高い傾向にあります。
代表的なプログラミング言語
| 言語 | 特徴 |
|---|---|
| BASIC | 初心者でも学びやすいシンプルで直感的な文法が最大の特徴で、行番号を用いて命令を記述し、インタプリタ型で逐次実行されるため修正が容易、手続き型言語としてプログラミングの基礎を学ぶのに最適です。 |
| C | 高い汎用性(OS、組み込み、アプリなど幅広い分野で利用可)、トップクラスの処理速度(ハードウェアに近い低水準操作が可能で高速)、メモリ管理の自由度(パフォーマンス最適化)、そして習得難易度の高さ(ポインタなどハードウェア知識が必要)です。 |
| C++ | C言語の高速性と互換性を継承しつつ、オブジェクト指向プログラミングに対応した点にあり、処理速度が非常に速く、メモリ管理の自由度が高く、大規模システムやゲーム開発、OS、組み込みシステムなど幅広い分野で使われる多機能で強力な言語です。一方で、多機能ゆえに学習難易度が高いことやコードが複雑になりがちという側面も持ち合わせています。 |
| Java | 一度書けば、どこでも実行できるというプラットフォーム非依存の特性です。また、オブジェクト指向言語であり、コンパイラ言語であるため、処理速度が速く、静的型付けによる堅牢なコード作成が可能です。加えて、豊富なAPIとライブラリ、自動メモリ管理、高いセキュリティ性、そしてAndroidアプリ開発や大規模システムでの利用といった応用性の高さも特徴です。 |
| JavaScript | Webページに動きや対話性(インタラクティブ性)を加えるスクリプト言語で、ブラウザ上で実行され、HTML/CSSと連携して動作します。特徴は、豊富なライブラリ・フレームワーク、フロントエンドからバックエンド(Node.js)まで対応できる汎用性、非同期処理による高速化、そして開発環境の構築が容易な点にあり、初心者からプロまで幅広く利用されています。 |
| Python | シンプルで読みやすい構文(少ないコードで記述可能)、AI・データサイエンス・Web開発など幅広い用途に対応、豊富なライブラリとフレームワーク(Django, Flask, NumPy, Pandasなど)、大規模なコミュニティとオープンソースである点です。 |
プログラム実行までの流れ
CやJavaなどの言語で書かれたプログラムは、下記のような形態を持っていおます。
| 形態 | 概要 |
|---|---|
| 原始プログラム | 人が理解しやすいプログラミング言語で書かれた、コンピュータへの命令を記述したテキストファイルのことです。 |
| 目的プログラム | 人間が書いたソースコード(原始プログラム)をコンパイラ(翻訳ソフト)がコンピューターで実行可能な機械語に変換したもので、特定の目標(タスク)を達成するために作られたプログラムのことです。 |
| ロードモジュール | プログラムがコンピュータ上で実行できる形式に変換され、メモリに読み込まれる(ロードされる)準備が整った実行可能なファイルのことです。 |
形態の変化
原始プログラム→目的プログラム→ロードモジュール→【実行】
言語プロセッサ
言語プロセッサとは、人間が書いたプログラミング言語(ソースコード)をコンピュータが理解できる機械語に翻訳・実行するソフトウェアの総称で、コンパイラ(一括翻訳)やインタプリタ(逐次翻訳)、アセンブラ(アセンブリ言語を機械語に変換)などが主要な種類です。これらは、ソースコードをコンピュータが直接実行可能な形式(機械語)に変換する役割を担い、C、Java、Pythonなどの言語で利用されます。
主な言語プロセッサの種類
- コンパイラ :C言語やJavaのように、ソースコード全体を一度に機械語(または中間言語)に変換(コンパイル)してから実行します。実行は高速ですが、翻訳に時間がかかります。
- インタプリタ :PythonやRubyのように、ソースコードを一行ずつ(または文単位で)読み込んで、その場で翻訳・実行します。開発が容易ですが、コンパイラ型に比べて実行速度は遅い傾向があります。
- アセンブラ :アセンブリ言語(機械語に近い低水準言語)を機械語に変換します。人間が理解しやすい高水準言語とは異なり、CPUの命令と一対一で対応する言語を扱います。
その他の言語プロセッサ
- トランスレータ:プログラムを別の形式に変換する、より広義の翻訳プログラム。
- プリプロセッサ :ソースコードをコンパイルする前に、特定の処理(マクロ展開など)を行うプログラム。
- クロスコンパイラ:あるコンピュータ上で、別の種類のコンピュータで動作するプログラムを生成するコンパイラ。
役割と重要性
言語プロセッサは、人間が書きやすい高水準言語(C, Java, Pythonなど)と、コンピュータが直接理解できる機械語(CPUの種類ごとに異なる)との橋渡しをする、コンピュータシステムにおいて不可欠なソフトウェアです。基本情報技術者試験などでも重要な知識とされています。
コンパイルの流れ
コンパイルの流れは、ソースコードをコンピュータが理解できる機械語(実行ファイル)に変換する過程で、字句解析・構文解析・意味解析・最適化・コード生成といった内部処理と、プリプロセス・コンパイル・アセンブル・リンクといった外部から見た主要な段階に分かれ、最終的に実行可能なファイル(オブジェクトファイルや実行ファイル)が生成されます。
コンパイラの内部処理(翻訳フェーズ)
ソースコードを段階的に処理し、中間表現や最終的なコードを生成します。
- 字句解析(Lexical Analysis):ソースコードを意味のある最小単位(トークン)に分解します(例:
int x;→int,x,;)。 - 構文解析(Syntax Analysis):トークン列が文法的に正しいかチェックし、プログラムの構造(構文木)を構築します。
- 意味解析(Semantic Analysis):構文木を基に、意味的な整合性をチェックします(型チェックなど)。
- 中間コード生成:特定の機械語に依存しない中間的なコードを生成します。
- 最適化(Optimization):プログラムの実行速度向上やコードサイズ削減のために中間コードを改善します。
- コード生成(Code Generation):最適化されたコードから、ターゲットマシン(CPUなど)向けの機械語コード(オブジェクトコード)を生成します。
開発ツール
エラー検出
エラー検出時に使用するツールです。
| ツール名 | 概要 |
|---|---|
| スナップショットダンプ | プログラムの実行中に、その瞬間のメモリやレジスタの状態を書き出します。 |
| トレーサ | プログラムの実行過程を記録します。 |
| インスペクタ | データ構造やオブジェクトの内容を表示します。 |
| アサーションチェッカ | プログラム実行時にあらかじめ指定した条件が満たされているかを確認し、満たされない場合にエラーを発生させます。 |
テスト
テストに使うツールです。
| ツール名 | 概要 |
|---|---|
| テストジェネレータ | テストに必要なデータや問題、テストケースなどを自動で作成します。 |
| シミュレータ | 現実のシステムや現象をコンピュータ上で模擬的に再現します。 |

コメント