4

私は D(2) 言語がとても好きで、マルチプラットフォームの GUI アプリケーションに使用したいと考えていますが、そのエコシステムはまだ十分に開発されていないようです。Linux から (無料の) PC-BSD に移行した後、ポートに 64 ビット コンパイラの準備が整っていないことがわかりました。また、GUI ライブラリ (QtD、gtkD、wxD) のいずれかが本格的なプロジェクトの準備ができているかどうかもわかりません。できるだけ早くプロジェクトを開始します。

乙、私は以前、多くのツール、GUI ライブラリなどを備えた成熟した Python を試すように勧められていましたが、速度について疑問がありました。エフェメリスを計算するために 1 つの C ライブラリを使用し、その C ライブラリを使用するいくつかのライブラリを作成する必要があります。 .

しかし、これは Cython にとっては良い (完璧な) 仕事かもしれません。私の質問は、Python (Qt、EFL) で GUI 部分を書き、Cython をパフォーマンスが重要なもの (外部 C ライブラリをバインドし、独自のものを書くこと) に使用することについてどう思いますか? D が本格的なプロジェクトの準備が整うのを (待っている) 代わりに、ライブラリ) を使用しますか?

4

4 に答える 4

7

私は明らかに Cython コア開発者として偏見を持っていますが、Cython をお勧めすることはできます。CPython と Cython の組み合わせは、他の方法では到達が困難なレベルの開発速度、プラットフォームの安定性、移植性、低レベルのコーディングと FFI 機能、および実行パフォーマンスを提供します。これには、迅速で単純なコードから高度に調整された C のコードへの非常に簡単な最適化パスが含まれます。速度。

また、Qt を GUI ツールキットとして強くお勧めします。これは、Python と非常にうまく連携します。

于 2011-04-16T12:51:37.987 に答える
6

D は私のお気に入りのプログラミング言語で、Python は 2 番目に好きな言語なので、これは私にとって興味深い質問です。今のところ、私は D が好きですが、エコシステムがやや未熟であることを認めざるを得ません。

GtkD はかなり本格的なプロジェクトの準備ができていますが、特にドキュメントに関しては、他の言語の GUI ツールキットの標準に完全には達していません。私はそれをプロットライブラリに使用しましたが、かなりうまく機能しましたが、いくつかの小さな問題がありました. DWT は最近、D2 のサポートを追加しました。AFAIK WxD は単なるバインディングであり、D 化されたラッパーではありません。QtD には、特定の機能に対してパッチを適用したコンパイラが必要になるなど、いくつかのその他の問題がありました。通常、D2 で GUI プロジェクトを今すぐ実行できますが、完全に順風満帆というわけではありません。

Cython は純粋な Python の遅さを軽減するための優れた試みですが、パフォーマンスが必要な場合や低レベルの作業を行う能力が必要な場合は、D を好むいくつかの重大な弱点があります。

  • C のようなパフォーマンスを期待する場合は、明示的な型宣言が必要です。一般的なコードを記述しようとすると、パフォーマンスが大幅に低下します。Dでは、テンプレートを使用して 効率的な汎用コードを非常に簡単に記述できます。

  • Cython は、Python を面白くするクールな機能のいくつかを適切に実装していない/実装していません。たとえば、最近クロージャのサポートを取得したばかりです。この状況がどれほど急速に改善されているか、または他にどのような制限が残っているかはわかりません。

  • スレッド化が関係している場合でも、Python のグローバル インタープリター ロックがあります。

  • Cython と通常の CPython インタープリターの両方を使用し、Cython コードを通常の Python コードとは別のモジュールに保持しなければならないのは、少し面倒に感じます。特に効率を重視する場合は、言語間のインターフェースに沿って一般的に摩擦があります。たとえば、Numpy 型は Cython では効率的に「機能する」だけではありません。

于 2011-04-16T16:31:52.760 に答える
2

GUI を動的言語で記述し、パフォーマンスが重要なコードを別の言語で記述することは、アプリケーションを作成する優れた方法です。これは Python で実行できます。また、Tcl/Tk や他のいくつかのスクリプト言語でも非常に簡単に実行できます。

于 2011-04-16T15:47:06.240 に答える
1

C/C++ または C モジュールにリンクできる任意の言語で数値演算コードを記述し、スクリプト言語を使用してパフォーマンス クリティカルではないものを簡単に追加するのが典型的な使用例です。Python C インターフェイスは問題なく動作し、SWIG を使用したり、バインディング コードを手動で記述したりすることはそれほど難しくありません (スレッドについて話し、CPython のばかげた GIL を処理する必要がある場合を除きます...)。

于 2011-04-16T14:23:37.507 に答える