回答終了
基本情報技術者試験の勉強をしています。 コンパイラが分かりません。プログラムの流れとしては、人間が書いた「ソースコード」を0と1で記述される「バイトコード」に変換して、さらに、それを「機械語」に変換し、CPUが機械語で書かれたファイルを読み込み実行するという流れだと認識しております。 バイトコードへの変換処理を「コンパイラ」が行い、バイトコードから機械語への変換処理を「インタプリタ」が行うという認識です。 この認識で合っているのであれば、添付画像に書かれている「機械語のオブジェクトコードに変換するツール」とはインタプリタではないのでしょうか? また、「最適化」の「冗長な部分を取り除き」という部分もよく分かりません。
基本情報と並行してJavaも少し勉強しています。そのため、Java特有のものと、基本情報の情報がごっちゃになって認識可能性があるかもしれません。
99閲覧
前提からして間違っています。 人間がソースコードを書いた時点で、そのソースコードは貴方の言う「バイトコード」の塊と化しています。 それを「アセンブリコード」と解釈して(機械語の)オブジェクトコードに変換するのが『アセンブラ』。 それを「何かしらの高級プログラミング言語のソースコード」と解釈してアセンブリコードに変換するのが『コンパイラ』。 そうして得られた(機械語の)オブジェクトコードを繋ぎ合わせて実行形式ファイルを生成するのが『リンカ』。 一般的に『コンパイラ』はアセンブラやリンカを呼び出して実行形式ファイルが生成されるところまで処理を自動的に進めてくれます。これらを単純に言い表せば「コンパイラは各種高級プログラミング言語で書かれたソースコードを設計図書として、その通り動く機械語プログラムを生成するソフトウェア」ということになります。 これに対して『インタプリタ』は「ソースコードを解釈し、その通りの動作を行うソフトウェア」です。 よく「インタプリタは実行時に翻訳する」と表現されれますが、それはあくまでも比喩的表現であって実態を正確に表した言葉ではありません。 世の中には両者のハイブリッドタイプも存在します。ネイティブな機械語コードを生成せず中間コードを生成する、いわゆる「Pコードコンパイラ」がそれです。 Pコードコンパイラで生成された中間コードはインタプリタに近しいソフトウェア(古くはランタイム、流行りの呼び方では仮想環境)によってその内容が実行されていきます。 この方式は生粋のインタプリタ方式に比べると「実行時にコードを解釈する手間が大幅に省ける」ことで高速化が図られています。 「最適化」における「冗長な部分」とはつまり「無駄な部分」です。 高級プログラミング言語のソースコードをただ愚直にアセンブリ言語に変換していくとどうしても無駄なコードが発生してしまいます。それを検知して無駄なコードを省く処理が「最適化」で、これが最大限効果を発揮すると「人間が直接アセンブリコードを書くのと遜色ないコードが生成される」ということが起ります。 例えば if (a=hoge(x)) { } なんてコードを書いたとき、極めて素直なコンパイラは push x call hoge pop a cmp a,0(aを0と比較) jp z,~(0だったなら0じゃないときの処理を飛ばす) というアセンブリ言語のコードを生成するでしょう。これを最適化すると cmp 0 の部分が or a,a(即値が入るcmp a,0よりコンパクトで速いコードになる) に変更されるでしょうし、そのコンピュータに採用されているCPUによっては cmp a,0 は丸々削除されるかもしれません(Z80CPUの場合データの移動ではフラグは変化ので何かしらの演算を行わないと条件分岐は行えないが、他の多くのCPUではデータの移動時にもフラグが変化するので0か0以外か程度なら比較演算を省略できる)。
そうだね:1
以下を参照 https://dev.mescius.jp/support/powernews/column/clang/003/page01.htm コンパイラは、機械語のオブジェクトコードに変換 リンカで、複数のオブジェクトコードとライブラリをくっつけて実行形態にする バイトコードは、Javaなどの仮想マシンが実行する「中間コード」
インタプリタはソースコードを「実行時」に機械語に翻訳するものです。 対してコンパイラはソースコードを「実行前に事前に」機械語に翻訳するものです。その翻訳をコンパイルと言います。 インタプリタはソースコードを書いたら即実行できるというメリットがあります。しかし書かれているソースコードを順次翻訳して実行するのであまり実行の効率が良くないというデメリットがあります。そのためちょっとした処理を行う書き捨てのソースコードなどを実行する際に便利です。 一方でコンパイラを用いる言語は事前に作成したソースコードを全体まとめてコンパイルしなければ実行できないので手間がかかります。ただしこの文章に書かれている通り事前に全体を見て最適化することが可能なので、コンパイルを行う言語は一般に処理が高速であるというメリットがあります。
< 質問に関する求人 >
基本情報技術(東京都)この条件の求人をもっと見る
求人の検索結果を見る
< いつもと違うしごとも見てみませんか? >
覆面調査に関する求人(東京都)この条件の求人をもっと見る