この質問のコンテキストは、CユーザーとJavaユーザーの間の議論です。Cユーザーは、CバックエンドはJVMよりも移植性が高いと主張しています。これは、既存のJVMサポートがないプラットフォームまたは比較的弱いサポートに遭遇した場合に当てはまります。スタックオーバーフローの誰かがそのようなプラットフォームに遭遇しましたか?例のリストをまとめることができますか?
6 に答える
この文脈でのCの「移植性」を理解していません。任意のCPUに対して「helloworld」をコンパイルできることを意味する場合は、はい、Cの方が移植性が高くなります。しかし、Cを使用してポータブルGUIまたはネットワーク、マルチスレッドなどを作成できますか?はい、UはQTまたは同様のものを使用できます。しかし、それは移植性ですか?Javaはプラットフォームですが、Cは言語です。私見それは非常に異なるものです
「よりポータブル」はおそらく質問するのに最適な質問ではありません。あなたがする必要があるのは、あなたが合理的にサポートする必要があるかもしれないプラットフォームを特定し、CやJavaがそれらのために利用可能かどうかを調べることです。両方が利用可能な場合、移植性は問題ではありません。Cがより多くのプラットフォーム(おそらくそうです)で利用可能であるという事実は、その多くが非常にあいまいである可能性がありますが、無関係です。
これが単なる抽象的な議論である場合、適切な答えは「誰が気にするか」です。
編集:コメントに応えて。
これは「今週、製品をむち打ちする」だけではありません。デスクトップをターゲットにしている場合、Windows、Mac、およびLinuxはすべてのインストールの約99.999999999%をカバーし(数9を与えるか、または取る)、すべてにJavaがあります。
モバイルデバイスをターゲットにしている場合は、Javaを搭載しているデバイスを検索できますが、それらの間で移植するための作業を行う必要があり、Cを使用しても役に立ちません。
他にどのプラットフォームをターゲットにすることを検討していましたか?IBM 370?12月VAX?OS9?上記のいずれでもない、ターゲットにしたいプラットフォームが思いつかない場合は、移植性を高めることで時間を無駄にすることになります。そして、他のすべてが等しいC開発は、Javaよりも遅くなることを忘れないでください。貴重な時間をCで書くことに費やすつもりなら、あなたはそれからあなたが必要としそうな何かを得たほうがよいでしょう。
今後10年間にさまざまなプロジェクトで使用できる「ユニバーサルツールキット」を作成しようとしている場合、「1つの言語」は役に立ちません。Javaプロジェクトで作業している場合、Cコードを組み込むことは非常に複雑であるため、セキュリティ上の考慮事項が許されたとしても、おそらくそれを行う価値はありません。おそらく必要になるのは、使用する言語ごとに異なるツールキットです。1つはJava用、もう1つはC用などです。Cキットには、拡張可能な配列や、Javaで無料で提供されるその他のものが含まれる可能性があります。どちらの方法でも、最初に各プロジェクトの言語を選択してから、その言語に適したツールキットを引き出します。
ARMまたはMIPSを実行しているものは、J2MEにアクセスできる場合でも、完全なJDKを使用できる可能性はほとんどありません。
JVMダウンロードのリストは、ここにあります。
私はJVMサポートについて特に専門知識はありませんが、表面的にはWindows、Linux、Solaris、およびOSXがすべてサポートされているように見えます。あなたが何か他のものを実行しているなら、Javaは行く方法ではないと思います...
これは、すべてのオペレーティングシステムのかなり包括的なリストです。申し訳ありませんが、AmigaまたはProDOS用のJVMはありません。
x86およびx86_64以外のプラットフォームでは、JVMのサポートが不十分になる傾向があります。
Cは、移植可能な方法でコーディングした場合にのみ移植可能です。ただし、これを行う場合は、ワードサイズ、ライブラリサポートなどがすべて重要になります。ほとんどの場合、ターゲットプラットフォーム用にプログラムを再コンパイルする必要があります。
Javaは移植可能な言語になるように設計されました。32ビットプログラムを使用して、変更なしで64ビットVMで実行できます(JNIにドロップしない限り)。