1233482424 MMORPGを主流とする現在のオンラインゲームのプログラミングはC++が主流と言われているようです。例えばJAVAのように他の言語ではダメなのでしょうか。当然作る目的によって言語は使い分けていくべきでしょうし、個人のフリーソフト程度なら規模的にそんなに気にしなくてももっと多くのふさわしい言語があると思うのですが。知識として言語の違いを調べても体感できるまではその違いがわからず、またソレがわかる機会もナイので質問してみました。

主な理由として聞いた話ではC++は処理が早いと聞いたのですが同じオブジェクト指向でもJAVAは何で遅いのかなども気になっています。私はプログラムを独学する程度の知識はありますが、多くの言語を広く浅くという程度なので深く携わった方のご意見も伺えればと思います。
http://q.hatena.ne.jp/1200988823
http://q.hatena.ne.jp/1207318858
など他の質問も見ました。言語の使い分けって余程の規模でない限りは厳密に考えることなく結構曖昧なところかなと思いますが(本職の企業レベルだとプロとしてまた別の話かもしれませんが)。どうぞよろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2009/02/01 19:00:26
  • 終了:2009/02/08 19:05:02

ベストアンサー

id:newta No.1

newta回答回数68ベストアンサー獲得回数72009/02/01 21:37:39

ポイント40pt

1つ目は

C++で書かれた言語はコンパイルするとネイティブコードになります(マシン語)

そのためのそれ用のOSでしか動きませんが早いです。

3つのOSに対応する場合、3つのソースコードが必要な部分があります。

Javaはコンパイルしてもネイティブコードになりません。

JavaVMが理解する中間コードになります。

1度ソースを書けばJAVAVMという仮想マシン上で動くので

どのOSでも基本的に動きます。

ただ、間に1枚処理が入るのでその分が遅いです。


2つ目は

Javaはメモリ管理を基本的にしなくてもかまいません。

使われなくなった変数や領域は自動的にガーベジコレクションによって開放されます。

この処理もJavaのバージョンがあがる度に早くはなっていますが、

処理がしないよりは遅いです。

C++ではガーベジコレクションがないので、自分でメモリ管理をしなければなりません。

使わなくなった変数は自分で開放していかなくてはなりません。

開放は1つも忘れてはなりません。余計な処理をしないため、面倒ですが、早いです。

ただ、この開放忘れはメモリリークといって重大なバグにつながる上、

原因を発見しにくいバグです。


主にビジネスソフトやWebソフトを作るときには少しの速度犠牲の変わりに

開発しやすさを求めてるので上の2つはJavaでOKですが、

ゲームとなると厳しい速度に対する要求があるのでC++が多くなります。

ただ、携帯電話のゲームなどはJavaで多く書かれています。

id:FREEz

とてもわかりやすい説明をありがとうございます。

携帯ゲーム、アプリですね。自分はそっちの本も数冊持っています。

だからそのあたりで拭い切れない疑問があったのかもしれません、、

つまり譲れない妥協点でオンラインゲームでは処理の早さが上位にあるので

必然的にC++となるのですね。

逆にいうなら、処理の速さをとりあえず置いておけるオンラインゲームなら

他の言語の方が有用かもしれない、と。

最近は携帯アプリも3Dが増えてきて数年前から処理上誤魔化しつつ頑張ってる節が見られますが、

今後は耐え切れずにC++が増えていくかもしれませんね。携帯で動くならw

もしくは逆にJAVAが頑張って処理を上げるか、、楽しみです。

実はJAVAの本で、JAVAでMMORPGは見たこともないし作るのは絶対にムリだ、、

と書いてあったので、そのあたりも気になるところでした。

JAVAVMに処理をまわす分でどれくらい処理が遅くなるのか気になるところです、、

それはどれくらい実感できるものなのかと、いつか検索しても見つからなかったのですが、、、

また探してみようと思います。

ありがとうございました。。

2009/02/02 00:25:05

その他の回答(2件)

id:newta No.1

newta回答回数68ベストアンサー獲得回数72009/02/01 21:37:39ここでベストアンサー

ポイント40pt

1つ目は

C++で書かれた言語はコンパイルするとネイティブコードになります(マシン語)

そのためのそれ用のOSでしか動きませんが早いです。

3つのOSに対応する場合、3つのソースコードが必要な部分があります。

Javaはコンパイルしてもネイティブコードになりません。

JavaVMが理解する中間コードになります。

1度ソースを書けばJAVAVMという仮想マシン上で動くので

どのOSでも基本的に動きます。

ただ、間に1枚処理が入るのでその分が遅いです。


2つ目は

Javaはメモリ管理を基本的にしなくてもかまいません。

使われなくなった変数や領域は自動的にガーベジコレクションによって開放されます。

この処理もJavaのバージョンがあがる度に早くはなっていますが、

処理がしないよりは遅いです。

C++ではガーベジコレクションがないので、自分でメモリ管理をしなければなりません。

使わなくなった変数は自分で開放していかなくてはなりません。

開放は1つも忘れてはなりません。余計な処理をしないため、面倒ですが、早いです。

ただ、この開放忘れはメモリリークといって重大なバグにつながる上、

原因を発見しにくいバグです。


主にビジネスソフトやWebソフトを作るときには少しの速度犠牲の変わりに

開発しやすさを求めてるので上の2つはJavaでOKですが、

ゲームとなると厳しい速度に対する要求があるのでC++が多くなります。

ただ、携帯電話のゲームなどはJavaで多く書かれています。

id:FREEz

とてもわかりやすい説明をありがとうございます。

携帯ゲーム、アプリですね。自分はそっちの本も数冊持っています。

だからそのあたりで拭い切れない疑問があったのかもしれません、、

つまり譲れない妥協点でオンラインゲームでは処理の早さが上位にあるので

必然的にC++となるのですね。

逆にいうなら、処理の速さをとりあえず置いておけるオンラインゲームなら

他の言語の方が有用かもしれない、と。

最近は携帯アプリも3Dが増えてきて数年前から処理上誤魔化しつつ頑張ってる節が見られますが、

今後は耐え切れずにC++が増えていくかもしれませんね。携帯で動くならw

もしくは逆にJAVAが頑張って処理を上げるか、、楽しみです。

実はJAVAの本で、JAVAでMMORPGは見たこともないし作るのは絶対にムリだ、、

と書いてあったので、そのあたりも気になるところでした。

JAVAVMに処理をまわす分でどれくらい処理が遅くなるのか気になるところです、、

それはどれくらい実感できるものなのかと、いつか検索しても見つからなかったのですが、、、

また探してみようと思います。

ありがとうございました。。

2009/02/02 00:25:05
id:y-kawaz No.2

y-kawaz回答回数1420ベストアンサー獲得回数2252009/02/02 12:08:45

ポイント40pt

サーバ側はメモリや処理速度を重視してC++になると思います。


あと、処理速度以外の面ではクライアント側のJavaはリバースエンジニアリングが簡単という点も大きいでしょう。

オンラインゲームは不正対策が徹底されている必要があるのでサーバとどのような通信をしているかは出来るだけ秘密にしたいわけです。

その点、Javaのバイトコードは中間言語にコンパイルされているだけなので、どこにでもあるようなツールを使うだけで、元のソースコードにかなり近い形まで簡単に戻すことが出来てしまいます。

そうすると悪巧みをするユーザの手による不正行為が横行しやすくなってしまうという問題点です。

まぁ当然バイトコードの暗号化を行うような製品もありますが…それでもネイティブコードに比べたら解析の容易さの次元が違うと思って差し支えないでしょう。

id:FREEz

お返事が遅れてしまい申し訳ないです。

なるほど、使い分けるという意味ではクライアントをJAVA、サーバをC++という手もありますね。

クライアントの3D処理が不安とは思いますが。結局はPC機能への依存という意味ではどれも同じで。

チート対策は結局いたちごっこになるとは思っていましたが入口を狭めるという意味でC++の方が有利とは知りませんでした。

リコンパイラは私も調べたことがありましたが思えばCの方でした。JAVAは容易なのですか。

結局は使い手次第とはいえ、技術の追いかけっこをしなければいけないのは大変ですね。

まぁ 最初からそんなに根詰める程考えなくてもいいのかもしれませんがw

ありがとうございました。

2009/02/07 17:35:55
id:syat No.3

シュウ☆回答回数3ベストアンサー獲得回数02009/02/05 16:31:35

trd@fヶhjごsdjgvbdふぉkぴgvbhじgvjdfvしdxしkjvkぽxどjvpfdpcfヴぉkgbfdpfgkdpこjgbdkふぉ

id:FREEz

?何だコレ?

2009/02/07 17:35:59
  • id:tsukasa57
    Java で書かれたプログラムを動かすには JVM が必要だけど、PS2 や XBOX などでは一般的には動作しないし...
    Windows 上で動作するゲームには http://www.getamped.jp/ のように Java を基盤としているものもある。
    http://www.cyberstep.com/business/platform.html にちょっとした説明があるけど、Oni というプラットフォームらしいね。
  • id:karla
    開発時にJavaを選ばない理由としては
    ・ガベージコレクションがコントロールできない(しにくい?)
    ・開発者がJavaに慣れていない事が多い。
    ・使用するライブラリがC言語対応のみとか。
    といった内容が多いです。
    作る度に悩みますが結局はC++で作る事になっています。


  • id:FREEz
    ご回答ありがとうございました。
    ポイントつけたいと思ってるのですが、回答終了後にポイントつけれなかったかな、、
    いつも思うのですが、自動でポイント設定されてしまって手をつけるタイミングがわからず。
    これもどこかに回答あるかな、、、

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません