• 締切済み

プログラム言語はなぜ相互変換できないのでしょうか?

当方perlしか分かりませんが、他の言語を見ると結構共通している部分がありCなども簡単な修正は勉強しなくても出来ます。 人が使う言葉ほどはややこしくありませんし、現状どの辺りが難しく相互変換(例えば、perl⇔php⇔ruby⇔C)が出来ないのでしょうか? また、機械語に翻訳された物であれば、それを逆に辿って好きな言語で表示させるなど素人考えでは出来そうな気がするのですが、どの辺りが難しいのでしょうか?

みんなの回答

回答No.2

例がC言語以外全部インタプリタ言語なのはわざとですか? 共通部分なんてありませんよ。 見た目が似ている文法や同じ名前の関数(メソッド)がたまにあるだけです。 また、言語の構造が異なるので、Perlなら1行で済む処理にJAVAだと5~10行くらい必要だったりします(たとえば文字列の出力)。処理のされ方がまったく違うわけです。 つまり、難しいとかいう次元の話ではなく、変換は不可能です。同じ材料からできているからといって「豆腐と味噌」や「醤油と納豆」が交換がききますか? そういう意味では、機械翻訳なら誰にでもできる分自然言語のほうがむしろずっと簡単です。 もちろん、各言語に精通した人が「同じことをするコードを手作業で書く」ことは可能ですが…。 >機械語に翻訳された物であれば~ たとえばここにひとつのハンバーガーがあったとします。 味や食感を含め、全ては中にある成分で決まっていますが、だからといって「好きな材料からこのハンバーグが作れる」ということになりますか? たとえばここに「60」がセットされたメモリアドレスがあるとします。 この「60」がある2つの定数の乗算結果だとして、逆算して定数Aと定数Bに適切な値をセットできますか?機械語になった時点で「定数Aと定数Bの定義」という情報は消失しています(その値に置き換わるため)。さてそれをどう「逆に辿る」ことができるのでしょうか? つまり、そもそも「逆に辿る」ことはができないので、機械語からC言語などへという変換はできません。 ※とはいえアセンブラ限定ならまあ多少は…

すると、全ての回答が全文表示されます。
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

PHP等のスクリプト言語であれば、コンバーターを介するよりも作りなおした方が早いという現実がありますね。企業等で大量にシステム移行するならツールの目もありますけど、そうでないなら需要がないです。 >機械語に翻訳された物であれば、それを逆に辿って好きな言語で表示させる 逆コンパイラーという名前でありますよ。 http://ja.wikipedia.org/wiki/%E9%80%86%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9

tanaka_meio
質問者

お礼

回答いただきありがとうございます。 ただ、あくまで理論上ですが、需要について、全世界のプログラム利用者を想定する場合、人力で書き換えるよりも、優秀なプログラムを利用した方がより時間の節約に感じるのです。とりあえず、私も何度か移植したことがあるのですが、他の言語は非常に苦手で無駄に時間ばかりかかります。とりあえず、不格好でも良いので動く物が欲しいと何度思ったことか・・・ 逆コンパイラーについては、Javaで遊んでいた頃、自分で作成したプログラムにつかったことがありますが、驚くほど正確に戻してくれました。 ただ、JavaからPerlなど他の言語への変換は出来ないため残念に感じました。また、世界中には優秀なプログラマーが多いのに、何故出来ないのか、どこに技術的な課題があるのか気になりました。

すると、全ての回答が全文表示されます。

関連するQ&A