2012年6月26日火曜日

プログラミングの世界で言う「環境」とは

プログラミングの世界で「環境」と言う言葉がよく使われます。例えば開発環境とか実行環境という風な使われ方をします。
開発する環境はソフトウェア開発に関わる要素です。例えばコンパイラ、ライブラリです。
実行環境は実行するソフトウェアの動作に関わる要素です。例えばパソコンや周辺機器やドライバ、OSやランタイムライブラリ等です。

情報の流れ

プログラマーが書いたソースコードは次の様な情報の旅の開始地点だと言えます。

(開発環境)
プログラマーがC++等のプログラミング言語でソースコードを作る
コンパイラにコンパイルされて機械語のオブジェクトファイルになる
リンカによってリンクされて実行ファイル.exe(いわゆるソフトウェアとかアプリケーションと呼ばれる状態)になる

(実行環境)
ユーザーがソフトを実行してプログラムはダイナミックリンクライブラリ(DLL)やランタイムライブラリ(CRT)と呼ばれる物と連携する。OSから見るとアプリケーションインスタンスやプロセスと呼ばれる状態になる
OSを構成するDLLやAPI等のソフトモジュールが機械語の命令を解釈、処理
ハードウェア(CPU、メモリ、ハードディスク、ビデオカード、ディスプレイ、周辺機器等)が信号を受け取ってさらに外部に信号を出したりして相互作用

この様にプログラミングには複雑多様な環境が関わって来ます。プログラミング言語という公的な憲法を掲げたところで実際に施策を施しているOSがそれを無視したり解釈を変える可能性がありますし、さらにOSが出した命令をパソコンや周辺機器やドライバが正しく実行するとは限りません。環境中の様々な要素が己の勢力を拡大するために、あるいは時代の流れや具体的な現状や実情に対応するために、あるいは単なるミスやエラーによって意図した情報は姿を変えます。

とは言え、メジャーなプログラミング言語で書いたソースコードは、比較的環境に捕らわれ難い存在だと言えます。ソースコードとういのは規約みたいなものなので、時代やプラットフォームが変わってもソースコードをその実行環境に合うように修正したり翻訳できるコンパイラを作ればソースコードが利用できるといえるからです。

プログラミング言語はある程度大まかな規約であり、抽象的な存在でもあります。そこから
ソースコード→オブジェクトファイル→OS,ライブラリ、実行環境、ドライバ、→ハード
という様な具合で具体的な存在になっていきます。
具体的になるほど実行環境そのものになっていくので、環境に影響を受けやすくなると言えます。

ソースコードの中にも環境に依存し易い具体的な部分と、環境に影響を受けにくい抽象的な部分が存在します。
というかプログラマーが意図的に抽象的な部分と具体的な部分を分離したソースコードを書くことで、移植性を保ったり保守管理しやすいソースコードにする事ができます。


0 件のコメント: