クロスプラットフォームのデスクトッププログラミング:C ++とPython [非公開]


11

申し分なく、始めに、私はアマチュアObj-C / CocoaおよびRuby w / Railsプログラマーとしての経験があります。これらは素晴らしいですが、クロスプラットフォームのアプリケーションを書くのにあまり役に立ちません(GNUStepがいつか最初にマルチプラットフォームになるのに十分なものになることを願っていますが、その日は今日ではありません)。

私が収集できるものからのC ++は、非常に強力ですが、マスターするには半年以上かかる巨大でcanい巨人でもあります。また、メモリ管理はすべて手作業なので、足で自分自身を撃つだけでなく、足全体を吹き飛ばすことが非常に簡単にできることも読みました。明らかに、これはすべて非常に威圧的です。それが正しいか?

PythonはC ++のパワーの大部分を提供しているようで、速度を犠牲にして簡単に入手できます。この犠牲の大きさは?それは意味がありますか、それとも無視できますか?

合理的な時間内に高速で安定した信頼性の高いアプリケーションを作成できますか?

また、UIにQtを使用するか、プラットフォームごとに個別のネイティブフロントエンドを維持する方が良いでしょうか?

編集:さらに明確にするために、書きたいアプリケーションには2つのタイプがあります。1つは非常に使いやすく便利なデータベースフロントエンドであり、もう1つは間違いなく後で登場する3Dワールドエディターです。


あなたは答えが非常に主観的である質問をしている-私見は建設的ではないので、閉じて投票する。また、1つで少なくとも4つの異なる質問をします。C ++またはPythonがあなたにとってより良い選択であるどうか、あなた以外の誰かはどうすれわかりますか?Pythonで小さなGUIアプリケーション(1日以内に完了します)と同じアプリケーションをC ++で作成し、自分で比較してみることをお勧めします。
ドックブラウン

私が本当に求めていることは、私が探しているものが与えられていると思いますが、客観的にはより良い選択ですか?
ジョンウェルズ

追加のコンテキストを提供できますか?デスクトップアプリは何をする必要がありますか?たくさんの数学?生産性アプリ?データベースアクセス?ゲーム?
JBRウィルキンソン

やりたいことを明確にするために編集を追加しました。
ジョンウェルズ

オペレーティングシステムやGUIライブラリと同じ言語を使用することを選択します。UIをより簡単に詳細に操作できます。JavaやC#などの高レベルの言語で、フルスクリーン(ブラウザーでF11キーを押す)のような単純なものをシミュレートしてみてください。ケースを休ませます。ネイティブソリューションは、java(皮肉なことに)のような高レベルソリューションよりも幅広いデバイスに移植可能です。
主Tydus

回答:


8

C / C ++は高速です。現実には、ほとんどのアプリは現在のハードウェアの状態でそのパフォーマンスを必要としません。通常の方法は、C / C ++などの低レベル言語で必要に応じて最適化するよりも、Pythonなどの高レベル言語でアプリケーションを開発することです。

Pythonを使用すると、生産性が大幅に向上します。習得が容易で、適度に高速です。Cythonがあり、これを使用して、Pythonアプリで使用するC拡張機能を記述し、Pythonのような構文でボトルネックを高速化できます。

標準のGUIアプリの場合、pythonは十分なパフォーマンスを提供できます。また、PythonにはKivyと呼ばれる非常にクールなものがあります。これは、Mac、Windows、Linux、Android、およびiOSで実行され、マルチタッチをサポートするGUIフレームワークです。おまけの部分は、Cythonを使用して、パフォーマンスが重要な部分がCで最適化されることです。


1
おそらく速度については正しいでしょう。Kivyは非常に有能なようですが、システム固有のウィジェットを描画できますか?
ジョンウェルズ

いいえ、OpenGL ESを使用して、ウィジェット用の独自のグラフィックエンジンを使用します。Qtは、おそらくクロスプラットフォームネイティブウィジェットに最適です。
ハカンDeryal

5

Pythonを使用すると、生産性が大幅に向上します。C ++で速度を必要とするアプリの一部を引き続き作成できます。Cythonプロジェクトがあり、PythonでC ++ライブラリを直接使用できます。ソースのセキュリティが心配な場合は、Cythonも役立ちます。Cythonを使用して、通常のpythonコードをC ++コードにコンパイルできます。

Chromeエンジンを埋め込み、次のようなテクノロジーを使用することをお勧めします。HTML5+ CSS3 + Javascript + JQuery + Canvas for UI。

C ++アプリにChromeエンジンを簡単に組み込むことができるフレームワークがあります。これはCEF-Chromium Embedded Frameworkと呼ばれます。Windows、Linux、Mac OSをサポートしています。

Pythonが好きなら、CEF Pythonご覧ください。CEFフレームワークにPythonバインディングを提供するプロジェクトです(Cythonを使用)。CEF pythonは現在Windowsのみをサポートしていますが、他のOSの計画もあります。

CEFを使用して成功したアプリケーションのリストを以下に示します(ここから取得)。

  • Adobe Brackets-Web用のコードエディター
  • Adobe Edge-マルチメディアオーサリングツール
  • AppJS-Node.jsを使用してデスクトップアプリケーションを構築する
  • AOLインスタントメッセンジャー-WindowsクライアントはCEFを使用します
  • Cubiez-お気に入りのコンテンツをデスクトップに統合します
  • Desura-オンラインゲームプラットフォーム
  • Dish World IPTV-ストリーミングビデオプラットフォーム
  • Evernote-ノート作成ソフトウェア
  • ExeOutput-html5 / phpアプリケーションをデスクトップアプリケーションとしてデプロイできます
  • GitHub for Windows-Windows用GitHubクライアントソフトウェア
  • Janetter-Twitterクライアントソフトウェア
  • mChef-mIRCブラウザープラグイン
  • MediaMan-オーガナイザーソフトウェア
  • MetaVR-地理シミュレーションソフトウェア
  • MTG Studio-ゲームオーガナイザーソフトウェア
  • OpenSpace3D-3D開発プラットフォーム
  • Rdio-ストリーミング音楽プラットフォーム
  • Spotify-ストリーミング音楽プラットフォーム
  • Steamクライアント-オンラインゲームプラットフォーム
  • Tencent QQ-インスタントメッセージングプログラムおよびWebブラウザー
  • トレンドマイクロ-インターネットセキュリティソフトウェア
  • WBEAデスクトップ-html5アプリケーションをデスクトップアプリケーションとして展開できます

また、このブログのエントリを見て:Webテクノロジーにデスクトップ品質のアプリケーションを構築する -彼らは使用して構築された方法を説明するブラケットエディタチームCEFフレームワークのようにとウェブの技術を:jQueryのブートストラップLESS CSSrequireJSユニットテストのためのジャスミンJSlint

免責事項:私はCEF Pythonプロジェクトの著者です。


ご意見ありがとうございます!CEFは非常に素晴らしく見えますが、可能な限り各プラットフォームでネイティブエクスペリエンスを提供したいと考えています。これは、HTML、CSS、およびJSでは再現が困難です。
ジョンウェルズ

@JohnWells、なぜネイティブですか?人々はウェブ体験に慣れています。Windows 8を見てください。Microsoftの次の各OSはネイティブとはあまり関係がなく、Webテクノロジーを強制しています。これは未来です。「ネイティブエクスペリエンス」のようなものはありません。過去のものです。
チャレックトムザック

それはあなたが話しているソフトウェアに依存します。消費者向けのアプリケーションは「Web」の感覚で大丈夫かもしれませんが、コンテンツ作成を中心としたソフトウェアではそれほどうまくいきません。また、Windows 8はWeb技術を対象としていますが、Mac OSは依然としてネイティブランドにしっかりと根付いており、ユーザーはそこから逸脱するソフトウェアを嫌う傾向があります。
ジョンウェルズ

1
かなり正しいJBRWilkinsonですが、必要のない場合は、各プラットフォーム用のウィジェット模倣CSS(CEFの場合)を実際に記述したくありません。
ジョンウェルズ

1
自分がMacユーザーであるため、ネイティブエクスペリエンスは私にとって非常に重要です。私の目には、実行されているOSと一貫性がなく表示され、動作しないアプリケーションほど悪いものはありません。大規模な生産性向上のようなものでさえ、それを上回るには不十分です。
ジョンウェルズ

5

C ++のQtの方法は素晴らしく、きれいなので、「厄介な」部分を削除してください。両方試してみました。個人的には、PythonのQtバインディングよりもQt / C ++の方がはるかに生産的/快適です。Qtを選択した場合、それが私のアドバイスです。さらに、Qtウィジェットが提供するネイティブエクスペリエンスに加えて、QMLテクノロジーを備えたQt5とQtQuick2、およびアプリ内にJavaScriptとHTML5を埋め込む機能により、必要に応じてモダンなWeb風のルックアンドフィールを提供します。

では、なぜデスクトップアプリでPythonが好きではなく、スクリプトやサーバーサイドの事柄のためにPythonを保持したいのですか?

  • Pythonはクロスプラットフォームの喜びを少し壊し、クライアントはアプリを実行するためにPythonをインストールする必要があり(特にWindowsで)、Pythonの公式WebサイトにあるさまざまなPythonバージョンがクライアントを混乱させます。 。

  • Pythonを実行して、より大きなアプリを作成します(サイズに関して)。

  • Pythonアプリは、より多くのメモリを消費します。

それは個人的な視点です。Qtの親システムであるスマートポインターを使用すると、足でも足でも自分自身を撃つことはできません。C++ 11はさらに多くの機能を提供します。


3
「クライアントはアプリを実行するためにPythonをインストールする必要があります」-アプリでpython dllを配布できます。ユーザーがpythonを手動でインストールする必要はありません。あなたはpy2exeまたは他のバグのあるexeメーカーを使用する必要はありません(私の経験から)、Python Embeddingを参照してください、それはc ++コードのほんの数行です、PyRun_SimpleStringをPyRun_SimpleFileに置き換えますアプリのサイズ。「Pythonアプリ、より多くのメモリを消費します。」-Cythonを使用して、アプリのメモリを要求する部分を最適化します。
チャレックトムザック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.