- PR -

クロスコンパイラとはどのようなものか

投稿者投稿内容
banboo
大ベテラン
会議室デビュー日: 2003/12/05
投稿数: 210
投稿日時: 2006-08-16 02:00
クロスコンパイラについて質問がございます.

クロスコンパイラについては,以下のように説明されております.

プログラマが高等言語で作成したソースコードを解釈し、開発に使用しているのとは異なる機種で実行可能な機械語のプログラムを生成するソフトウェア。生成した実行可能形式のプログラムは、開発機からターゲットとする機種にケーブルなどで転送してから実行する。

参考URL:http://e-words.jp/w/E382AFE383ADE382B9E382B3E383B3E38391E382A4E383A9.html

私自身は,クロスコンパイラとは以下のように認識しております.
何か間違っている点がありましたらご指摘下さい.

例えば,ゲーム用のプログラムがあるとする.
ゲーム機上で,プログラムを開発するのは困難なので,PC上でプログラムを開発する.

1.PC上で,ゲーム用のプログラムのソースコードをJavaで記述する.

2.クロスコンパイラにより,ソースコードをJava → 機械語 に変換.

3.機械語に変換されたソースコードをゲーム機に転送
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-08-16 03:40
こんばんは

Javaの場合はちょっと違いますよ!
Javaの場合はJavaバイナリを仮想マシン上で動作させます。
プラットフォームごとにJava仮想マシンプログラムがあり、基本的に同じJavaバイナリを他のプラットフォームで動作させることが可能になります。
CPUやハードウェアの違いをJava仮想マシンが吸収してくれます。
※バイナリ互換

あと用語の理解が正しくないようで...
ソース=機械語やJavaバイナリなど実行プログラムの元になるもの
機械語=CPUが理解できるプログラム
Javaバイナリ=Java仮想マシン上で動作するプログラム

クロスコンパイラは「実行する環境」とは「違う環境で開発し機械語もしくはニーモニックを生成する」プログラムのことです

たとえばゲーム用のプログラムなら
1.PC(WindowsやLinuxなど)でプログラムソースを作成
2.ソースから実行環境(PSPなど)に合わせた機械語を生成(クロスコンパイル)
3.生成された機械語を実行環境に転送
4.実行

余談ですがエミュレータなどは仮想マシンと概念的に同じものです。

[ メッセージ編集済み 編集者: 未記入 編集日時 2006-08-16 03:41 ]
banboo
大ベテラン
会議室デビュー日: 2003/12/05
投稿数: 210
投稿日時: 2006-08-16 08:21
引用:

Javaの場合はちょっと違いますよ!
Javaの場合はJavaバイナリを仮想マシン上で動作させます。
プラットフォームごとにJava仮想マシンプログラムがあり、基本的に同じJavaバイナリを他のプラットフォームで動作させることが可能になります。
CPUやハードウェアの違いをJava仮想マシンが吸収してくれます。



確かにJavaの場合は違いますね.
仮に,プログラムの実行環境にJava仮想マシンがあるとします.
その場合は,CPUやハードウェアの違いをJava仮想マシンが吸収してくれるので,
クロスコンパイラでわざわざ実行環境で動作する機械語に変換する必要がないという
理解で宜しいでしょうか?

引用:

あと用語の理解が正しくないようで...
ソース=機械語やJavaバイナリなど実行プログラムの元になるもの
機械語=CPUが理解できるプログラム
Javaバイナリ=Java仮想マシン上で動作するプログラム



了解しました.
プログラムの実行環境として,PSPの例をあげて説明して頂きましたが,わかりやすかったです.
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2006-08-16 14:16
>仮に,プログラムの実行環境にJava仮想マシンがあるとします.
>その場合は,CPUやハードウェアの違いをJava仮想マシンが吸収してくれるので,
>クロスコンパイラでわざわざ実行環境で動作する機械語に変換する必要がないという
>理解で宜しいでしょうか?
はい。そうです。
「必要がない」というよりは,それがJAVAの動作仕様となります。

あとJavaの場合,仮想マシン経由で実行されますので,当然,機械語よりは遅いですが。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-08-16 16:39
引用:

ラララさんの書き込み (2006-08-16 14:16) より:
あとJavaの場合,仮想マシン経由で実行されますので,当然,機械語よりは遅いですが。



何となく釣られてみます。
HotSpotなJVMだと下手なアセンブラなコードより速い事すらありますよ。
もちろんチューンしたアセンブラのコードには勝ち目あるわけないですが。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2006-08-16 16:50
Javaのソースからネイティブな実行コードを生成する、古典的な意味での「Javaコンパイラ」も存在します(GCJ)。
その場合、もちろん「Javaのクロスコンパイラ」というのもあり得ます。
ラララ
ベテラン
会議室デビュー日: 2004/02/04
投稿数: 66
投稿日時: 2006-08-16 17:06
>HotSpotなJVMだと下手なアセンブラなコードより速い事すらありますよ。
経験不足か,あまりそういったケースにお目にかかった事が無いもので・・・。
言語の得手・不得手はあるでしょうが,私の経験上は,同一機能においても
だいたいCとかの方が早い事が多いです。
速度以外のメリットがもちろん大きいですが。

>Javaのソースからネイティブな実行コードを生成する、古典的な意味での「Javaコンパイラ」>も存在します(GCJ)。
>その場合、もちろん「Javaのクロスコンパイラ」というのもあり得ます。
ご指摘ありがとうございます。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-16 17:39
>だいたいCとかの方が早い事が多いです。
ほとんどあらゆるケースにおいて、これは真でしょうね。

アセンブラは基本的に「そのまま」(1対1という意味で)実行される以上、本当にヘタな書き方をしていたら、その環境専用のJVMの持つコードのほうが洗練されているだろうから、速いかも知れない…ということでしょう。
今時アセンブラで書く人が、それほど無駄なコードを書くことはあんまりないでしょうが。

スキルアップ/キャリアアップ(JOB@IT)