7

Vala で生成されたコードは、通常の手書きの C コードのように最適化されていますか? GObject システムを使用しない場合にパフォーマンスのオーバーヘッドはありますか?

注: 私の次の C プロジェクトでは、Vala を使用するかどうかを調べています。このプロジェクトは GUI アプリケーションではなく、プラットフォームに依存しないインタープリターのようなアプリケーションです。コンパイラとして gcc を使用しています。

4

4 に答える 4

8

それは、あなたが C を書いて何をしたかによって異なります。特に:

  • 私は GObject ベースの C コードを手で書くことができるので、限界はどのくらいですか? 手書きの GObject ベースの C と Vala で書かれた GObject ベースの C の違い? Vala は人間とほぼ同じライブラリ呼び出しを生成するため、おそらく匹敵します。
  • GObject クラスは技術的にはオプションです。クラスのすべての GLib コード生成をスキップするようにクラスをマークでき[Compact]ます。これにより、仮想メソッドなどの多くの機能が失われますが、はるかに高速になります。これには、C で記述されたオブジェクトよりもオーバーヘッドがわずかに大きくなりますが、スレッドセーフな参照カウントと、通常の C プログラマーが気にしない他のいくつかのことが伴います。
  • Vala は多くの一時変数を生成します。C コンパイラが最適化されている場合、これらの一時ファイルのほとんどは削除されます。Vala の制御構造の大部分は C の対応部分と一致するため、Valaifは C よりも驚くほど高価になることはありませんif
  • Vala は、コンパイル時にメモリ管理を行うために参照を追跡します。通常、これは安価ですが、配列と文字列の余分な重複を引き起こす可能性があります。特に、所有されていない文字列を所有されている変数にコピーすると、strdupが自動的に呼び出されます。これは、生成された Vala がこれらの小さな一時的なオブジェクトをより多く作成することを意味しますが、それが本当に問題である場合は、慎重unownedに作成を制限するために使用できます。
于 2013-06-12T13:27:43.357 に答える
4

Vala コンパイラで生成されたコードは、GObject ライブラリを使用します。GObject を回避する必要がある場合は、vala パーサーを使用して vala コードを解析しますが、生成されたコードでは GObject を使用しない aoop コンパイラを使用することをお勧めします。

Aroopコンパイラは、オブジェクトの作成と操作用に最適化されたオブジェクト プールを使用するコードを生成します。オブジェクトのコレクションには、データ指向の機能があります。たとえば、非常に効率的な方法でオブジェクトをトラバースしながら、オブジェクトにフラグを立てたり、フラグを選択したりできます。オブジェクトはすべて、メモリの場所の観点から近い距離にあります。

aoop コンパイラは、独自の GUI を持たないshotodolプロジェクトを作成するために使用されます。モジュールとプラグインシステムがあります。サーバー アプリケーションを作成できるコマンド ライン インターフェイスを備えています。ショットドルを利用したサーバーアプリケーションの例は、ここにshotdol_webとして存在します。このプロジェクトが好きな人は、プロジェクト ページで問題を共有してください。

于 2015-03-25T09:46:49.537 に答える