基本情報技術者 PR

【基本情報】ソースコードがソフトウェアになるまでの道筋を解説!

記事内に商品プロモーションを含む場合があります

プログラミング言語

プログラミング言語とは、コンピュータに処理を命令する時に使う言語です
人には人間語で話さないと伝わらないように、コンピュータにはプログラミング言語で命令しないと伝わりません。

プログラミング言語の中でも、コンピュータが理解できる言語は厳密には1つしかありません。それは、0と1だけで構成される機械語です。しかし、人間が機械語で処理を書くのは至難の業なので、人間が理解しやすいプログラミング言語で処理を記述し、これを機械語に翻訳します。人間用のプログラミング言語にはPythonやJava等、有名なものが沢山あります。ちなみに、人間用のプログラミング言語で記述したものを原始プログラム(ソースコード)と言います。

人間用のプログラミング言語は、機械語への翻訳の仕方(翻訳方式)ソースコードの書き方(記述方式)の2つの方法で分類することが出来ます。

人間用言語を翻訳方式で分類する

人間用言語で記述された原始プログラムをコンピュータは理解できないので、機械語に翻訳する必要がありました。ここで登場するのが、言語プロセッサと呼ばれる、原始プログラムを機械語に翻訳するプログラムです。

代表的な言語プロセッサはコンパイラインタプリタで、翻訳の仕方が違ってきます。
プログラミング言語によって使われる言語プロセッサは異なり、JavaやC言語はコンパイラ型の言語で、PythonやPerlはインタプリタ型言語になります。

コンパイラ型言語

コンパイラ型言語は原始プログラムを一括で機械語に翻訳します

コンパイル

コンパイラ言語では、まず、原始プログラムを機械語で記述された目的プログラムに翻訳します。原始プログラムを機械語に翻訳することをコンパイル、コンパイルを実行するプログラムをコンパイラ、機械語に翻訳されたプログラムを目的プログラムと言います。

コンパイルは以下の手順で行います。

字句解析 :原始プログラムを単語単位で分解・解析します
構文解析 :字句解析した単語を文法的に正しい構文に直す
意味解析 :構文解析で作成した構文の意味を解析する
最適化  :効率よく命令を実行できるようにプログラムを変更する
コード生成:機械語に変換する

リンク

ソフトウェア開発をする際、通常、複数のファイルに跨って原始プログラムを記述していきます。リンクでは、コンパイルした複数の目的プログラムを組み合わせて、実行可能なプログラムであるロードモジュールを作成します。リンクを実行するプログラムをリンカと言います。

インタプリタ型言語

コンパイラ型言語では、原始プログラムを一括で変換して目的プログラム・ロードモジュールを作成した後、ロードモジュールを呼び出すことでプログラムを実行しましたが、
インタプリタ型言語では、原始プログラムを1命令ずつ解釈しながらプログラムを実行します

コンパイラ型言語とインタプリタ型言語の違い

プログラムの処理速度

コンパイラ型言語はあらかじめ原始プログラムを機械語に変換し、すぐに実行可能なロードモジュールを作成します。一方でインタプリタ型は原始プログラムを機械語に変換しながら命令を実行します。そのため、コンパイラ型言語の方がプログラムの処理速度の方がインタプリタ型言語より速い傾向にあります

プログラム実行までの手間

コンパイラ型言語でプログラム実行をするためにはロードモジュールをあらかじめ作成しておく必要があります。一方でインタプリタ型言語は原始プログラムを書いた時点でプログラム実行をすることが出来ます。そのため、コンパイル型言語の方がインタプリタ型言語より手間が掛かります

統合開発環境(IDE)

今まで見てきたように、原始プログラムを記述してからちゃんと動くプログラムになるまでには色々なプログラムが必要になります。このようなプログラムを1つずつ準備するのは大変なのですよね。なので、統合開発環境(IDE)という、これらのプログラムをまとめて提供するツールをよく使います。

統合開発環境(IDE)には、原始プログラムを記述するエディタ、コンパイラ、リンカ、バグを見つけやすくするデバッガなど、ソフトウェアを作成するために必要なツールがまとめられています。IDEの例に、OSSとして提供されているEclipseがあります。

人間用言語を記述方式で分類する

人間用言語は書き方によって、手続き型プログラミング言語オブジェクト指向プログラミング言語の主に2種類があります。

手続き型プログラミング言語はプログラムを処理の連続と捉え、実行して欲しい命令を順番通りに記載していきます。

一方、オブジェクト指向プログラミング言語はプログラムをオブジェクトの集合体と捉え、オブジェクト間でメッセージを送り合うことでプログラムを実行すると考えます。

手続き型プログラミング言語とオブジェクト指向プログラミング言語の違いについて基本情報で問われることはありませんが、オブジェクト指向単体についてはよく出題されるので抑えておくと良いでしょう。

【基本情報】オブジェクト指向で出題されることをまとめた!この記事ではオブジェクト指向について解説しています。【サンプル問題問38】【平成30年度秋期問47】【平成30年度秋期問49】【平成30年度春期問46】【平成29年度秋期問7】【平成29年度秋期問47】【平成29年度春期問48】も解説しています。...

手続き型プログラミング言語についての問題は出題されませんが、問題文中で出てくることはあるので、そんなものもあるんだなくらいで良いと思います。

基本情報技術者試験での出題例

サンプル問題問16、平成31年度春期問19

基本情報技術者
科目A サンプル問題問16、午前試験 平成31年度春期問19

インタプリタの説明として,適切なものはどれか。

ア 原始プログラムを,解釈しながら実行するプログラムである。

イ 原始プログラムを,推論しながら翻訳するプログラムである。

ウ 原始プログラムを,目的プログラムに翻訳するプログラムである。

エ 実行可能なプログラムを,主記憶装置にロードするプログラムである。

正解と解説

正解は”ア”

インタプリタは原始プログラムを1命令ずつ解釈しながら実行します。よって答えはアです。

平成30年度秋期問19

基本情報技術者
午前試験 平成30年度秋期問19

手続型言語のコンパイラが行う処理のうち,最初に行う処理はどれか。

ア 意味解析    イ 構文解析    ウ 最適化    エ 字句解析

正解と解説

正解は”エ”

コンパイラは以下の手順で行います。
字句解析→構文解析→意味解析→最適化→コード生成

平成30年度秋期問20

基本情報技術者
午前試験 平成30年度秋期問20

リンカの機能として,適切なものはどれか。

ア 作成したプログラムをライブラリに登録する。

イ 実行に先立ってロードモジュールを主記憶にロードする。

ウ 相互参照の解決などを行い,複数の目的モジュールなどから一つのロードモジュールを生成する。

エ プログラムの実行を監視し,ステップごとに実行結果を記録する。

正解と解説

正解は”ウ”

プログラムは複数のファイルに分けて記載することが一般的です。
そのため、コンパイルした結果出来る目的プログラムも複数に跨ります。
これら複数の目的プログラムが相互に作用できるよう、一つの実行可能なロードモジュールにするのがリンカです。

平成30年度春期問18

基本情報技術者
午前試験 平成30年度春期問18

コンパイラによる最適化の主な目的はどれか。

ア プログラムの実行時間を短縮する。

イ プログラムのデバッグを容易にする。

ウ プログラムの保守性を改善する。

エ 目的プログラムを生成する時間を短縮する。

正解と解説

正解は”ア”

最適化を行うことで効率よくプログラムを実行できるようになり、結果的に実行時間を短縮出来ます。

平成30年度春期問19

基本情報技術者
午前試験 平成30年度春期問19

ソフトウェアの統合開発環境として提供されているOSSはどれか。

ア Apache Tomcat
ウ GCC

イ Eclipse
エ Linux

正解と解説

正解は”イ”

Eclipseは統合開発環境として提供されているOSSです。

平成29年度秋期問8

基本情報技術者
午前試験 平成29年度秋期問8

Perlの実行に関する記述のうち,適切なものはどれか。

ア UNIX用として開発されており,Windows用の言語処理系はない。

イ 実行にWebサーバを必要とする言語であり,CGIの開発に適している。

ウ 動的デバッグは,言語処理系から独立したプログラムを実行して行う。

エ プログラムをコンパイルしたファイルを事前に用意する必要はない。

正解と解説

正解は”エ”

Perlはインタプリタ型言語なので、コンパイルしたファイルを事前に用意する必要はありません。

この問題は正直捨てで良いと思います・・・