プログラミングにおけるプログラム変数(プログラムへんすう、: program variable)とは、マルチスレッド(multi-thread)計算機において、プログラム中別のプログラムを呼び出したとき、その並列実行されている別プログラムを格納する変数を言う。プログラム変数に格納されているプログラムプロセスに対する命令はOSの機能などを仲介したメッセージ渡しによって実現される。

C言語でgnuplotを呼び出すコードの一例。
プログラム変数 gp が定義され、主プログラム(C)から標準入出力を経由してメッセージ渡しされた命令内容が実行されている。
当然のことながら、gnuplotのコードには一切変更が加えられておらず、オブジェクトファイルがそのまま再利用されている。

主記憶割り当てを行ったオブジェクトファイルの格納変数、すなわちオブジェクト変数と呼ぶべきものでもあるが、オブジェクト指向プログラミングにおけるオブジェクトと紛らわしいこともあり、このように呼ばれる[1]

概要 編集

一般にプログラミングにおける変数はデータを読み書きする記憶域(storage)に付けられたタグのことであるが、実行可能なプログラム(オブジェクトファイル)もロードすれば、数値データや文字列などと同じく限定された記憶域を割り当てられるものであるため、マルチスレッド計算機上であれば変数として抽象化することができる[2]。これをプログラム変数(program variable)と呼ぶ。

主プログラムからプログラム変数に対しては、クラスなどを用いた特別のインターフェースが準備されていなければ、標準入出力を経由してデータや命令内容をメッセージ渡しすることが多い。プログラム変数に格納されているプログラムプロセスは、それ単独で実行可能なものであり、主プログラムのスコープから見れば、常にカプセル化(encapsulation)が実現されているのが特徴的である[4]

簡易なプログラム再利用法 編集

シングルスレッド(single-thread)計算機においては、プログラムのすべての機能は当然、単線の計算プロセス上で実行する必要がある。したがって、たとえ甲と乙という汎用的な単機能を提供する検証済みのプログラムがそれぞれ独立に存在していても、両機能を実現するプログラムを作成するためには、ソースコードから該当機能部分を抜き出し、単線上に乗るように連接(concatenation)した上で、一つのプログラムとして正しく動作するように修正し、さらに再度検証しなければならない。これは、既存プログラムの再利用という観点からみると非常に難易度の高いものである。

一方で、マルチスレッド(multi-thread)計算機においては、主プログラムから、甲と乙のプログラムなどの従プログラムをそれぞれ並列に実行させた上で、プログラム変数に格納し、処理内容をプログラム変数に対して(OSの機能などを仲介して)メッセージ渡し(message passing)をして代わりに処理させることで、検証済みプログラムのソースコードに手を加えることなく、低コストで開発することができる。これは、既存のプログラムの再利用法としては極めて有用な手法である。

脚注 編集

  1. ^ ウィナー & ピンソン 1989, p. 31.
  2. ^ 静的データを格納する変数とは異なり、新たに(new)割り当てられた限定された記憶域を走る(run)という性質があるものの、同じく記憶域に割り当てられたタグ(変数)であることには違いはない。
  3. ^ ピンソン & ウィナー 1990, p. 1.
  4. ^ 次の四つの特徴を備えているときオブジェクト指向と呼ばれる[3]
    • 抽象(abstraction)
    • カプセル化(encapsulation)
    • 継承(inheritance)
    • ポリモーフィズム(polymorphism)
    プログラム変数を用いたプログラミングは、このうち、カプセル化のみ実現しているのでこれをもって現代的なオブジェクト指向プログラミングが実現可能であるとは言うことができない。

参考文献 編集

  • R.S.ウィナー、L.J.ピンソン『C++:オブジェクト指向プログラミング』前川守(訳)、トッパン〈アジソンウェスレイ・トッパン 情報科学シリーズ〉、1989年9月。ISBN 4-8101-8009-3 
  • L.J.ピンソン、R.S.ウィナー『Smalltalk:オブジェクト指向プログラミング』富士ゼロックス情報システム(現:富士フイルムシステムズ)(訳)、トッパン〈アジソンウェスレイ・トッパン 情報科学シリーズ〉、1990年10月。ISBN 4-8101-8011-5 

関連項目 編集