質問: プログラムの実行の仕組みが分かりません。 プログラミング初心者です。 基本的な話ですが、調べてもよく分からなかったので質問させていただきます。 昔、C言語で「画面に『Hello World』と表示するプログラム」を作って、exeファイルをコマンドプロンプト上で実行したのを覚えています。すると、コマンドプロンプトの黒い画面に「Hello World」と表示されました。 しかし、教科書に「コマンドプロンプトを使え」と指示があっただけで、なぜコマンドプロンプトなのか、よく分かりませんでした。 これだけだと、 「C言語とは、Windowsのコマンドプロンプトというアプリケーションに文字列を出力するためのプログラム言語なのか?」 と思ってしまいますが、恐らくそれは違って、もっと幅広い使い方が出来るのだと思います。 私の仮説では、カギは「コンパイラ」にあるのではないか、と思っています。 C言語で書かれたソースコードを、 『コマンドプロンプト用機械語』に翻訳すれば、 「ダブルクリックするとコマンドプロンプト画面に『Hello World』と表示されるプログラム」になり、 『Word用機械語』に翻訳すれば、 「ダブルクリックするとWord画面に『Hello World』と表示されるプログラム」になり、 『Microsoft Edge用機械語』に翻訳すれば、 「Microsoft Edge画面に『Hello World』と表示されるプログラム」になる、 という感じです。 つまり、 プログラムを実行したいアプリケーションの数だけ『C言語コンパイラ』が存在して、それを端末にインストールした状態で実行すれば、そのアプリケーションでHello Worldを表示できる、 という感じです。 しかし、 Hello Worldを表示する程度の単純なプログラムならまだしも、 「スマブラのゲーム」みたいな、映像を使ったりキャラを操作したりする大規模で高度なプログラムになると、 さすがにコマンドプロンプトみたいなショボいアプリケーション上では実行できないので、 Nintendo Switchのような「スマブラ専用のOSやアプリケーション」が必要になる、という感じです。 Androidアプリ開発においても同様のことが言えて、 Javaで書いた家計簿プログラムが、Android上でAndroidアプリとして動くのは、 「Android Studioが、Java家計簿ソースプログラムを『Android語』にコンパイルしてくれているから」 という感じです。 こんな感じで合っているでしょうか? また、こういったソフトウェア工学に関する基本的な事項ってどういう本に載っているのでしょうか?何というカテゴリの属するのでしょうか? ご回答よろしくお願いします。
回答: 他の方が色々と書かれていて、それぞれ正しいと思うのですが、以下の点について、 > > 教科書に「コマンドプロンプトを使え」と指示があっただけで、なぜコマンドプロンプトなのか > > > コマンドプロンプトを使うが、現実的で容易な方法だと(教科書の作者は)考えたのではないかと思います。 画面に文字やら、絵などを表示するために、色々と準備が必要になります。それに対し、コマンドプロンプトで、文字を表示する方法は容易です。 (裏では色々とコンピュータが仕事してますが) コマンドプロンプトは、コマンドプロンプト上で動くプログラムに対し、文字の入力と出力をサポートしています。プログラムが文字を出力するには、コマンドプロンプトに対し、文字を表示してくださいと依頼するだけで済みます。 それに対し、画面上に文字を出力するには、画面のどの場所に、どの大きさで、何色で、、と色々と指定が大変になります。(最近の言語環境は省略できるのも多いですが) この辺が、コマンドプロンプトを使う理由では無いかと思います。 では、コマンドプロンプトが何をしているとかと言うと、 文字を表示してくれと言われたら、その文字に対応する絵(文字)を用意し、現在のカーソルに位置にその絵(文字)を置き、カーソル位置を移動する処理を行うことになります。この時、右端まできたら、画面表示を一行動かすなど、色々な処理をしています。 では実際の絵(文字)を書く処理は、、と言うと、、、今どきのコンピュータではは、専用のハードウェア(GPU等)に処理を依頼することになります。 と、実際の処理は、必要に応じてそれぞれの下請けに依頼しています。この下請けは、環境によって、Win32API とか、.NET とか呼ばれます。 質問には、0/1の機械語になって実行されるとありますが、最近のコンピュータでは、それも不正確で、Javaなんで、(普通の)機械語で無く、Java用の機械語(一般には中間言語)になり、Javaがそれを読み込みながら(解釈しながら)、実行します。ここでは、一つの機械語が、WindowsでもLinuxでも動きます。(という事になっている) HTMLだと、テキストで書かれたコードが、IEや、Edge、Chrome 等、どこでも動きます。