1

プログラミング言語はプラットフォームに依存しないのに、PC と Mac の両方で動作するプログラムを作成できないのはなぜですか?

ソフトウェアを開発したいのですが、Mac を使用していますが、PC でも実行したいのですが、ユーザーがプログラムを互換性のあるものにする特別なプログラムをダウンロードする必要なく、そのようなソフトウェアを開発することは可能ですか?彼らのコンピュータで?

4

5 に答える 5

2

これに関する問題は、ほとんどのソフトウェアが一部のタスクを処理するために OS に依存していることです。はい、ほとんどのプログラミング言語は多くのプラットフォームと互換性がありますが、OS は多くのサポートを提供します。ソフトウェアがOSを利用することをシステムコールと呼ぶことがあります。必要に応じて、ここにいくつかの詳細情報があります。

于 2012-11-25T04:18:09.563 に答える
2

理論的には、「高水準言語」でプログラムを作成する場合、2 つのオペレーティング システム間で移植可能である必要があります。

ただし、実際には、違いは最初から始まります-選択したAPIは、あるAPIでは機能し、別のAPIでは機能しません(たとえば、MacのBSD APIはWin32 APIと互換性がありません)。フォーマット、リンカー、ローダー。各オペレーティング システムには独自の癖があります。

次に、基礎となるアーキテクチャーの違いが生じます。以前は、Mac は PowerPC アーキテクチャと Motorola アーキテクチャで動作し、PC は Intel を使用していました。Mac が Intel に切り替わったため、Apple 内でクロスプラットフォームの実行可能ファイルを作成する試みが行われてきました。ほとんどの試みは失敗しました。

ただし、問題を回避する方法があります。Python などの非常に高度な言語を使用してコードを作成し、Python コードを PC の友人に配布できます (ただし、プログラムを実行するには、PC の友人のコンピューターに Python インタープリターが必要であることを忘れないでください)。私は Python プログラムを Mac から PC に移植することに成功しました。コードの変更は 0 で、場合によっては 2 ~ 4% のコードの変更しか必要ありません。

于 2012-11-25T04:18:13.893 に答える
1

簡単な答え: アプリケーションをクロスプラットフォームにするには、言語自体では不十分だからです。また、使用するフレームワークもクロスプラットフォームである必要があります。データの処理、表示、ハードウェアとの通信、マルチスレッドなど、すべてにフレームワークが必要です。

これは通常、次のように行うことができます。

  • Java のような完全なソリューションを選択することにより、実際には両方のプラットフォームでシームレスに実行され、同じバイナリでも実行されます。
  • C/C++ およびクロスプラットフォーム ライブラリを使用して、同じプログラムを両方のプラットフォームでコンパイルできるようにする (実際には同じバイナリを配布できないことに注意してください。いずれにせよ 2 つコンパイルする必要があります)。
  • 標準ライブラリと標準言語を使用してプログラムのロジックを記述し、特定のプラットフォームに必要なものをアタッチして、2 つの異なるライブラリを構築します。もちろん、プログラムのクロスプラットフォーム部分がそれを認識しないように、必要なだけラップする必要があります

Java のような完全なソリューションを使用せずに、ゲームのような単純な例ではない (クロスプラットフォーム API がたくさんある) クロスプラットフォーム アプリケーションを開発することは、まったく簡単な作業ではないことに注意してください。特に、構築できる GUI のほとんどは厳密にプラットフォーム固有のものであり、独自のフレームワークに依存しているためです。

于 2012-11-25T04:16:18.697 に答える
1

はい、可能です。しかし、それはかなりトリッキーです。必要がある:

  • クロスプラットフォーム言語を使用する (これは簡単な部分であり、多くの言語が異なるプラットフォームで実行されます)
  • プラットフォーム固有の機能は使用しないでください (通常はそれほど難しくありませんが、テストが必要です)。
  • すべての依存関係に対してクロスプラットフォーム ライブラリがあることを確認してください (難しい!)

特にライブラリの問題のため、プラットフォーム間で機能するオプションはほとんどありません。あなたの最良の選択肢はおそらく次のとおりです。

  • JVM 言語(Java、Scala、Clojure など) - JVM はプラットフォーム固有の機能を抽象化するため、純粋な Java アプリケーションとライブラリはあらゆるプラットフォームで実行されます。その結果、おそらく Java はクロスプラットフォームのライブラリとツールの最高のエコシステムを持っています。
  • JavaScript - ブラウザーでの実行を気にしない場合は、非常に優れたオプションです。対処すべき癖はたくさんありますが、JavaScript はどこにでもあるため、クロスプラットフォームの最適なオプションの 1 つです。
于 2013-01-03T15:02:28.660 に答える
1

アプリケーションを「どこでも」実行したい場合、最良のオプションは JIT 型言語です。つまり、アプリケーションが実行されているプラ​​ットフォームで (ジャスト イン タイム) コンパイルされます。本当に私の頭に浮かぶ言語は Java です (他にもありますが、個人的には Java は好きではありません)。ただし、それほど単純ではありません。たとえば、Mac コンピューターのウィンドウには、PC のウィンドウにはない要素や機能があり、その逆もあります。また、他のオペレーティング システムには、Windows や同等のものさえありませんが、Android や iOS などの Java や無数の Linux ディストリビューションが実行されています。そして、それは非常に基本的な例であり、はるかにハリアーになります。ほぼすべてのデバイスで誰でも使用できるアプリケーションを構築するための本当に最善の方法は、Web ベースにすることです。

教訓は、もしそれがそれほど単純だったら、多くの人が仕事を持っておらず、決してそれほど単純ではないということです.物事は常に進歩し、変化し、誰もが自分のOSで他の誰かと同じことをしたいと思うわけではありません. . 猫の皮を剥ぐ方法は無数にあり、OS に何かを実装する方法は他にもたくさんあります。

于 2012-11-25T04:58:43.300 に答える