プロが教える店舗&オフィスのセキュリティ対策術

プログラミングについてまったくの初心者なんですが、「AppleScript Studio」を使った、Cocoaアプリケーションというのは、Winで起動するすることは可能なのでしょうか?また、MacでC又はC++で作ったアプリケーションはWinで利用可能なのでしょうか?プログラミングについてのMac,Winの互換性が全くわからないので教えてください

A 回答 (5件)

MacOS X用のアプリケーションをWindowsでは実行できないでしょう。



Windows用のアプリケーションとは、intel 386互換のCPUまたはAMD x64互換のCPU上で、MicrosoftのWindows OSにて動作するプログラムを指します。

MacOS X用のアプリケーションとは、IBM/Motrola PowerPC G3以降のCPU上で、Mac OS Xにて動くプログラムを指します。

CPUのアーキテクチャも違えばOSもまったく違うため、機械語オブジェクトプログラムにもライブラリにも実行プログラムにも互換性はありません。

Mac用に作成された機械語(C等からコンパイルされたものも含む)アプリケーションは、Windows上で利用することは出来ません。
当然逆にWindows用に作成された機械語アプリケーションは、Mac上で利用することは出来ません。

総じて言えば、MacとWindows、Linux等の異なるOperating System(以下OS)間では、同じCPUを使用していたとしても、原則としてアプリケーションを相互に交換することは出来ません。

結論としては、

「MacとWindowsの間に、互換性は99.99%ない。ただし、万が一、熟練したプログラマが、十分に気をつけてプログラミングした場合のみ残りの0.01%になる(機械語レベルで互換になる)可能性がある。*1」

となります。

注:
*1 機械語レベルで互換にすることは可能かもしれないが、動作まで同じにするためには使える命令がほとんどないため「特に何もしない」プログラムや、「必ず暴走する」プログラムでしかありえないだろう。

この回答への補足

分かりやすい説明ありがとうございます。つまり実質アプリケーションの互換は不可能ですね。新しく思いついたのですが、例えばMacで作ったソースをWinに取り込み、Win上でコンパイルして利用することは可能なのでしょうか?

補足日時:2005/05/03 11:40
    • good
    • 0

*1に対する注が抜けてました。



注:
*1 メモリのエンディアンが違う

#include <stdio.h>

int main()
{
int i; //  forのindex
long l; //  long(32bit)
short s; // short(16bit)
char *c; // char pointer
l = 0x12345678;
s = 0x1234;
c = (char *)(&l);
printf("l=%x\n", l);
for(i = 0; i < sizeof(long); i++)
{
printf("c[%d]=%x\n", i, c[i]);
}
c = (char *)(&s);
printf("s=%x\n", s);
for(i = 0; i < sizeof(short); i++)
{
printf("c[%d]=%x\n", i, c[i]);
}
}

このプログラムを実行すると、変数がどのように格納されているのかわかります。

intel(IA-32)アーキテクチャ(リトルエンディアン)
l=12345678
c[0]=78
c[1]=56
c[2]=34
c[3]=12
s=1234
c[0]=34
c[1]=12

Motorola(PowerPC)アーキテクチャ(ビッグエンディアン)
l=12345678
c[0]=12
c[1]=34
c[2]=56
c[3]=78
s=1234
c[0]=12
c[1]=34
    • good
    • 0

> 例えばMacで作ったソースをWinに取り込み、Win上で


> コンパイルして利用することは可能なのでしょうか?

Macに依存する(cocoaやtoolkitなど)機能を使わないで、CPUの構造(メモリのエンディアンが違う*1)にも注意していれば、可能です。

MacOS Xには、gcc+libcがあります。
Windows上でもMingWやCygwinなど、gcc+libcがありますので、この部分であれば互換を取ることはさほど難しくないでしょう。
ただし、ウィンドウプログラミングはOpenWinやGTKなどの両方の環境で利用できるライブラリを利用する等少し工夫しなければなりません。
    • good
    • 1
この回答へのお礼

詳しく、実際の実例まで出していただいて分かりやすかったです。ありがとうございます。

お礼日時:2005/05/07 14:16

基本的には異なる環境の間での互換性は


CPUの違いとOSの提供する機能の違いに大別されます。

両方の違いを吸収できる開発方法として
JAVAが存在します。

また、C言語では移植性が高いのですが
あくまでも移植性の話で
MC68000シリーズやPowerPCシリーズから
ix86シリーズへの移植は手間がかかります。

また、OSの機能として、たとえば画面描画だけをとっても
まったく違うわけで、Mac,Win両方で動くゲームなどは
普通に作ることはできません。

いちおう、共用化されたライブラリーがあれば
それを使って開発することは可能ですが

CocoaやDirectXなどは、それぞれのOS特有のもので
異環境との互換性についての便宜は一切無いと言えます。
    • good
    • 0
この回答へのお礼

ありがとうございます。CPUとOSが違うとどうしようもないみたいですね。JAVAではちょっとできないことがありそうなので、やはり実行したいPCのOSに合わせて作ります

お礼日時:2005/05/07 13:54

> 「AppleScript Studio」を使った、Cocoaアプリケーションというのは、Winで起動するすることは可能なのでしょうか?



「AppleScript Studio」については詳しくないので正確なことはわかりませんが、一般的には無理だと思います。Windows上で動くAppleScriptのインタープリタでも自作すればできるのでしょうが?(もしかすると既にあるかもしれませんが、私は知りません)

> MacでC又はC++で作ったアプリケーションはWinで利用可能なのでしょうか?

これはちょっと複雑です。
まず、CodeWarriorやGCC等のクロスコンパイラを使って、Mac上でWindows向けのアプリケーションを作った場合は、当然Windowsで利用可能です。
次に、Mac上で動作するアプリケーションの場合、コンソールアプリやクロスプラットフォームのツールキットを使用して開発したアプリケーションであれば、ソースレベルで互換性を持たせることは可能です(Windows用にコンパイルし直す必要はあります)。
また、CINTのようなC/C++インタープリタを利用するのであれば、そのままで再利用できる可能性もあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。少々初心者には辛い専門用語があったんですが、そのおかげで言葉の意味をいろいろ勉強できました。しかしちょっと自分の能力の許容範囲を超えていそうなので、Macで使うアプリはMacでWinで使うアプリはWinで作ったほうがいいですね

お礼日時:2005/05/03 12:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!