web-dev-qa-db-ja.com

クロスプラットフォームライブラリを作成するにはどの言語を使用すればよいですか?

SyncML解析ライブラリ(Iなし)を構築します。これは、ライブラリのメソッドによって提供される、ホストアプリケーションによって提供される情報に基づいてメッセージを構築できるようにする必要があります。また、ライブラリは、ホストアプリケーションのメソッドへのコールバックを実行できる必要があります。

これをコンパイルして、できるだけ多くのプラットフォーム(Windows、Windows Phone 7 OS、OSX、iOS、Linux、Android、BlackBerry)で利用できるようにしたいと考えています。基本的に、可能な限り多くのプラットフォーム。

優先事項は、これをモバイルデバイスで使用できるようにすることです。

質問:

  1. どの設定を使用する必要がありますか? (プログラミング言語、コンパイラ、IDEなど)
  2. これらの異なるプラットフォーム用にこのライブラリをどのようにコンパイルし、どのように接続しますか?
  3. 他の情報はありますか?例えばクロスプラットフォーム開発の主題をカバーする記事?

この種のクロスプラットフォームプロジェクトはこれまで行ったことがないので、正しい方向に導くために利用できる情報があれば歓迎します。

私自身、C#/。NETおよびObjective-Cの経験があります。

10
Andrei

Javaプラットフォーム/ JVMを使用することは明らかな選択です。これは、あらゆるプラットフォームで最も幅広いプラットフォームに対応しており、C#/。Netのバックグラウンドがあれば、概念は非常によく知られています。

あなたがJava languageを使用してJavaプラットフォーム-実際、最近では、プロジェクトを最初から開始する場合、次のいずれかをお勧めします。

  • Scala-JVMで優れたパフォーマンスを発揮する、静的に型付けされた強力なマルチパラダイム言語が必要な場合。 C#の背景がある場合に適しています。
  • Clojure-動的言語のような関数型プログラミングを好み、最先端での生活を楽しむ場合。 Clojureには 本当に優れた同時実行機能 があり、魅力的かもしれません-リンクされたビデオは、いくつかの深い洞察を見る価値があります。
  • Groovy-C#/ Java開発者に非常に馴染みのある、シンプルだが効果的な動的オブジェクト指向のスクリプト言語が必要な場合。

これらのすべての言語は、JVMを使用することのすべての利点(素晴らしいJITコンパイラ、非常に効果的なガベージコレクション、膨大なライブラリのセット)を手に入れますが、作業する生産性の高い言語です。

ちなみに、すでに オープンソースSyncMLライブラリがJava Funambol と呼ばれています)で利用できます。これがどの程度直接役立つかはわかりません。しかし、これは通常、オープンソースがあるという事実の例ですJavaほとんどすべてのライブラリ......

他のオプションについての考え:

  • C/C++は確かにクロスプラットフォームで機能しますが、プラットフォームごとにネイティブコードに再コンパイル(およびその後のテスト)する必要があります。コンパイルされたバイトコード自体は移植可能であるため、JVM言語では必要ありません。パフォーマンスや生のハードウェア機能へのアクセスのためにC/C++が絶対に必要でない限り、それは避けるべき頭痛の種だと思います。
  • Monoの形式のC#は機能します(たとえば、 Unity がクロスプラットフォームライブラリとして成功することを確認))が、成熟度、ライブラリの可用性、さらには生のパフォーマンス。また、.Netには移植性の悪夢であるウィンドウ固有の機能があるため、Microsoft .Netと100%互換になることは決してありません。それでも、C#に固執することが決まったら、検討する価値があります。
  • クライアント側とサーバー側の両方でライブラリを使用することに関心がある場合、JavaScriptは外部オプションになる可能性があります。
8
mikera

.NETは多くのプラットフォームでほとんど利用できず、Objective-Cはさらに悪いことに加えて、.NETは少し遅く、ObjCは基本的にApple以外ではサポートされていません。言語としてのCは、何らかの外部要因によって使用されない限り、基本的に検討する価値さえありません。

結果として実行可能な唯一の言語はC++です。

3
DeadMG

Java-Javaランタイム環境(仮想マシン)はクロスプラットフォームです、Javaを使用できますAndroid=(またはJava ME)を使用)のモバイルデバイスでは、.NETはそれに非常に似ています。

3
malejpavouk

これは1つの選択肢ではなく、多くの選択肢です。どこにでも行くものを1つ見つけるのは魅力的ですが、それが常に最良の方法であるとは限りません。

  1. たとえば、WindowsモバイルプラットフォームでC++コードを圧縮することは可能ですが、サポートの観点から見ると、.NETの方が対応するものよりも常に簡単です。

  2. 同様に、それをネイティブにするかランタイムで実行するかにかかわらず、主要な選択を行う必要があり、厳密にWebセントリックまたはより一般的な強力なものに制限されていますか?たとえば、Adobeランタイムはより偏在的ですが、コアプログラミング言語と比較して実行できることが制限されます。

  3. 私が推測する最も重要なことは、作成するGUIのタイプとレベルです。

今最も有望な選択肢に来ています。

a。 Symbian、Blackberry、Android、BREW、Bada(samsung)の場合、Java/J2MEが最も一般的な方法です。ただし、一部のプラットフォームのネイティブコアのものについては、多くの場合C/C++の方が優れている場合があります。

b。サポートされている言語を使用するWindows .NETが適切です。

c。 iOSの場合-目的C以外の選択肢はありません。これは[〜#〜]ではありません[〜#〜]C++なので、私はしません目標として数える

これは wikiリファレンス であり、すべてのプラットフォームのセットを示し、すべてのオプションとそれらが適用される場所を示しています。

あなたの質問のおかげで、私は上記のwikiリンクから、上記の問題を解決しようとするSDKがあることを知りました。最も近い2つは次のとおりです。

  1. マーマレード: http://www.madewithmarmalade.com/marmalade/supported-platforms これは興味深いことにほとんどすべてのプラットフォームをサポートしています。 Windowsは、完全な円を作るために追加されるところです。

  2. 粒子コード: http://www.particlecode.com/

まだ使っていませんが、面白そうですね。

3
Dipan Mehta