.NET / MonoまたはJavaは、クロスプラットフォーム開発に適していますか?[閉まっている]


108

Javaに比べてMonoのライブラリはどれくらい少ないのですか?

私は両方の選択肢の概要を欠いていますが、次のプロジェクトにはかなり自由に選択できます。私は次の分野で難しい技術的事実を探しています

  • パフォーマンス(たとえば、Javaはスレッド化に適していると聞いていますが、ランタイムコードの最適化が.NETで最近非常に良くなったと聞いています)
  • 現実世界の移植性(どちらも移植可能であることを意味します。それぞれのCatch-22は何ですか?)
  • ツールの可用性(CI、ビルド自動化、デバッグ、IDE)

私はグーグルでできることよりも、あなたが実際にあなた自身の仕事で経験したことを特に探しています。私のアプリケーションは、時系列からの大量のデータを処理するバックエンドサービスです。

私の主なターゲットプラットフォームはLinuxです。

編集: 私の質問をより適切に表現するために、私は言語だけでなく、パッケージ全体(サードパーティのライブラリなど)に興味があります。ライブラリの場合、それはおそらく「JavaのライブラリよりもMonoのライブラリの方がはるかに少ない」という質問に要約されますか?


ちなみに、私はこのプロジェクトのためにJavaを選択しました。それは、移植性の面でJavaがさらに使い古されているように見え、古いシステムでもしばらくの間使用されているためです。私はC#に非常に興味があるので、少し悲しいです。C#でいくつかの大規模なプロジェクトを実行したいのですが、次回はそうするかもしれません。すべてのアドバイスをありがとう。


3
すばらしい質問です。クロスプラットフォーム開発の評価も検討しています。
Mat Nadrofsky、2008年

「which-language」タグを追加しますが、すでに5つあるので運がありません。
ダニエルダラナス09

強く...あなたはどのターゲットプラットフォームに依存
するThorbjörnRavnアンデルセン

1
golangを見るには、今が良い時期かもしれません...
StartupGuy

Xojoも検討に値するかもしれません。Windows、Mac LinuxのLLVMを使用してネイティブアプリをコンパイルします。IDEビルドの自動化、デバッグなどがあります。ライブラリには多くの機能があり、必要に応じて拡張できます。www / xojo.com
Paul Lefebvre

回答:


96

まあ..Javaは実際にはより移植性があります。Monoはどこにでも実装されているわけではなく、Microsoftの実装よりも大幅に遅れています。Java SDKは、プラットフォーム間でより適切に同期しているようです(より多くのプラットフォームで動作します)。

Windowsプラットフォームの.NETで利用できるツールはたくさんありますが、Javaはこれらすべてのプラットフォームでより多くのツールを利用できます。

2014年の更新

私は2014年もこの意見を保持しています。しかし、しばらく気にしていないので、Monoに少し注意を向け始めたところです。Monoランタイム(またはエコシステム)が改善される可能性があります。 )私は知らされていません。私の知る限り、WIFのWPF、WCF、WFはまだサポートされていません。MonoはiOSでも実行できますが、私の知る限り、JavaランタイムはMonoよりもはるかに多くのプラットフォームで実行できます。また、Monoは大幅に改善されたツール(Xamarin)を見始めており、Microsoftは、クロスプラットフォームのような態度と、パートナーと協力して競争よりも補完的にする意欲があるようです(たとえば、Monoは今後のOWIN / Helios ASP.NETランドスケープのかなり重要な部分)。今後数年間で、携帯性の違いは急速に小さくなると思います。

2018年の更新

これに対する私の見方は、逆になり始めています。.NETは、広く、特に.NET Coreで、Javaとの「移植性」を実現し始めていると思います。一部のプラットフォームでは.NET CoreにWPFを導入する取り組みが進行中であり、現在、.NET Core自体は非常に多くのプラットフォームで実行されています。Mono(現在はXamarinが所有し、現在はMicrosoftが所有)は、これまで以上に成熟して洗練された製品であり、複数のプラットフォームで動作するアプリケーションを作成することは、もはや。 。もちろん、Windows専用または特定のプラットフォームのみを対象とするライブラリとサービスとアプリケーションもありますが、Javaについても同様です(広く)。

私がこの時点でOPの立場にいる場合、この時点以降のアプリケーションに.NETを選択するのを妨げるような言語や技術スタック自体に固有の理由はないと考えることができます。


2
これを読んで、マイクロソフトの世界での投票について喜んでいます。.NETは本当に良いですが、Javaには正当性があります。私は常に.NET開発者と古いJava開発者として説明しようとしたので;)
JoeBilly

+1。Javaの移植性(重要なアプリケーション(つまり、Webサーバー、複雑なGUI、分析エンジン)の場合)は、他のどの方法よりも優れていることがわかりました。完璧ではありませんが、今すぐ手に入れられる最高のものです。
mikera

1
@Ben、2013年もこの意見を持っていますか?もしそうなら、あなたはそれについて言及してもいいですか、そしてあなたがこの答えを更新しないなら?多くの場合、4歳の解答を読むと、それを理解するのは困難です。
Benjamin Gruenbaum 2013年

1
@BenjaminGruenbaumはい、私は長い間Monoにあまり注意を払っていなかったと言って、この時点で私の意見を認めるので、私は行っていないMonoランタイム(またはエコシステム)に改善があるかもしれません知った。私の知る限り、WPF、WCF、WFはまだサポートされていません。MonoはiOSでも実行できますが、私の知る限り、JavaランタイムはMonoよりもはるかに多くのプラットフォームで実行できます。あ、はい。適格ですが、はい。
ベンコリンズ

@HighCore引数自体はMono に対するものではありません。これは事実の表明にすぎません。WPFに依存するコードを記述する場合、Monoを使用することはできません。エルゴそれはそのようにして移植不可能です。JavaのUIフレームワークはひどいかもしれませんが、私が知る限り、Javaが機能するすべての場所で機能します(ハードウェアがそのようなUIをサポートします)。これはJavaをより良くするものではなく、この特定の方法でより移植性の高いものにします。
ベンコリンズ

112

Monoは、サポートしたいプラットフォームをターゲットにすることでより良い仕事をします。それ以外はすべて主観的です。

次のプラットフォームでC#コードを共有しています:-iOS(iPhone / iPad)-Android-Web(HTML5)-Mac(OS X)-Linux-Windows

さらに多くの場所で共有できます:-Windows Phone 7-Wii-XBox-PS3-など

MonoTouchは素晴らしく機能するので、最も重要なのはiOS です。JavaでiOSをターゲットにする良い方法を知りません。JavaでWindows Phone 7をターゲットにすることはできないので、Javaがモバイルにとってより優れている時代は私たちの背後にあると言えます。

私にとって最大の要因は、個人の生産性(そして幸福)です。言語としてのC#はJava IMHOよりも数年先であり、.NETフレームワークは使用する喜びです。Java 7とJava 8で追加されているもののほとんどは、長年C#で提供されています。ScalaやClojure(どちらもCLRで利用可能)などのJVM言語は非常に優れています。

私はMonoをそれ自体がプラットフォーム(優れたもの)と見なしており、.NETをWindows上のMonoのMicrosoft実装として扱います。つまり、私は最初にMonoを開発してテストします。これは素晴らしい働きをします。

Javaと.NET(Monoとしましょう)の両方が企業の裏付けのないオープンソースプロジェクトである場合、私は毎回JavaよりもMonoを選択します。私はそれがより良いプラットフォームだと信じています。

.NET / MonoとJVMはどちらも優れた選択肢ですが、私は個人的にはJVMでJava以外の言語を使用しています。

他のコメントのいくつかを私の見解:

問題:パフォーマンス。

**回答:JVMとCLRはどちらも、批判者が言うよりもパフォーマンスが優れています。JVMの方がパフォーマンスが良いと思います。通常、Monoは.NETよりも低速です(常にではありません)。

私は個人的には、開発者としてもエンドユーザーとしても、J2EEを介したASP.NET MVCをいつでも利用します。Google Native Clientのサポートも非常に優れています。また、デスクトップJavaアプリのGUIパフォーマンスの低下は過去のものと考えられていますが、遅いものを見つけ続けています。次に、WPFについても同じことが言えます。GTK#は十分高速ですが、低速である必要はありません。

問題:Javaには、利用可能なライブラリのより大きなエコシステムがあります。

回答:おそらく正しいですが、実際には問題ではありません。

実質的にすべてのJavaライブラリ(JDKを含む)は、IKVM.NETのおかげで。この技術はまさに驚異的です。統合は素晴らしいです。ネイティブと同じようにJavaライブラリを使用できます。ただし、1つの.NETアプリでJavaライブラリを使用するだけで済みました。.NET / Monoエコシステムは通常、私が必要とする以上のものを提供します。

問題:Javaはより優れた(より広範な)ツールをサポートしています

回答:Windowsではサポートされていません。そうでなければ私は同意します。MonoDevelopは素晴らしいです。

MonoDevelopに一言をお伝えしたいと思います。宝石です。MonoDevelopは、コード補完(インテリセンス)、Git / Subversion統合、ユニットテストのサポート、SQL統合、デバッグ、簡単なリファクタリング、オンザフライの逆コンパイルによるアセンブリブラウジングなど、使用したいほとんどのツールを統合します。サーバー側のWebからモバイルアプリまで、すべてに同じ環境を使用するのは素晴らしいことです。

問題:プラットフォーム間の互換性。

回答:Monoは、Windowsを含むすべてのプラットフォームにわたる単一のコードベースです。

最初にMono用に開発し、必要に応じてWindows上の.NETにデプロイします。ただし、.NETをMSからJavaに比較すると、Javaはプラットフォーム間の一貫性の点で優位です。次の答えを見てください...

問題:Monoが.NETを遅らせる。

回答:いいえ、ありません。私見、これはよく言われますが、正しくない発言です。

XamarinのMonoディストリビューションには、C#、VB.NET、F#、IronPython、IronRubyが同梱されています。Mono C#コンパイラは、MSで完全に最新です。Mono VB.NETコンパイラはMSバージョンよりも遅れています。他のコンパイラは両方のプラットフォームで同じです(Nemerle、Boo、Phalanger(PHP)などの他の.NET言語も同様)。

Monoには、Dynamic Language Runtime(DLR)、Managed Extensibility Framework(MEF)、F#、ASP.NET MVCなど、実際にMicrosoftが作成したコードの多くが同梱されています。Razorはオープンソースではないため、Monoは現在MVC2に同梱されていますが、MVC3はMonoで問題なく動作します。

コアMonoプラットフォームは.NETまたは長年のペースを維持しており、互換性は印象的です。完全なC#4.0言語と一部のC#5.0機能さえ今日使用できます。実際、Monoは多くの場合、.NETをリードしています。

Monoは、MicrosoftさえもサポートしていないCLR仕様の一部を実装しています(64ビット配列など)。.NETの世界で最もエキサイティングな新しいテクノロジーの1つがRosylynです。Monoは長年サービスとしてC#コンパイラを提供してきました。何Rosylynのオファーの中には、経由して提供されていますNRefractoryにも。Monoがまだ先を行っている例として、ゲームのパフォーマンスを加速するSIMD命令があります。

Microsoftは、.NETに加えてMonoでは利用できない多くの製品を提供していますが、これはMonoの遅延に関する誤解が原因でした。Windows Presentation Foundation(WPF)、Entity Framework(EF)、WCF(Windows Communication Foundation)は、Monoで機能しない、またはサポートが不十分な製品の例です。明白な解決策は、代わりにGTK#、NHibernate、ServiceStackなどのクロスプラットフォームの代替手段を使用することです。

問題:マイクロソフトは悪です。

正解です。だから何。

多くの人々は、Monoの使用を避けるために次の理由を提供しています。

1)Microsoftの技術を回避する必要があるため、Monoを使用しないでください。

2)Monoは、Microsoftが提供するすべてのテクノロジを使用できるわけではないため、

私には、これらのステートメントに互換性がないことは明らかです。私は最初のステートメントを拒否しますが、ここではその議論をスキップします。2番目のステートメントは、すべての.NET代替案に当てはまります。

JVMは優れたプラットフォームであり、JVM言語の急増は素晴らしいものです。幸せになるものを使ってください。今のところ、それは私にとってしばしば.NET / Monoです。


3
ゲームの後半でそのような広範な答えをありがとう。私はこれまでMono / .Net / C#を使用したことがありませんが、あなたの投稿はその世界における最近の進展のいくつかを反映しているようです。たとえば、MonoTouchが3.5年前にそれほど重要だったことを思い出しません。
Hanno Fietz

3
「Monoは.NETに遅れをとらない」という答えに混乱しています。あなたはそれを主張し、それからそれが実際に.NET(Entity Frameworkなど)より遅れる方法を6通り述べます。MicrosoftのC#コンパイラーに遅れをとっていないと言っても安全ですが、.NETエコシステムはせいぜいMonoの断片的なものです。それはあなたの目的には問題ないように見えますが、誰にとっても問題ではなく、そこには正当な懸念があります。
samkass 2012

1
@samkass:ここでのポイントは、「ラグ」と「このライブラリを実装しない」の違いだと思います。Javaの世界では、これはAndroidがSwingライブラリーを実装していないことに類似しています。また、クロスプラットフォーム(およびオープンソースのbtw)に相当するものが提供されていることにも注意してください。私は毎日Monoを使用していますが、「断片的である」というのは間違いなく私の経験ではありませんでした。
konrad.kruczynski

9
完全で堅牢なWCFとEFのサポートの欠如、およびWPFは、.NET 3.0以降に取り組んできたほぼすべてのモノにとってキラーです。はい、選択肢はありますが、.NETの機能の大きな部分はこれらの追加フレームワークです。これらがないと、.NETと互換性のあるMonoを呼び出すことができないと思います。せいぜい部分的な実装です。私はNHibernateも使用しており、率直に言ってEFはより優れたテクノロジーです。ServiceStackを使用したことはありません。IMO Monoは、かなりのリスクを伴います。
MrLane

1
WCFを見逃した場合は、servicestackを確認してください。真剣に、WCFを実装しないことは良いことです!
アンリアル

54

私は実際に.NETで開発し、すべてのテストを最初にMonoで実行し、次にWindowsで実行します。そうすれば、自分のアプリケーションがクロスプラットフォームであることを知ることができます。ASP.NETとWinformsの両方のアプリケーションでこれを成功させました。

Monoがとてもひどい印象を受けた人がどこにいるのか本当にわかりませんが、私の事例や意見では確かにそれがうまくいったのです。世界では、これまでのところ、WindowsおよびLinux上の.NET 2.0は私にとって非常に強固です。

これには明らかに多くの癖があることを覚えておいてください。しかし、それらのほとんどは、移植可能なコードを作成していることを確認することから来ています。フレームワークは実行しているOSを抽象化するのに優れていますが、パスやファイル名でのLinuxの大文字と小文字の区別などの小さなことは、アクセス許可のようなものに慣れるのに少しかかります。

これまでの私の経験に基づくと、.NETは間違いなくMonoのため非常にクロスプラットフォームです。


無知と呼んでください。でも、ASP.NETをモノでテストする必要がありますか?.NETになるものはすべてサーバー側なので、どのOSに表示されるかは問題ではありませんか?
イーサンガンダーソン

9
Ethan、Monoを使用すると、LinuxでASP.netアプリをホストできます。
エリックハスキンズ

2
なんらかの理由で、誰もがWindowsでアプリを実行したいとは限りません。
バーナード

2
@リッチB:クライアントがMS製品を望まない場合、.NETは明らかに間違った選択です。
KjetilØdegaard2009年

21
@Kjetil:MonoはMS製品ではありません。
GEOCHET 2009年

26

Javaは実際、誰もが言うようにクロスプラットフォームです。ほぼすべての主流OS(ついにはMac OS Xでも)のためのJVM実装があり、それらはすべて非常にうまく機能します。そして、クロスプラットフォームと同じくらい多くのオープンソースツールが世の中に出回っています。

唯一の問題は、DLLやSOを記述しないとJavaで実行できない特定のネイティブ操作があることです。これらが実際に発生することは非常にまれです。ただし、これらすべてのケースで、ネイティブプロセスを生成し、結果をスクリーンスクラップすることで、問題を回避することができました。


1
また、Javaがクロスプラットフォームの方法でネイティブ操作を実行できないほとんどすべてのケースで、同じことが.NETにも当てはまります
Eli Courtwright

最後に?Mac OS Xは、10.0以降JVMを実装しています。:)
mipadi 2010

3
@Eli-おそらく正しい。ただし、.NET / Monoのネイティブ機能との統合は、Javaの場合よりもはるかに簡単です。したがって、ネイティブプラットフォームとうまく統合しようとしている場合は、.NET / Monoが本当の利点を提供します。
ジャスティン

「ネイティブプロセスの生成と結果のスクリーンスクレイピング」震動
基本

AndroidとiOSのどちらにもすぐに使えるJVMはないので、「ほぼすべての主流のOS」を試してみます。一方、.NETの新しいポータブルクラスライブラリを使用すると、モバイルを含むプラットフォーム間でコンパイルされたコード(実際にはUIコードではありません)を実際に共有できます。
Mathieson 2014

18

質問の言い回しが間違っていると思います。C#対Javaは、(a)サポートする必要のあるプラットフォーム、および(b)コアライブラリと利用可能なサードパーティのライブラリを検討する場合よりも、クロスプラットフォームの使用に関してはそれほど興味深いものではありません。言語は意思決定プロセスのほとんど重要でない部分です。


同意した。仮想マシンがさまざまなアーキテクチャでどれだけサポートされているかが問題です。
Allain Lalonde、

同意した。顧客がそれを実行できない場合、完全な開発を行うのは面白くない。
–ThorbjørnRavn Andersen、2010

15

クロスプラットフォーム開発には、Javaの方が適しています。

  • パフォーマンス。Javaと.Netは、仮想マシンのために同様のパフォーマンスレベルを持っていますが、JVMは通常、何年にもわたる最適化により、より優れたパフォーマンスを実現しています。

  • 図書館。これはあなたのタスクに依存しますが、Javaにはそこで利用できるオープンソースまたはサードパーティのライブラリがはるかに多くあります。サーバーアプリケーションの場合、J2EE、Spring、Strutsなど。GUIの場合。.NetはWin32レイヤーAPIを提供しますが、これにより互換性の問題が発生します。JavaにはSwing、SWT、AWTなどがあります。ほとんどの場合、動作します。

  • 互換性。これは、クロスプラットフォームプログラムを開発する際に考慮する必要がある重要な問題です。2つの問題:最初に、プラットフォームの互換性。JDKは単一のオリジナル企業であるSunによって適切に管理されているため、Javaは依然として成功しています。MonoはMSによって保守されていないため、更新の互換性はまだ保証されていません。2.下位互換性。Sunは下位互換性に関して高い評価を維持していますが、これは厳しすぎるように見えてペースが遅くなることがあります。

  • ツール。Javaには優れたクロスプラットフォームIDEがあります。Netbeans、Eclipseなど。ほとんどは無料です。VS Studioは優れていますが、Windowsでのみ使用でき、多少のコストはかかりません。どちらも優れた単体テスト、デバッグ、プロファイルなどを提供します。

したがって、Javaを選択することをお勧めします。ショーケースとして、Javaによって開発された有名なデスクトップクロスプラットフォームアプリがいくつかあります。それらはIDEは言うまでもなく、Vuze、Limewire、BlogBridge、CrossFTPです。.Netについては、そのような成功したアプリに関する知識は限られています。


「その他」のLinuxでモノを使用するのは注意が必要です。これは、モノの主な問題を反映しています。モノの未来は、ミゲルデイカザの独裁政権に依存しすぎています。ケース・イン・ポイント:「他...(サポートされていない)」の先細りサポート[ mono-project.com/Other_Downloads] Linuxの相関(に思える私見 Linuxでのミゲル・デ・Icaza氏の幻滅(と)tirania.org/blog/archive/ 2013 / Mar-05.html)。Javaはこの独裁問題に悩まされません。C#はより多くのプラットフォームで実行できますが、それにはコスト、リスク、妥協、およびde Icaza氏への依存が伴います。結構です。
StartupGuy 2013

@ Michael.Mなので、オラクルの気まぐれなところにいるほうが好きですか?
–ThorbjørnRavn Andersen 2013

@ThorbjørnRavnAndersen:間違い。できるだけ簡単に説明します。.Net- > MSFT プラットフォーム(安定した成功企業、限定的だがきちんとしたエコシステム); モノ - >デIcaza氏のフレームワーク(エルdictador;ないホットLinuxとそのショーのために:[ cultofmac.com/218632/... - 、それは「サポートされていない」悪夢CentOSに6.4にモノをインストールしてみます)。Javaがある仕様(Oracleは一つだけである)のコミュニティに属しており、多くの異なるベンダーの実装を持っている[ coderanch.com/t/327542/java/java/...
StartupGuy

@ThorbjørnRavnAndersen:..さらに、主要なJavaコミュニティスポンサーはOracleを除外しても成功し、非常によくサポートされます-Java はOracleの気まぐれでは決してありません ---参照してください:news.techworld.com/applications/3252787/ … OracleはJavaの関与をすべて捨てることができ、それでもそれは生き続けるでしょう。他のどのベンダーが.Netプラットフォームを持っていますか?Xamarin以外のモノラルランタイムを提供しているのは誰ですか?Javaは独裁政権の影響を受けないこれらの唯一のものであり、真のコミュニティ制御、コミュニティサポート、コミュニティスチュワードシップを備えています。
StartupGuy 2013年

1
@ Michael.M仕様?コミュニティに属していますか?私はあなたが間違っていると思います-私はまた、Sunの買収後にOpenJDKプロジェクトがシャットダウンされなかった唯一の理由はGPLだったと信じています。TCKが自由に利用できず、それがOracle JVMのように動作するJVMを作成するために必要なのは、JavaがOracleの根本にあるからです。MonoやDe Icazaには問題はありませんが、Javaの状況の方がはるかに良いとは思いません。IBMがサポートを停止したとき、勢いのある唯一の代替JVMプロジェクトは死にました。
するThorbjörnRavnアンデルセン


8

Javaについてもお話します。それを成熟度の観点から見ると、JVMをWindows以外のプラットフォームで動作させるために、Sun(およびその他の人)はより多くの時間と労力を費やしています。

対照的に、Monoは間違いなく.NETエコシステムの2番目の市民です。

ターゲットの顧客が誰であるかに応じて、Monoの使用に対する真の反発があるかもしれません。Novellは、Windows上のJavaまたは.NETと同じ種類のMonoのベンダーサポートを提供していますか?

主にWindowsでサービスをホストすることをターゲットにしている場合、この選択を検討することは理にかなっていますが、主にLinuxをターゲットにしているので、私には一種の簡単なように思えます。


私はMonoが2等市民であることに同意する傾向がありますが、結論には同意しません。Javaは古くから存在しており、レガシーの癖やメモリ管理の問題に悩まされていることは言うまでもありません。Javaは、ほとんどの場合、最も詳細な方法を選択することは言うまでもありません。また、何年もの間(言語)はかなり停滞しており、.Netに何年もあった機能を組み込むようになったのはごく最近のことです。私見、それは2つの悪の選択です... .Netを使用したFlakeyプラットフォームのサポート、または進化するのが非常に遅く、コーディングする面倒な面倒な巨大なサポート。
基本的な

7

Javaはクロスプラットフォームになるように設計されています。C#/。Netはそうではありませんでした。疑問がある場合は、目的に合わせて設計されたツールを使用してください。

編集:公平に言うと、.NETは組み込み/ PC /サーバー環境で動作するように設計されているため、クロスプラットフォームのSORTです。しかし、それはLinux用に設計されていません。


3
まあ、C#はISO標準化されているので、アイデアはクロスプラットフォームのものを作ることでした。マイクロソフトは他のプラットフォーム用の実装を開発したくありませんでしたが、言語は標準であるため、他の関係者に任されています。ただし、.Netフレームワークはもっと複雑な話です。
zappan 2008

Monoは優れた実装ですが、DotGNU(Macの場合も)
AndreiRîneaSep

1
zappan:C#で有効な点(わかりませんでした)ですが、.NETは巨大なものになっています。確かに私は個人的な経験はありません。
AlexeyMK 2008年

@zappan-実用的な観点からは、C#が標準化されていること(またはMonoがC#のかなり優れたクローンを作成していること)は関係ありません。プラットフォームの移植性は、言語自体だけでなく、プラットフォーム全体(ライブラリとツールエコシステムを含む)についてです。その意味で、.Netは完全にクロスプラットフォームではありません。
mikera

7

答えは「場合によります」と思います。Javaはほとんど何でも動作しますが、.NET / Monoは(IMHO)デスク​​トップ向けの優れたフレームワークです。だから答えは本当にあなたがターゲティングする予定のプラットフォームに依存すると思います。


デスクトップは、デスクトップ空間の最大部分を持っていますが、ウィンドウと同義ではありません。
ZOXIS 2017

6

会話にもう少し追加すると、Javaの移植性が1つ下がればJavaの移植性が高まります。Java5には多くの優れた機能があるため、Java 6を待つことができ、言語やライブラリの点で多くの範囲を開発できます。と。Macは、最新のJavaバージョンに追いつくのに時間がかかる主要なプラットフォームです。

Javaには、多くの異なる企業からの入力に基づいてプラットフォームをインテリジェントに成長させる優れた標準化団体もあります。これは見過ごされがちな機能ですが、複数のプラットフォームにわたって新しい機能も適切に機能し、一部の難解なもの(オプションの拡張として)のライブラリサポートに多くの範囲を提供します。


OS X 10.6は、Sun Java 6リリースに完全に追いついています。
–ThorbjørnRavn Andersen、2010

5

JavaはC#よりも移植性が高いと投票します。Javaには、非常に豊富な標準ライブラリのセットもあります。Jakartaプロジェクト(http://jakarta.apache.org/)によって提供されているものなど、オープンソースのサードパーティライブラリの幅広いセットもあります。)ます。

CI、ユニットテストなど、通常の容疑者はすべて存在します。クロスプラットフォームIDEのサポートは、Eclipse、Netbeans、IntelliJ IDEAなどと同様に非常に優れています。


4

他の言語の選択肢もあります。私はPythonがとても好きになりました。PythonはWindows、Linux、Macでうまく機能し、豊富なライブラリセットがあります。


ええ、私はPythonが大好きで、Webアプリに好きなDjangoを持っていますが、それを受け入れられないものがいくつかありました。最も重要なのは、インタープリターの標準C実装におけるGILです。マルチコアマシンでの並列計算の恩恵を多く受ける操作がいくつかあり、cPythonでそれを行うにはプロセスを生成する必要があります。
Hanno Fietz

3

Monoには問題があります私はそれはあなたがネイティブプラットフォーム呼び出しへの依存度を持っている場合は特に優れたクロスプラットフォームの互換性の話を持っていると思います。

スタックオーバーフローには、(少なくとも私の経験3では).NET / Monoでネイティブを呼び出して実行することで、同等のJavaの取り組みと比べてどれほどスムーズに実行できるかを強調するのに十分な言葉がありません。


.NET / Monoからプラットフォーム固有のコードを呼び出すことは、Cから呼び出せる限り、非常に簡単です。CXXI(セクシーと発音)を使用すると、C ++コードを呼び出すのも簡単になります。tirania.org/blog/archive/2011/Dec-19.html
Justin

2

ゲイターホールそれをバックアップするためのデータはありますか?

パフォーマンス。Javaと.Netは、仮想マシンのために同様のパフォーマンスレベルを持っていますが、JVMは通常、何年にもわたる最適化により、より優れたパフォーマンスを実現しています。

背景:私はWindows 3.1以降のWindowsの人で、現在はLinuxユーザーです(Visual Studio 2010およびその他のツールのVMでWindows 7、優れたOSを実行しています)。

要点:私と多くのユーザー(windows、linuxなど)はあなたの意見に反対するかもしれません。JavaはLinuxデスクトップアプリケーションでもパフォーマンスが低下する傾向がありますが、ASP.NETは、Javaサーバーページを何度も実行するよりも高速です。いくつかのシナリオでは、コンパイルされていないPHPでもパフォーマンスが向上することに同意する人もいます。

Javaはよりクロスプラットフォームですか?私はこれについては疑いの余地はありません(これについての歴史を振り返ります)。


役立つ可能性のある別の質問があり、もちろん言語の銃撃戦があります。JVMはより高度に最適化されている可能性がありますが、それには近いです(特にWindowsの場合)。ASP.NET対J2EEまたはJSPのベンチマークはさらに疑わしいですが、ランタイムが同程度の場合でもASP.NETの方がはるかに高速であると私は確信しています。
ジャスティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.